blob: 9de3e9d12873fb477da2f509303d203a2bd7b08b [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, 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/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -0700148/* forward declarations */
149void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
150 void *pBodyptr, tANI_U32 bodyVal) ;
151VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
152 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700153VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
154VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
155
156extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
157 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
158void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
159 tANI_U32 *pConfig) ;
160void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
161 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
162void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
163 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
164void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
165 void* pUserData ) ;
166static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
167static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
168void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800169void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700170void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700171#ifdef WLAN_FEATURE_VOWIFI_11R
172VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
173#endif /* WLAN_FEATURE_VOWIFI_11R */
174
Jeff Johnson295189b2012-06-20 16:38:30 -0700175void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
176void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
177VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700178#ifdef FEATURE_WLAN_SCAN_PNO
179static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
180static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
181static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
182#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -0700183#ifdef WLAN_FEATURE_PACKET_FILTERING
184static VOS_STATUS WDA_Process8023MulticastListReq (
185 tWDA_CbContext *pWDA,
186 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
187 );
188static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
189 tWDA_CbContext *pWDA,
190 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
191 );
192static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
193 tWDA_CbContext *pWDA,
194 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvFltPktClearParam *pRcvFltPktClearParam
199 );
200#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700202static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
203 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700204VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
205 v_U8_t *pDefaultKeyId,
206 v_U8_t *pNumKeys,
207 WDI_KeysType *pWdiKeys );
208
209#ifdef WLAN_FEATURE_GTK_OFFLOAD
210static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
211static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
212#endif // WLAN_FEATURE_GTK_OFFLOAD
213
214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700220/*
221 * FUNCTION: WDA_open
222 * Allocate the WDA context
223 */
224VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
225 tMacOpenParameters *pMacParams )
226{
227 tWDA_CbContext *wdaContext;
228 VOS_STATUS status;
229 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700230 /* Allocate WDA context */
231 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
232 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
233 if(!VOS_IS_STATUS_SUCCESS(status))
234 {
235 return VOS_STATUS_E_NOMEM;
236 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700237 /*__asm int 3;*/
238 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
239
240 /* Initialize data structures */
241 wdaContext->pVosContext = pVosContext;
242 wdaContext->wdaState = WDA_INIT_STATE;
243 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
244
245 /* Initialize WDA-WDI synchronization event */
246 status = vos_event_init(&wdaContext->wdaWdiEvent);
247 if(!VOS_IS_STATUS_SUCCESS(status))
248 {
249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
250 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800251 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700252 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700253 /* Init Frame transfer event */
254 status = vos_event_init(&wdaContext->txFrameEvent);
255 if(!VOS_IS_STATUS_SUCCESS(status))
256 {
257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
258 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800259 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700260 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700261 status = vos_event_init(&wdaContext->suspendDataTxEvent);
262 if(!VOS_IS_STATUS_SUCCESS(status))
263 {
264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
265 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800266 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700267 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
269 if(!VOS_IS_STATUS_SUCCESS(status))
270 {
271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
272 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800273 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 wdaContext->driverMode = pMacParams->driverType;
277 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
278 &wdiDevCapability, pMacParams->driverType))
279 {
280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
281 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800282 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700283 }
284 else
285 {
286 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
287 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
288 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700289 /* update max STA in WDA used for BA */
290 wdaContext->wdaMaxSta = pMacParams->maxStation;
291 /* store the frameTransRequired flag in wdaContext, to send this to HAL
292 * in WDA_Start
293 */
294 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
295 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800297
298error:
299 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
300 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700301}
302
Jeff Johnson295189b2012-06-20 16:38:30 -0700303/*
304 * FUNCTION: WDA_preStart
305 * Trigger DAL-AL to start CFG download
306 */
307VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
308{
309 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
310 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700311 /*
312 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
313 */
314 wdaMsg.type = WNI_CFG_DNLD_REQ ;
315 wdaMsg.bodyptr = NULL;
316 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 /* post the message.. */
318 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
319 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
320 {
321 vosStatus = VOS_STATUS_E_BADMSG;
322 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700323 return( vosStatus );
324}
Jeff Johnson295189b2012-06-20 16:38:30 -0700325/*
326 * FUNCTION: WDA_wdiStartCallback
327 * Once WDI_Start is finished, WDI start callback will be called by WDI
328 * to indicate completion of WDI_Start.
329 */
330void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
331 void *pVosContext)
332{
333 tWDA_CbContext *wdaContext;
334 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700335 if (NULL == pVosContext)
336 {
337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700338 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700339 return;
340 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
342 if (NULL == wdaContext)
343 {
344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700345 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 return;
347 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
349 {
350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700351 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 }
353 else
354 {
355 wdaContext->wdaState = WDA_START_STATE;
356 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700357 /* extract and save version information from the Start Response */
358 wdaContext->wcnssWlanCompiledVersion.major =
359 wdiRspParams->wlanCompiledVersion.major;
360 wdaContext->wcnssWlanCompiledVersion.minor =
361 wdiRspParams->wlanCompiledVersion.minor;
362 wdaContext->wcnssWlanCompiledVersion.version =
363 wdiRspParams->wlanCompiledVersion.version;
364 wdaContext->wcnssWlanCompiledVersion.revision =
365 wdiRspParams->wlanCompiledVersion.revision;
366 wdaContext->wcnssWlanReportedVersion.major =
367 wdiRspParams->wlanReportedVersion.major;
368 wdaContext->wcnssWlanReportedVersion.minor =
369 wdiRspParams->wlanReportedVersion.minor;
370 wdaContext->wcnssWlanReportedVersion.version =
371 wdiRspParams->wlanReportedVersion.version;
372 wdaContext->wcnssWlanReportedVersion.revision =
373 wdiRspParams->wlanReportedVersion.revision;
374 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
375 wdiRspParams->wcnssSoftwareVersion,
376 sizeof(wdaContext->wcnssSoftwareVersionString));
377 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
378 wdiRspParams->wcnssHardwareVersion,
379 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700380 /* Notify WDA_start that WDI_Start has completed */
381 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700382 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 {
384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700385 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700386 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 return;
388}
389
Jeff Johnson295189b2012-06-20 16:38:30 -0700390/*
391 * FUNCTION: WDA_start
392 * Prepare TLV configuration and call WDI_Start.
393 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700394VOS_STATUS WDA_start(v_PVOID_t pVosContext)
395{
396 tWDA_CbContext *wdaContext;
397 VOS_STATUS status;
398 WDI_Status wdiStatus;
399 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 if (NULL == pVosContext)
401 {
402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700403 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700404 return VOS_STATUS_E_FAILURE;
405 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
407 if (NULL == wdaContext)
408 {
409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700410 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700411 return VOS_STATUS_E_FAILURE;
412 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 /* Non-FTM mode, WDA status for START must be INIT
414 * FTM mode, WDA Status for START can be INIT or STOP */
415 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
416 (WDA_STOP_STATE != wdaContext->wdaState) )
417 {
418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
419 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700420 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 return VOS_STATUS_E_FAILURE;
422 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 /* initialize the wdiStartParam. Note that we can create this on
424 the stack since we won't exit until WDI_Start() completes or
425 times out */
426 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700427 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 /* prepare the config TLV for the WDI */
429 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
430 if ( !VOS_IS_STATUS_SUCCESS(status) )
431 {
432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700433 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return VOS_STATUS_E_FAILURE;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* note from here onwards if an error occurs we must
437 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
439 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
440 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* initialize the WDA-WDI synchronization event */
442 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 /* call WDI start */
444 wdiStatus = WDI_Start(&wdiStartParam,
445 (WDI_StartRspCb)WDA_wdiStartCallback,
446 (v_VOID_t *)pVosContext);
447 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
448 {
449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700450 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 vos_mem_free(wdiStartParam.pConfigBuffer);
452 return VOS_STATUS_E_FAILURE;
453 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 /* wait for WDI start to invoke our callback */
455 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
456 WDA_WDI_START_TIMEOUT );
457 if ( !VOS_IS_STATUS_SUCCESS(status) )
458 {
459 if ( VOS_STATUS_E_TIMEOUT == status )
460 {
461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700462 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 }
464 else
465 {
466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
467 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700468 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 }
470 vos_mem_free(wdiStartParam.pConfigBuffer);
471 return VOS_STATUS_E_FAILURE;
472 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700473 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700474 /* we no longer need the config TLV */
475 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* if we are not in the START state then WDI_Start() failed */
477 if (WDA_START_STATE != wdaContext->wdaState)
478 {
479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700480 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 return VOS_STATUS_E_FAILURE;
482 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* FTM mode does not need to monitor BA activity */
484 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
485 {
486 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800487 if(VOS_STATUS_SUCCESS == status)
488 {
489 wdaContext->wdaTimersCreated = VOS_TRUE;
490 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700492 return status;
493}
494
Jeff Johnson295189b2012-06-20 16:38:30 -0700495/*
496 * FUNCTION: WDA_prepareConfigTLV
497 * Function to prepare CFG for DAL(WDA)
498 */
499VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
500 WDI_StartReqParamsType *wdiStartParams )
501{
502 /* get pMac to acess CFG data base */
503 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
504 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
505 tHalCfg *tlvStruct = NULL ;
506 tANI_U8 *tlvStructStart = NULL ;
507 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
508 v_PVOID_t *configParam;
509 tANI_U32 configParamSize;
510 tANI_U32 *configDataValue;
511 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 if ((NULL == pMac)||(NULL == wdaContext))
513 {
514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700515 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 VOS_ASSERT(0);
517 return VOS_STATUS_E_FAILURE;
518 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
520 WNI_CFG_STA_ID_LEN +
521 WNI_CFG_EDCA_WME_ACBK_LEN +
522 WNI_CFG_EDCA_WME_ACBE_LEN +
523 WNI_CFG_EDCA_WME_ACVI_LEN +
524 WNI_CFG_EDCA_WME_ACVO_LEN +
525 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 /* malloc memory for all configs in one shot */
527 configParam = vos_mem_malloc(configParamSize);
528
529 if(NULL == configParam )
530 {
531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700532 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 VOS_ASSERT(0) ;
534 return VOS_STATUS_E_NOMEM;
535 }
536 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700537 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 tlvStruct = (tHalCfg *)configParam;
539 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 /* TODO: Remove Later */
541 /* QWLAN_HAL_CFG_STA_ID */
542 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
543 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
544 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
545 eSIR_SUCCESS)
546 {
547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
548 "Failed to get value for WNI_CFG_STA_ID");
549 goto handle_failure;
550 }
551 tlvStruct->length = strLength ;
552 /* calculate the pad bytes to have the CFG in aligned format */
553 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
554 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700555 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
556 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
558 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
559 tlvStruct->length = sizeof(tANI_U32);
560 configDataValue = (tANI_U32 *)(tlvStruct + 1);
561 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
562 != eSIR_SUCCESS)
563 {
564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
565 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
566 goto handle_failure;
567 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700568 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
569 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700570 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
571 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
572 tlvStruct->length = sizeof(tANI_U32);
573 configDataValue = (tANI_U32 *)(tlvStruct + 1);
574 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
575 eSIR_SUCCESS)
576 {
577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
578 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
579 goto handle_failure;
580 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
582 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
584 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
585 tlvStruct->length = sizeof(tANI_U32);
586 configDataValue = (tANI_U32 *)(tlvStruct + 1);
587 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
588 != eSIR_SUCCESS)
589 {
590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
591 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
592 goto handle_failure;
593 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
595 + sizeof(tHalCfg) + tlvStruct->length)) ;
596
597 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
598 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
599 tlvStruct->length = sizeof(tANI_U32);
600 configDataValue = (tANI_U32 *)(tlvStruct + 1);
601 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
602 configDataValue ) != eSIR_SUCCESS)
603 {
604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
605 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
606 goto handle_failure;
607 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
609 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 /* QWLAN_HAL_CFG_CAL_PERIOD */
611 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
612 tlvStruct->length = sizeof(tANI_U32);
613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
614 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
615 != eSIR_SUCCESS)
616 {
617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
618 "Failed to get value for WNI_CFG_CAL_PERIOD");
619 goto handle_failure;
620 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700621 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
622 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700623 /* QWLAN_HAL_CFG_CAL_CONTROL */
624 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
625 tlvStruct->length = sizeof(tANI_U32);
626 configDataValue = (tANI_U32 *)(tlvStruct + 1);
627 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
628 != eSIR_SUCCESS)
629 {
630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
631 "Failed to get value for WNI_CFG_CAL_CONTROL");
632 goto handle_failure;
633 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700634 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
635 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 /* QWLAN_HAL_CFG_PROXIMITY */
637 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
638 tlvStruct->length = sizeof(tANI_U32);
639 configDataValue = (tANI_U32 *)(tlvStruct + 1);
640 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
641 != eSIR_SUCCESS)
642 {
643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
644 "Failed to get value for WNI_CFG_PROXIMITY");
645 goto handle_failure;
646 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
648 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
650 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
651 tlvStruct->length = sizeof(tANI_U32);
652 configDataValue = (tANI_U32 *)(tlvStruct + 1);
653 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
654 != eSIR_SUCCESS)
655 {
656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
657 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
658 goto handle_failure;
659 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
661 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
663 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
664 tlvStruct->length = sizeof(tANI_U32);
665 configDataValue = (tANI_U32 *)(tlvStruct + 1);
666 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
667 eSIR_SUCCESS)
668 {
669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
670 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
671 goto handle_failure;
672 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
674 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
676 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
677 tlvStruct->length = sizeof(tANI_U32);
678 configDataValue = (tANI_U32 *)(tlvStruct + 1);
679 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
680 configDataValue ) != eSIR_SUCCESS)
681 {
682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
683 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
684 goto handle_failure;
685 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700686 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
687 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700688 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
689 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
690 tlvStruct->length = sizeof(tANI_U32);
691 configDataValue = (tANI_U32 *)(tlvStruct + 1);
692 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
693 eSIR_SUCCESS)
694 {
695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
696 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
697 goto handle_failure;
698 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700699 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
700 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700701 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
702 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
703 tlvStruct->length = sizeof(tANI_U32);
704 configDataValue = (tANI_U32 *)(tlvStruct + 1);
705 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
706 eSIR_SUCCESS)
707 {
708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
709 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
710 goto handle_failure;
711 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
713 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700714 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
715 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
716 tlvStruct->length = sizeof(tANI_U32);
717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
718 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
719 eSIR_SUCCESS)
720 {
721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
722 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
723 goto handle_failure;
724 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
726 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
728 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
729 tlvStruct->length = sizeof(tANI_U32);
730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
731 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
732 configDataValue ) != eSIR_SUCCESS)
733 {
734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
735 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
736 goto handle_failure;
737 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
739 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
741 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
742 tlvStruct->length = sizeof(tANI_U32);
743 configDataValue = (tANI_U32 *)(tlvStruct + 1);
744 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
745 configDataValue ) != eSIR_SUCCESS)
746 {
747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
748 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
749 goto handle_failure;
750 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700751 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
752 + sizeof(tHalCfg) + tlvStruct->length));
753
754 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
755 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
756 tlvStruct->length = sizeof(tANI_U32);
757 configDataValue = (tANI_U32 *)(tlvStruct + 1);
758 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
759 configDataValue ) != eSIR_SUCCESS)
760 {
761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
762 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
763 goto handle_failure;
764 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
766 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700767 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
768 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
769 tlvStruct->length = sizeof(tANI_U32);
770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
771 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
772 configDataValue ) != eSIR_SUCCESS)
773 {
774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
775 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
776 goto handle_failure;
777 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
779 + sizeof(tHalCfg) + tlvStruct->length));
780
781 /* QWLAN_HAL_CFG_FIXED_RATE */
782 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
783 tlvStruct->length = sizeof(tANI_U32);
784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
785 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
786 != eSIR_SUCCESS)
787 {
788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
789 "Failed to get value for WNI_CFG_FIXED_RATE");
790 goto handle_failure;
791 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700792 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
793 + sizeof(tHalCfg) + tlvStruct->length));
794
795 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
796 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
797 tlvStruct->length = sizeof(tANI_U32);
798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
799 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
800 != eSIR_SUCCESS)
801 {
802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
803 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
804 goto handle_failure;
805 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700806 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
807 + sizeof(tHalCfg) + tlvStruct->length));
808
809 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
810 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
811 tlvStruct->length = sizeof(tANI_U32);
812 configDataValue = (tANI_U32 *)(tlvStruct + 1);
813 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
814 configDataValue ) != eSIR_SUCCESS)
815 {
816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
817 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
818 goto handle_failure;
819 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700820 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
821 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700822 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
823 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
824 tlvStruct->length = sizeof(tANI_U32);
825 configDataValue = (tANI_U32 *)(tlvStruct + 1);
826 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
827 configDataValue ) != eSIR_SUCCESS)
828 {
829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
830 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
831 goto handle_failure;
832 }
833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700835 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
836 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
837 tlvStruct->length = sizeof(tANI_U32);
838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
839 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
840 configDataValue ) != eSIR_SUCCESS)
841 {
842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
843 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
844 goto handle_failure;
845 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700846 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
847 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700848 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
849 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
850 tlvStruct->length = sizeof(tANI_U32);
851 configDataValue = (tANI_U32 *)(tlvStruct + 1);
852 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
853 configDataValue ) != eSIR_SUCCESS)
854 {
855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
856 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
857 goto handle_failure;
858 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
860 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700861 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
862 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
863 tlvStruct->length = sizeof(tANI_U32);
864 configDataValue = (tANI_U32 *)(tlvStruct + 1);
865 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
866 configDataValue ) != eSIR_SUCCESS)
867 {
868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
869 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
870 goto handle_failure;
871 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
873 + sizeof(tHalCfg) + tlvStruct->length);
874
875#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
876 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
877 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
878 tlvStruct->length = sizeof(tANI_U32);
879 configDataValue = (tANI_U32 *)(tlvStruct + 1);
880 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
881 configDataValue ) != eSIR_SUCCESS)
882 {
883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
884 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
885 goto handle_failure;
886 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700887 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
888 + sizeof(tHalCfg) + tlvStruct->length);
889#endif
890 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
891 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
892 tlvStruct->length = sizeof(tANI_U32);
893 configDataValue = (tANI_U32 *)(tlvStruct + 1);
894 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
895 configDataValue ) != eSIR_SUCCESS)
896 {
897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
898 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
899 goto handle_failure;
900 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700901 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
902 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700903 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
904 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
905 tlvStruct->length = sizeof(tANI_U32);
906 configDataValue = (tANI_U32 *)(tlvStruct + 1);
907 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
908 eSIR_SUCCESS)
909 {
910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
911 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
912 goto handle_failure;
913 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700914 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
915 + sizeof(tHalCfg) + tlvStruct->length);
916
917 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
918 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
919 tlvStruct->length = sizeof(tANI_U32);
920 configDataValue = (tANI_U32 *)(tlvStruct + 1);
921 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
922 configDataValue ) != eSIR_SUCCESS)
923 {
924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
925 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
926 goto handle_failure;
927 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700928 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
929 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700930 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
931 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
932 tlvStruct->length = sizeof(tANI_U32);
933 configDataValue = (tANI_U32 *)(tlvStruct + 1);
934 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
935 configDataValue ) != eSIR_SUCCESS)
936 {
937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
938 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
939 goto handle_failure;
940 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700941 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
942 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700943 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
944 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
945 tlvStruct->length = sizeof(tANI_U32);
946 configDataValue = (tANI_U32 *)(tlvStruct + 1);
947 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
948 configDataValue ) != eSIR_SUCCESS)
949 {
950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
951 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
952 goto handle_failure;
953 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700954 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
955 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700956 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
957 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
958 tlvStruct->length = sizeof(tANI_U32);
959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
960 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
961 configDataValue ) != eSIR_SUCCESS)
962 {
963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
964 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
965 goto handle_failure;
966 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
968 + sizeof(tHalCfg) + tlvStruct->length);
969
970 /* QWLAN_HAL_CFG_STATS_PERIOD */
971 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
972 tlvStruct->length = sizeof(tANI_U32);
973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
974 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
975 eSIR_SUCCESS)
976 {
977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
978 "Failed to get value for WNI_CFG_STATS_PERIOD");
979 goto handle_failure;
980 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700981 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
982 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700983 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
984 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
985 tlvStruct->length = sizeof(tANI_U32);
986 configDataValue = (tANI_U32 *)(tlvStruct + 1);
987 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
988 eSIR_SUCCESS)
989 {
990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
991 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
992 goto handle_failure;
993 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700994 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
995 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700996 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
997 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
998 tlvStruct->length = sizeof(tANI_U32);
999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1000 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1001 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1005 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1009 != eSIR_SUCCESS)
1010 {
1011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1012 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1013 goto handle_failure;
1014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1016 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001017 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1018 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1019 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1022 &strLength) != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1026 goto handle_failure;
1027 }
1028 tlvStruct->length = strLength;
1029 /* calculate the pad bytes to have the CFG in aligned format */
1030 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1031 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001032 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1033 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001034 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1035 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1036 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1037 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1038 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1039 &strLength) != eSIR_SUCCESS)
1040 {
1041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1042 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1043 goto handle_failure;
1044 }
1045 tlvStruct->length = strLength;
1046 /* calculate the pad bytes to have the CFG in aligned format */
1047 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1048 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001049 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1050 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1052 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1053 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1054 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1055 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1056 &strLength) != eSIR_SUCCESS)
1057 {
1058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1059 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1060 goto handle_failure;
1061 }
1062 tlvStruct->length = strLength;
1063 /* calculate the pad bytes to have the CFG in aligned format */
1064 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1065 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001066 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1067 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1069 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1070 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1071 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1072 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1073 &strLength) != eSIR_SUCCESS)
1074 {
1075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1076 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1077 goto handle_failure;
1078 }
1079 tlvStruct->length = strLength;
1080 /* calculate the pad bytes to have the CFG in aligned format */
1081 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1082 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1084 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1086 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1087 tlvStruct->length = sizeof(tANI_U32);
1088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1089 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1090 != eSIR_SUCCESS)
1091 {
1092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1093 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1094 goto handle_failure;
1095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1097 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001098 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1099 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1100 tlvStruct->length = sizeof(tANI_U32);
1101 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1102 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1103 != eSIR_SUCCESS)
1104 {
1105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1106 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1107 goto handle_failure;
1108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1110 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1112 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1113 tlvStruct->length = sizeof(tANI_U32);
1114 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1115 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1116 != eSIR_SUCCESS)
1117 {
1118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1119 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1120 goto handle_failure;
1121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001122 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1123 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001124 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1125 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1126 tlvStruct->length = sizeof(tANI_U32);
1127 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1128 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1129 != eSIR_SUCCESS)
1130 {
1131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1132 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1133 goto handle_failure;
1134 }
1135 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1136 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001137 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1138 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1139 tlvStruct->length = sizeof(tANI_U32);
1140 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1141 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1142 != eSIR_SUCCESS)
1143 {
1144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1145 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1146 goto handle_failure;
1147 }
1148 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1149 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001150 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1151 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1152 tlvStruct->length = sizeof(tANI_U32);
1153 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1154 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1155 != eSIR_SUCCESS)
1156 {
1157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1158 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1159 goto handle_failure;
1160 }
1161 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1162 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1164 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1165 tlvStruct->length = sizeof(tANI_U32);
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1168 != eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1172 goto handle_failure;
1173 }
1174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1175 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1177 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1181 != eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1185 goto handle_failure;
1186 }
1187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1190 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1194 != eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1198 goto handle_failure;
1199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1203 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1211 goto handle_failure;
1212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1216 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1217 tlvStruct->length = sizeof(tANI_U32);
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1220 != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1224 goto handle_failure;
1225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1227 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001228 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1229 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1230 * into FW, so the parameters are added here.
1231 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1233 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1234 tlvStruct->length = sizeof(tANI_U32);
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1237 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1238 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1240 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1241 tlvStruct->length = sizeof(tANI_U32);
1242 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1243 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1244 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1245 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1247 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1248 tlvStruct->length = sizeof(tANI_U32);
1249 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1250 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1251 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1252 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001253 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1254 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1255 tlvStruct->length = sizeof(tANI_U32);
1256 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1257 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1258 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1259 + sizeof(tHalCfg) + tlvStruct->length) ;
1260
1261 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1262 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1266 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1267 + sizeof(tHalCfg) + tlvStruct->length) ;
1268
1269 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1270 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1271 tlvStruct->length = sizeof(tANI_U32);
1272 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1273 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length) ;
1276
1277 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1278 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1279 tlvStruct->length = sizeof(tANI_U32);
1280 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1281 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1282 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1283 + sizeof(tHalCfg) + tlvStruct->length) ;
1284
1285 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
1292
1293 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1294 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1298 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1299 + sizeof(tHalCfg) + tlvStruct->length) ;
1300
1301 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1302 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1306 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1307 + sizeof(tHalCfg) + tlvStruct->length) ;
1308
1309 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1310 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1314 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1315 + sizeof(tHalCfg) + tlvStruct->length) ;
1316
1317 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1318 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
1324
1325 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1326 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1327 tlvStruct->length = sizeof(tANI_U32);
1328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1329 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
1332
1333 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1334 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1335 tlvStruct->length = sizeof(tANI_U32);
1336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1337 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
1340
1341 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1342 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
1348
1349 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
1356
1357 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001358 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1359 tlvStruct->length = sizeof(tANI_U32);
1360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1361 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1362 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1363 wcnssCompiledApiVersion.minor,
1364 wcnssCompiledApiVersion.version,
1365 wcnssCompiledApiVersion.revision);
1366 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1367 + sizeof(tHalCfg) + tlvStruct->length) ;
1368
Jeff Johnsond13512a2012-07-17 11:42:19 -07001369 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1370 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1374 configDataValue ) != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1378 goto handle_failure;
1379 }
1380
1381 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1382 + sizeof(tHalCfg) + tlvStruct->length) ;
1383 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1384 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1385 tlvStruct->length = sizeof(tANI_U32);
1386 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1387 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1388 configDataValue ) != eSIR_SUCCESS)
1389 {
1390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1391 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1392 goto handle_failure;
1393 }
1394
1395 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1396 + sizeof(tHalCfg) + tlvStruct->length) ;
1397
1398 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1399 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1400 tlvStruct->length = sizeof(tANI_U32);
1401 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1402 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1403 != eSIR_SUCCESS)
1404 {
1405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1406 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1407 goto handle_failure;
1408 }
1409
1410 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1411 + sizeof(tHalCfg) + tlvStruct->length) ;
1412
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001413 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1414 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1415 tlvStruct->length = sizeof(tANI_U32);
1416 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1417 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1418 != eSIR_SUCCESS)
1419 {
1420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1421 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1422 goto handle_failure;
1423 }
1424
1425 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1426 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001427#ifdef WLAN_SOFTAP_VSTA_FEATURE
1428 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1429 tlvStruct->length = sizeof(tANI_U32);
1430 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1431 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1432 != eSIR_SUCCESS)
1433 {
1434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1435 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1436 goto handle_failure;
1437 }
1438
1439 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1440 + sizeof(tHalCfg) + tlvStruct->length) ;
1441#endif
1442
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001443 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1444 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1445 tlvStruct->length = sizeof(tANI_U32);
1446 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1447
1448 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1449 != eSIR_SUCCESS)
1450 {
1451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1452 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1453 goto handle_failure;
1454 }
1455
1456 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1457 + sizeof(tHalCfg) + tlvStruct->length) ;
1458
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301459/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1460 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1464 configDataValue ) != eSIR_SUCCESS)
1465 {
1466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1467 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1468 goto handle_failure;
1469 }
1470
1471 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1472 + sizeof(tHalCfg) + tlvStruct->length) ;
1473
Jeff Johnson295189b2012-06-20 16:38:30 -07001474 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001475#ifdef WLAN_DEBUG
1476 {
1477 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001478 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1479 "****** Dumping CFG TLV ***** ");
1480 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1481 {
1482 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1483 "%02x %02x %02x %02x %02x %02x %02x %02x",
1484 tlvStructStart[i],
1485 tlvStructStart[i+1],
1486 tlvStructStart[i+2],
1487 tlvStructStart[i+3],
1488 tlvStructStart[i+4],
1489 tlvStructStart[i+5],
1490 tlvStructStart[i+6],
1491 tlvStructStart[i+7]);
1492 }
1493 /* Dump the bytes in the last line*/
1494 for (; i < wdiStartParams->usConfigBufferLen; i++)
1495 {
1496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1497 "%02x ",tlvStructStart[i]);
1498 }
1499 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1500 "**************************** ");
1501 }
1502#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001503 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001504handle_failure:
1505 vos_mem_free(configParam);
1506 return VOS_STATUS_E_FAILURE;
1507}
Jeff Johnson295189b2012-06-20 16:38:30 -07001508/*
1509 * FUNCTION: WDA_wdiCompleteCB
1510 * call the voss call back function
1511 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001512void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001513{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001514 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1515 tWDA_CbContext *wdaContext;
1516
1517 if(NULL == pWdaParams)
1518 {
1519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001520 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001521 VOS_ASSERT(0) ;
1522 return ;
1523 }
1524
1525 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1526
Jeff Johnson295189b2012-06-20 16:38:30 -07001527 if (NULL == wdaContext)
1528 {
1529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001530 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001531 return ;
1532 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001533
Jeff Johnson295189b2012-06-20 16:38:30 -07001534 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001535 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001536 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001538 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001539 vos_mem_free(pWdaParams);
1540
Jeff Johnson295189b2012-06-20 16:38:30 -07001541 if(WDI_STATUS_SUCCESS != status)
1542 {
1543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1544 "WDI stop callback returned failure" );
1545 VOS_ASSERT(0) ;
1546 }
1547 else
1548 {
1549 wdaContext->wdaState = WDA_STOP_STATE;
1550 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001551
Jeff Johnson295189b2012-06-20 16:38:30 -07001552 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001553 vos_WDAComplete_cback(wdaContext->pVosContext);
1554
Jeff Johnson295189b2012-06-20 16:38:30 -07001555 return ;
1556}
Jeff Johnson295189b2012-06-20 16:38:30 -07001557/*
1558 * FUNCTION: WDA_stop
1559 * call WDI_stop
1560 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001561VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1562{
1563 WDI_Status wdiStatus;
1564 VOS_STATUS status = VOS_STATUS_SUCCESS;
1565 WDI_StopReqParamsType *wdiStopReq;
1566 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001567 tWDA_ReqParams *pWdaParams ;
1568
Jeff Johnson295189b2012-06-20 16:38:30 -07001569 if (NULL == pWDA)
1570 {
1571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001572 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001573 VOS_ASSERT(0);
1574 return VOS_STATUS_E_FAILURE;
1575 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001576 if (pWDA->wdiFailed == true)
1577 {
1578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001579 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001580 return VOS_STATUS_E_ALREADY;
1581 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001582
Jeff Johnson295189b2012-06-20 16:38:30 -07001583 /* FTM mode stay START_STATE */
1584 if( (WDA_READY_STATE != pWDA->wdaState) &&
1585 (WDA_INIT_STATE != pWDA->wdaState) &&
1586 (WDA_START_STATE != pWDA->wdaState) )
1587 {
1588 VOS_ASSERT(0);
1589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001590 wdiStopReq = (WDI_StopReqParamsType *)
1591 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1592 if(NULL == wdiStopReq)
1593 {
1594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001596 VOS_ASSERT(0);
1597 return VOS_STATUS_E_NOMEM;
1598 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001599
Jeff Johnson295189b2012-06-20 16:38:30 -07001600 wdiStopReq->wdiStopReason = reason;
1601 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001602
1603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1604 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001605 {
1606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001608 VOS_ASSERT(0);
1609 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001610 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001611 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001612
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001613 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1614 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001615 {
1616 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001617 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001618 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001619
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001620 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1621 pWdaParams->wdaMsgParam = NULL;
1622 pWdaParams->pWdaContext = pWDA;
1623
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 /* call WDI stop */
1625 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001626 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1627
Jeff Johnson295189b2012-06-20 16:38:30 -07001628 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1629 {
1630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1631 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1633 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001634 status = VOS_STATUS_E_FAILURE;
1635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001636 return status;
1637}
Jeff Johnson295189b2012-06-20 16:38:30 -07001638/*
1639 * FUNCTION: WDA_close
1640 * call WDI_close and free the WDA context
1641 */
1642VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1643{
Jeff Johnson43971f52012-07-17 12:26:56 -07001644 VOS_STATUS status = VOS_STATUS_SUCCESS;
1645 WDI_Status wstatus;
1646 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001647 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001648 if (NULL == wdaContext)
1649 {
1650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001651 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001652 return VOS_STATUS_E_FAILURE;
1653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001654 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1655 (WDA_STOP_STATE != wdaContext->wdaState))
1656 {
1657 VOS_ASSERT(0);
1658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001659 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001660 wstatus = WDI_Close();
1661 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001662 {
1663 status = VOS_STATUS_E_FAILURE;
1664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001665 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001666 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001667 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1668 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001669 {
1670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1671 "WDI Sync Event destroy failed - status = %d\n", status);
1672 status = VOS_STATUS_E_FAILURE;
1673 }
1674
Jeff Johnson43971f52012-07-17 12:26:56 -07001675 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001676 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001677 {
1678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1679 "VOS Event destroy failed - status = %d\n", status);
1680 status = VOS_STATUS_E_FAILURE;
1681 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001682 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001683 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001684 {
1685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1686 "VOS Event destroy failed - status = %d\n", status);
1687 status = VOS_STATUS_E_FAILURE;
1688 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001689 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001690 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001691 {
1692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1693 "VOS Event destroy failed - status = %d\n", status);
1694 status = VOS_STATUS_E_FAILURE;
1695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001696 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001697 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001698 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001699 {
1700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1701 "error in WDA close " );
1702 status = VOS_STATUS_E_FAILURE;
1703 }
1704 return status;
1705}
Jeff Johnson295189b2012-06-20 16:38:30 -07001706/*
1707 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1708 * returns 1 if the compiled version is greater than or equal to the input version
1709 */
1710
1711uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1712{
1713 VOS_STATUS status = VOS_STATUS_SUCCESS;
1714 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1715 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001716 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001717 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1718 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1719 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1720 (compiledVersion.revision >= revision)))
1721 return 1;
1722 else
1723 return 0;
1724}
Jeff Johnson295189b2012-06-20 16:38:30 -07001725/*
1726 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1727 * returns 1 if the compiled version is greater than or equal to the input version
1728 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001729uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1730{
1731 VOS_STATUS status = VOS_STATUS_SUCCESS;
1732 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1733 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001734 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001735 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1736 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1737 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1738 (reportedVersion.revision >= revision)))
1739 return 1;
1740 else
1741 return 0;
1742}
Jeff Johnson295189b2012-06-20 16:38:30 -07001743/*
1744 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1745 * Returns the version of the WCNSS WLAN API with which the HOST
1746 * device driver was compiled
1747 */
1748VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1749 tSirVersionType *pVersion)
1750{
1751 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001752 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001753 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001754 if ((NULL == pvosGCtx) || (NULL == pVersion))
1755 {
1756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001757 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001758 VOS_ASSERT(0);
1759 return VOS_STATUS_E_FAILURE;
1760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001761 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1762 if (NULL == pWDA )
1763 {
1764 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001765 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 VOS_ASSERT(0);
1767 return VOS_STATUS_E_FAILURE;
1768 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001769 *pVersion = pWDA->wcnssWlanCompiledVersion;
1770 return VOS_STATUS_SUCCESS;
1771}
Jeff Johnson295189b2012-06-20 16:38:30 -07001772/*
1773 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1774 * Returns the version of the WCNSS WLAN API with which the WCNSS
1775 * device driver was compiled
1776 */
1777VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1778 tSirVersionType *pVersion)
1779{
1780 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001782 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001783 if ((NULL == pvosGCtx) || (NULL == pVersion))
1784 {
1785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001786 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001787 VOS_ASSERT(0);
1788 return VOS_STATUS_E_FAILURE;
1789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001790 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1791 if (NULL == pWDA )
1792 {
1793 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001794 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 VOS_ASSERT(0);
1796 return VOS_STATUS_E_FAILURE;
1797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 *pVersion = pWDA->wcnssWlanReportedVersion;
1799 return VOS_STATUS_SUCCESS;
1800}
Jeff Johnson295189b2012-06-20 16:38:30 -07001801/*
1802 * FUNCTION: WDA_GetWcnssSoftwareVersion
1803 * Returns the WCNSS Software version string
1804 */
1805VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1806 tANI_U8 *pVersion,
1807 tANI_U32 versionBufferSize)
1808{
1809 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001811 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001812 if ((NULL == pvosGCtx) || (NULL == pVersion))
1813 {
1814 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001815 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001816 VOS_ASSERT(0);
1817 return VOS_STATUS_E_FAILURE;
1818 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001819 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1820 if (NULL == pWDA )
1821 {
1822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001823 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 VOS_ASSERT(0);
1825 return VOS_STATUS_E_FAILURE;
1826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001827 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1828 return VOS_STATUS_SUCCESS;
1829}
Jeff Johnson295189b2012-06-20 16:38:30 -07001830/*
1831 * FUNCTION: WDA_GetWcnssHardwareVersion
1832 * Returns the WCNSS Hardware version string
1833 */
1834VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1835 tANI_U8 *pVersion,
1836 tANI_U32 versionBufferSize)
1837{
1838 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001840 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001841 if ((NULL == pvosGCtx) || (NULL == pVersion))
1842 {
1843 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001844 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001845 VOS_ASSERT(0);
1846 return VOS_STATUS_E_FAILURE;
1847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001848 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1849 if (NULL == pWDA )
1850 {
1851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001852 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001853 VOS_ASSERT(0);
1854 return VOS_STATUS_E_FAILURE;
1855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001856 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1857 return VOS_STATUS_SUCCESS;
1858}
Jeff Johnson295189b2012-06-20 16:38:30 -07001859/*
1860 * FUNCTION: WDA_WniCfgDnld
1861 * Trigger CFG Download
1862 */
1863VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1864{
1865 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001866 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001867 v_VOID_t *pFileImage = NULL;
1868 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001869 v_VOID_t *pCfgBinary = NULL;
1870 v_SIZE_t cbCfgBinarySize = 0;
1871
1872 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 if (NULL == pMac )
1874 {
1875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001876 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001877 VOS_ASSERT(0);
1878 return VOS_STATUS_E_FAILURE;
1879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001880 /* get the number of bytes in the CFG Binary... */
1881 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1882 &cbFileImageSize );
1883 if ( VOS_STATUS_E_NOMEM != vosStatus )
1884 {
1885 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1886 "Error obtaining binary size" );
1887 goto fail;
1888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 // malloc a buffer to read in the Configuration binary file.
1890 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001891 if ( NULL == pFileImage )
1892 {
1893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1894 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1895 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001896 vosStatus = VOS_STATUS_E_NOMEM;
1897 goto fail;
1898 }
1899
1900 /* Get the entire CFG file image... */
1901 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1902 &cbFileImageSize );
1903 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1906 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1907 cbFileImageSize );
1908 goto fail;
1909 }
1910
1911 /*
1912 * Validate the binary image. This function will return a pointer
1913 * and length where the CFG binary is located within the binary image file.
1914 */
1915 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1916 &pCfgBinary, &cbCfgBinarySize );
1917 if ( VOS_FALSE == bStatus )
1918 {
1919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1920 "Error: Cannot find STA CFG in binary image file" );
1921 vosStatus = VOS_STATUS_E_FAILURE;
1922 goto fail;
1923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001924 /*
1925 * TODO: call the config download function
1926 * for now calling the existing cfg download API
1927 */
1928 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001929 if( pFileImage != NULL )
1930 {
1931 vos_mem_free( pFileImage );
1932 }
1933 return vosStatus;
1934
1935fail:
1936 if(pCfgBinary != NULL)
1937 vos_mem_free( pFileImage );
1938
1939 return vosStatus;
1940}
Jeff Johnson295189b2012-06-20 16:38:30 -07001941/* -----------------------------------------------------------------
1942 * WDI interface
1943 * -----------------------------------------------------------------
1944 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001945/*
1946 * FUNCTION: WDA_suspendDataTxCallback
1947 * call back function called from TL after suspend Transmission
1948 */
1949VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1950 v_U8_t* ucSTAId,
1951 VOS_STATUS vosStatus)
1952{
1953 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001955 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 if (NULL == pWDA )
1957 {
1958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001959 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001960 VOS_ASSERT(0);
1961 return VOS_STATUS_E_FAILURE;
1962 }
1963 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1964 {
1965 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1966 }
1967 else
1968 {
1969 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001971 /* Trigger the event to bring the WDA TL suspend function to come
1972 * out of wait*/
1973 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1974 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1975 {
1976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1977 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001979 /* If TL suspended had timedout before this callback was called, resume back
1980 * TL.*/
1981 if (pWDA->txSuspendTimedOut)
1982 {
1983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1984 "Late TLSuspendCallback, resuming TL back again\n");
1985 WDA_ResumeDataTx(pWDA);
1986 pWDA->txSuspendTimedOut = FALSE;
1987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001988 return VOS_STATUS_SUCCESS;
1989}
Jeff Johnson295189b2012-06-20 16:38:30 -07001990/*
1991 * FUNCTION: WDA_suspendDataTx
1992 * Update TL to suspend the data Transmission
1993 */
1994VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1995{
1996 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1997 tANI_U8 eventIdx = 0;
1998 tANI_U8 ucSTAId = 0;
1999
2000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002001 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002002 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002003 if (pWDA->txSuspendTimedOut)
2004 {
2005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2006 "TL suspend timedout previously, CB not called yet\n");
2007 return status;
2008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 /* Reset the event to be not signalled */
2010 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2011 if(!VOS_IS_STATUS_SUCCESS(status))
2012 {
2013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2014 "VOS Event reset failed - status = %d\n",status);
2015 return VOS_STATUS_E_FAILURE;
2016 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002017 /*Indicate TL to suspend transmission for all Sta Id */
2018 ucSTAId = WLAN_ALL_STA;
2019 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
2020 WDA_SuspendDataTxCallback);
2021 if(status != VOS_STATUS_SUCCESS)
2022 {
2023 return status;
2024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002025 /* Wait for the event to be set by the TL, to get the response of
2026 * suspending the TX queues, this event should be set by the Callback
2027 * function called by TL*/
2028 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2029 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2030 if(!VOS_IS_STATUS_SUCCESS(status))
2031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2033 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002034 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002035 /* Set this flag to true when TL suspend times out, so that when TL
2036 * suspend eventually happens and calls the callback, TL can be resumed
2037 * right away by looking at this flag when true.*/
2038 pWDA->txSuspendTimedOut = TRUE;
2039 }
2040 else
2041 {
2042 pWDA->txSuspendTimedOut = FALSE;
2043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2045 {
2046 status = VOS_STATUS_SUCCESS;
2047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002048 return status;
2049}
Jeff Johnson295189b2012-06-20 16:38:30 -07002050/*
2051 * FUNCTION: WDA_resumeDataTx
2052 * Update TL to resume the data Transmission
2053 */
2054VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2055{
2056 VOS_STATUS status = VOS_STATUS_SUCCESS;
2057 tANI_U8 ucSTAId = 0;
2058
2059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002060 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002061 ucSTAId = WLAN_ALL_STA;
2062 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
2063 return status;
2064}
Jeff Johnson295189b2012-06-20 16:38:30 -07002065/*
2066 * FUNCTION: WDA_InitScanReqCallback
2067 * Trigger Init SCAN callback
2068 */
2069void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2070{
2071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2072 tWDA_CbContext *pWDA;
2073 tInitScanParams *pWDA_ScanParam ;
2074 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002076 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 if(NULL == pWdaParams)
2078 {
2079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002080 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 VOS_ASSERT(0) ;
2082 return ;
2083 }
2084 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2085 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002086 if(NULL == pWDA_ScanParam)
2087 {
2088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002089 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002090 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2092 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002093 return ;
2094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002095 if(WDI_STATUS_SUCCESS != wdiStatus)
2096 {
2097 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002098 if(VOS_STATUS_SUCCESS != status)
2099 {
2100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002101 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002102 }
2103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002104 /* free WDI command buffer */
2105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002107
Jeff Johnson295189b2012-06-20 16:38:30 -07002108
2109 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002110 /* without converting the Status to Failure or Success Just
2111 pass the same status to lim */
2112 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002113 /* send SCAN RSP message back to PE */
2114 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 return ;
2116}
2117
2118/*
2119 * FUNCTION: WDA_ProcessInitScanReq
2120 * Trigger Init SCAN in DAL
2121 */
2122VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2123 tInitScanParams *initScanParams)
2124{
2125 WDI_Status status = WDI_STATUS_SUCCESS ;
2126 WDI_InitScanReqParamsType *wdiInitScanParam =
2127 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2128 sizeof(WDI_InitScanReqParamsType)) ;
2129 tWDA_ReqParams *pWdaParams;
2130 tANI_U8 i = 0;
2131
2132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002133 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002134 if(NULL == wdiInitScanParam)
2135 {
2136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002137 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002138 VOS_ASSERT(0);
2139 return VOS_STATUS_E_NOMEM;
2140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002141 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2142 if(NULL == pWdaParams)
2143 {
2144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002146 VOS_ASSERT(0);
2147 vos_mem_free(wdiInitScanParam);
2148 return VOS_STATUS_E_NOMEM;
2149 }
2150
2151 /* Copy init Scan params to WDI structure */
2152 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2153 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2154 sizeof(tSirMacAddr)) ;
2155 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2156 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2157 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2159 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002160 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2161 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2163 {
2164 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2165 initScanParams->scanEntry.bssIdx[i] ;
2166 }
2167
2168 /* if Frame length, copy macMgmtHdr or WDI structure */
2169 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2170 {
2171 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2172 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2173 }
2174 wdiInitScanParam->wdiReqStatusCB = NULL ;
2175
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 /* Store Init Req pointer, as this will be used for response */
2177 pWdaParams->pWdaContext = pWDA;
2178 pWdaParams->wdaMsgParam = initScanParams;
2179 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 /* first try to suspend TX */
2181 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 if(WDI_STATUS_SUCCESS != status)
2183 {
2184 goto handleWdiFailure;
2185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002186 /* call DAL API to pass init scan request to DAL */
2187 status = WDI_InitScanReq(wdiInitScanParam,
2188 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 if(IS_WDI_STATUS_FAILURE(status))
2190 {
2191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2192 "error in WDA Init Scan, Resume Tx " );
2193 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 VOS_ASSERT(0) ;
2195
2196 goto handleWdiFailure;
2197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002198 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002199handleWdiFailure:
2200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2201 "Failure in WDI Api, free all the memory " );
2202 /* free WDI command buffer */
2203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2204 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002205 /* send Failure to PE */
2206 initScanParams->status = eSIR_FAILURE ;
2207 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002208 return CONVERT_WDI2VOS_STATUS(status) ;
2209}
2210
Jeff Johnson295189b2012-06-20 16:38:30 -07002211/*
2212 * FUNCTION: WDA_StartScanReqCallback
2213 * send Start SCAN RSP back to PE
2214 */
2215void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2216 void* pUserData)
2217{
2218 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2219 tWDA_CbContext *pWDA;
2220 tStartScanParams *pWDA_ScanParam;
2221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002222 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002223 if(NULL == pWdaParams)
2224 {
2225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002226 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 VOS_ASSERT(0) ;
2228 return ;
2229 }
2230 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2231 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 if(NULL == pWDA_ScanParam)
2233 {
2234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002235 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002237 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 return ;
2239 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002240 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2241 {
2242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002243 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002244 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002245 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 return ;
2247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2249 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002250
Jeff Johnson295189b2012-06-20 16:38:30 -07002251
2252 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002253 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002254 /* send SCAN RSP message back to PE */
2255 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002256 return ;
2257}
2258
Jeff Johnson295189b2012-06-20 16:38:30 -07002259/*
2260 * FUNCTION: WDA_ProcessStartScanReq
2261 * Trigger start SCAN in WDI
2262 */
2263VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2264 tStartScanParams *startScanParams)
2265{
2266 WDI_Status status = WDI_STATUS_SUCCESS;
2267 WDI_StartScanReqParamsType *wdiStartScanParams =
2268 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2269 sizeof(WDI_StartScanReqParamsType)) ;
2270 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002272 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002273 if(NULL == wdiStartScanParams)
2274 {
2275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002276 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 VOS_ASSERT(0);
2278 return VOS_STATUS_E_NOMEM;
2279 }
2280 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2281 if(NULL == pWdaParams)
2282 {
2283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002284 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 VOS_ASSERT(0);
2286 vos_mem_free(wdiStartScanParams);
2287 return VOS_STATUS_E_NOMEM;
2288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 /* Copy init Scan params to WDI structure */
2290 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2291 wdiStartScanParams->wdiReqStatusCB = NULL ;
2292
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 /* Store Init Req pointer, as this will be used for response */
2294 /* store Params pass it to WDI */
2295 pWdaParams->pWdaContext = pWDA;
2296 pWdaParams->wdaMsgParam = startScanParams;
2297 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002298 /* call DAL API to pass init scan request to DAL */
2299 status = WDI_StartScanReq(wdiStartScanParams,
2300 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 /* failure returned by WDI API */
2302 if(IS_WDI_STATUS_FAILURE(status))
2303 {
2304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2305 "Failure in Start Scan WDI API, free all the memory "
2306 "It should be due to previous abort scan." );
2307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2308 vos_mem_free(pWdaParams) ;
2309 startScanParams->status = eSIR_FAILURE ;
2310 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002312 return CONVERT_WDI2VOS_STATUS(status) ;
2313}
Jeff Johnson295189b2012-06-20 16:38:30 -07002314/*
2315 * FUNCTION: WDA_EndScanReqCallback
2316 * END SCAN callback
2317 */
2318void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2319{
2320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2321 tWDA_CbContext *pWDA;
2322 tEndScanParams *endScanParam;
2323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002324 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 if(NULL == pWdaParams)
2326 {
2327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002328 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 VOS_ASSERT(0) ;
2330 return ;
2331 }
2332 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2333 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 if(NULL == endScanParam)
2335 {
2336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002337 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002338 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2340 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 return ;
2342 }
2343
2344 /* Free WDI command buffer */
2345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2346 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002347 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002348 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002349 /* send response back to PE */
2350 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2351 return ;
2352}
2353
Jeff Johnson295189b2012-06-20 16:38:30 -07002354/*
2355 * FUNCTION: WDA_ProcessEndScanReq
2356 * Trigger END SCAN in WDI
2357 */
2358VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2359 tEndScanParams *endScanParams)
2360{
2361 WDI_Status status = WDI_STATUS_SUCCESS;
2362 WDI_EndScanReqParamsType *wdiEndScanParams =
2363 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2364 sizeof(WDI_EndScanReqParamsType)) ;
2365 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002367 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 if(NULL == wdiEndScanParams)
2369 {
2370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002371 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 VOS_ASSERT(0);
2373 return VOS_STATUS_E_NOMEM;
2374 }
2375 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2376 if(NULL == pWdaParams)
2377 {
2378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002379 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 VOS_ASSERT(0);
2381 vos_mem_free(wdiEndScanParams);
2382 return VOS_STATUS_E_NOMEM;
2383 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002384 /* Copy init Scan params to WDI structure */
2385 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2386 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002387 /* Store Init Req pointer, as this will be used for response */
2388 /* store Params pass it to WDI */
2389 pWdaParams->pWdaContext = pWDA;
2390 pWdaParams->wdaMsgParam = endScanParams;
2391 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 /* call DAL API to pass init scan request to DAL */
2393 status = WDI_EndScanReq(wdiEndScanParams,
2394 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 if(IS_WDI_STATUS_FAILURE(status))
2396 {
2397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2398 "Failure in End Scan WDI API, free all the memory "
2399 "It should be due to previous abort scan." );
2400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2401 vos_mem_free(pWdaParams) ;
2402 endScanParams->status = eSIR_FAILURE ;
2403 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2404 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002405 return CONVERT_WDI2VOS_STATUS(status) ;
2406}
Jeff Johnson295189b2012-06-20 16:38:30 -07002407/*
2408 * FUNCTION: WDA_FinishScanReqCallback
2409 * Trigger Finish SCAN callback
2410 */
2411void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2412{
2413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2414 tWDA_CbContext *pWDA;
2415 tFinishScanParams *finishScanParam;
2416 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002418 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002419 if(NULL == pWdaParams)
2420 {
2421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002422 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 VOS_ASSERT(0) ;
2424 return ;
2425 }
2426
2427 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2428 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 if(NULL == finishScanParam)
2430 {
2431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002432 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002433 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2435 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 return ;
2437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2439 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 /*
2441 * Now Resume TX, if we reached here means, TX is already suspended, we
2442 * have to resume it unconditionaly
2443 */
2444 status = WDA_ResumeDataTx(pWDA) ;
2445
2446 if(VOS_STATUS_SUCCESS != status)
2447 {
2448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002449 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002451 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2453 return ;
2454}
Jeff Johnson295189b2012-06-20 16:38:30 -07002455/*
2456 * FUNCTION: WDA_ProcessFinshScanReq
2457 * Trigger Finish SCAN in WDI
2458 */
2459VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2460 tFinishScanParams *finishScanParams)
2461{
2462 WDI_Status status = WDI_STATUS_SUCCESS;
2463 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2464 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2465 sizeof(WDI_FinishScanReqParamsType)) ;
2466 tWDA_ReqParams *pWdaParams ;
2467 tANI_U8 i = 0;
2468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002469 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 if(NULL == wdiFinishScanParams)
2471 {
2472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002473 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 VOS_ASSERT(0);
2475 return VOS_STATUS_E_NOMEM;
2476 }
2477 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2478 if(NULL == pWdaParams)
2479 {
2480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 VOS_ASSERT(0);
2483 vos_mem_free(wdiFinishScanParams);
2484 return VOS_STATUS_E_NOMEM;
2485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 /* Copy init Scan params to WDI structure */
2487 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2488 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2489 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2491 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2492 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2493 finishScanParams->frameLength ;
2494 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2495 finishScanParams->currentOperChannel ;
2496 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2497 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2498 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2500 {
2501 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2502 finishScanParams->scanEntry.bssIdx[i] ;
2503 }
2504
2505
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 /* if Frame length, copy macMgmtHdr ro WDI structure */
2507 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2508 {
2509 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2510 &finishScanParams->macMgmtHdr,
2511 sizeof(WDI_MacMgmtHdr)) ;
2512 }
2513 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002514 /* Store Init Req pointer, as this will be used for response */
2515 /* store Params pass it to WDI */
2516 pWdaParams->pWdaContext = pWDA;
2517 pWdaParams->wdaMsgParam = finishScanParams;
2518 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 /* call DAL API to pass init scan request to DAL */
2520 status = WDI_FinishScanReq(wdiFinishScanParams,
2521 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002522
Jeff Johnson295189b2012-06-20 16:38:30 -07002523
2524 /*
2525 * WDI API returns failure..
2526 */
2527 if(IS_WDI_STATUS_FAILURE( status))
2528 {
2529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2530 "Failure in Finish Scan WDI API, free all the memory " );
2531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2532 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 finishScanParams->status = eSIR_FAILURE ;
2534 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2535 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002536 return CONVERT_WDI2VOS_STATUS(status) ;
2537}
Jeff Johnson295189b2012-06-20 16:38:30 -07002538/*---------------------------------------------------------------------
2539 * ASSOC API's
2540 *---------------------------------------------------------------------
2541 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002542/*
2543 * FUNCTION: WDA_JoinReqCallback
2544 * Trigger Init SCAN callback
2545 */
2546void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2547{
2548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2549 tWDA_CbContext *pWDA;
2550 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 if(NULL == pWdaParams)
2554 {
2555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 VOS_ASSERT(0) ;
2558 return ;
2559 }
2560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2561 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2563 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 /* reset macBSSID */
2565 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 /* reset macSTASelf */
2567 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002568 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 return ;
2571}
Jeff Johnson295189b2012-06-20 16:38:30 -07002572/*
2573 * FUNCTION: WDA_ProcessJoinReq
2574 * Trigger Join REQ in WDI
2575 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002576VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2577 tSwitchChannelParams* joinReqParam)
2578{
2579 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 WDI_JoinReqParamsType *wdiJoinReqParam =
2581 (WDI_JoinReqParamsType *)vos_mem_malloc(
2582 sizeof(WDI_JoinReqParamsType)) ;
2583 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002585 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 if(NULL == wdiJoinReqParam)
2587 {
2588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002591 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 return VOS_STATUS_E_NOMEM;
2593 }
2594 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2595 if(NULL == pWdaParams)
2596 {
2597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 VOS_ASSERT(0);
2600 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002601 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002602 return VOS_STATUS_E_NOMEM;
2603 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002604
2605 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2606 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2607 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2608 {
2609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2610 "%s: received join request when BSSID or self-STA is NULL "
2611 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002613 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2614 VOS_ASSERT(0);
2615 vos_mem_free(wdiJoinReqParam);
2616 vos_mem_free(pWdaParams);
2617 joinReqParam->status = eSIR_FAILURE ;
2618 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2619 return VOS_STATUS_E_INVAL;
2620 }
2621
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 /* copy the BSSID for pWDA */
2623 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2624 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2626 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2628 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002629#ifdef WLAN_FEATURE_VOWIFI
2630 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2631 joinReqParam->maxTxPower ;
2632#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2634 joinReqParam->localPowerConstraint ;
2635#endif
2636 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2637 joinReqParam->secondaryChannelOffset ;
2638 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2639
2640 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 /* Store Init Req pointer, as this will be used for response */
2642 /* store Params pass it to WDI */
2643 pWdaParams->pWdaContext = pWDA;
2644 pWdaParams->wdaMsgParam = joinReqParam;
2645 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 status = WDI_JoinReq(wdiJoinReqParam,
2647 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 if(IS_WDI_STATUS_FAILURE(status))
2649 {
2650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2651 "Failure in Join WDI API, free all the memory " );
2652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2653 vos_mem_free(pWdaParams) ;
2654 joinReqParam->status = eSIR_FAILURE ;
2655 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2656 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 return CONVERT_WDI2VOS_STATUS(status) ;
2658}
Jeff Johnson295189b2012-06-20 16:38:30 -07002659/*
2660 * FUNCTION: WDA_SwitchChannelReqCallback
2661 * send Switch channel RSP back to PE
2662 */
2663void WDA_SwitchChannelReqCallback(
2664 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2665{
2666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2667 tWDA_CbContext *pWDA;
2668 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002670 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 if(NULL == pWdaParams)
2672 {
2673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002674 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 VOS_ASSERT(0) ;
2676 return ;
2677 }
2678 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2679 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2680
2681#ifdef WLAN_FEATURE_VOWIFI
2682 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2683#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2685 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002686 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002687 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 return ;
2690}
Jeff Johnson295189b2012-06-20 16:38:30 -07002691/*
2692 * FUNCTION: WDA_ProcessChannelSwitchReq
2693 * Request to WDI to switch channel REQ params.
2694 */
2695VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2696 tSwitchChannelParams *pSwitchChanParams)
2697{
2698 WDI_Status status = WDI_STATUS_SUCCESS ;
2699 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2700 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2701 sizeof(WDI_SwitchChReqParamsType)) ;
2702 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002704 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 if(NULL == wdiSwitchChanParam)
2706 {
2707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002708 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 VOS_ASSERT(0);
2710 return VOS_STATUS_E_NOMEM;
2711 }
2712 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2713 if(NULL == pWdaParams)
2714 {
2715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002716 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 VOS_ASSERT(0);
2718 vos_mem_free(wdiSwitchChanParam);
2719 return VOS_STATUS_E_NOMEM;
2720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2722#ifndef WLAN_FEATURE_VOWIFI
2723 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2724 pSwitchChanParams->localPowerConstraint;
2725#endif
2726 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2727 pSwitchChanParams->secondaryChannelOffset;
2728 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002729 /* Store req pointer, as this will be used for response */
2730 /* store Params pass it to WDI */
2731 pWdaParams->pWdaContext = pWDA;
2732 pWdaParams->wdaMsgParam = pSwitchChanParams;
2733 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002734#ifdef WLAN_FEATURE_VOWIFI
2735 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2736 = pSwitchChanParams->maxTxPower;
2737 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2738 pSwitchChanParams ->selfStaMacAddr,
2739 sizeof(tSirMacAddr));
2740#endif
2741 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2742 pSwitchChanParams->bssId,
2743 sizeof(tSirMacAddr));
2744
2745 status = WDI_SwitchChReq(wdiSwitchChanParam,
2746 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 if(IS_WDI_STATUS_FAILURE(status))
2748 {
2749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2750 "Failure in process channel switch Req WDI API, free all the memory " );
2751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2752 vos_mem_free(pWdaParams) ;
2753 pSwitchChanParams->status = eSIR_FAILURE ;
2754 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 return CONVERT_WDI2VOS_STATUS(status) ;
2757}
Jeff Johnson295189b2012-06-20 16:38:30 -07002758/*
2759 * FUNCTION: WDA_ConfigBssReqCallback
2760 * config BSS Req Callback, called by WDI
2761 */
2762void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2763 ,void* pUserData)
2764{
2765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2766 tWDA_CbContext *pWDA;
2767 tAddBssParams *configBssReqParam;
2768 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002770 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002771 if(NULL == pWdaParams)
2772 {
2773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002774 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 VOS_ASSERT(0) ;
2776 return ;
2777 }
2778 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2779 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2780 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002782 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2784 {
2785 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2786 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002787 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2788 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2789 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2790
2791 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2792 {
2793 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2794 {
2795 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2796 staConfigBssParam->staType = STA_ENTRY_BSSID;
2797 }
2798 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2799 (staConfigBssParam->staType == STA_ENTRY_SELF))
2800 {
2801 /* This is the 1st add BSS Req for the BTAMP STA */
2802 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2803 staConfigBssParam->staType = STA_ENTRY_BSSID;
2804 }
2805 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2806 (staConfigBssParam->staType == STA_ENTRY_PEER))
2807 {
2808 /* This is the 2nd ADD BSS Request that is sent
2809 * on the BTAMP STA side. The Sta type is
2810 * set to STA_ENTRY_PEER here.*/
2811 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2812 }
2813 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2814 (staConfigBssParam->staType == STA_ENTRY_SELF))
2815 {
2816 /* statype is already set by PE.
2817 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2818 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2819 staConfigBssParam->staType = STA_ENTRY_BSSID;
2820 }
2821 else
2822 {
2823 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2824 staConfigBssParam->staType = STA_ENTRY_PEER;
2825 }
2826 }
2827 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2828 {
2829 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2830 staConfigBssParam->staType = STA_ENTRY_SELF;
2831 }
2832 else
2833 {
2834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2835 "Invalid operation mode specified");
2836 VOS_ASSERT(0);
2837 }
2838
2839 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002842 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2844 sizeof(tSirMacAddr));
2845 staConfigBssParam->txChannelWidthSet =
2846 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2848 staConfigBssParam->htCapable)
2849 {
2850 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2851 wdiConfigBssRsp->ucBSSIdx;
2852 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2853 WDA_VALID_STA_INDEX ;
2854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2856 wdiConfigBssRsp->ucBSSIdx,
2857 wdiConfigBssRsp->ucSTAIdx))
2858 {
2859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002860 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 VOS_ASSERT(0) ;
2862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2864 {
2865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002866 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002867 VOS_ASSERT(0) ;
2868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002869#ifdef WLAN_FEATURE_VOWIFI
2870 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2871#endif
2872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2874 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002875 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 return ;
2877}
Jeff Johnson295189b2012-06-20 16:38:30 -07002878/*
2879 * FUNCTION: WDA_UpdateEdcaParamsForAC
2880 * Update WDI EDCA params with PE edca params
2881 */
2882void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2883 WDI_EdcaParamRecord *wdiEdcaParam,
2884 tSirMacEdcaParamRecord *macEdcaParam)
2885{
2886 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2887 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2888 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2889 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2890 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2891 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2892}
Jeff Johnson295189b2012-06-20 16:38:30 -07002893/*
2894 * FUNCTION: WDA_ProcessConfigBssReq
2895 * Configure BSS before starting Assoc with AP
2896 */
2897VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2898 tAddBssParams* configBssReqParam)
2899{
2900 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2902 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2903 sizeof(WDI_ConfigBSSReqParamsType)) ;
2904 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002906 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 if(NULL == wdiConfigBssReqParam)
2908 {
2909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 VOS_ASSERT(0);
2912 return VOS_STATUS_E_NOMEM;
2913 }
2914 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2915 if(NULL == pWdaParams)
2916 {
2917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002918 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 VOS_ASSERT(0);
2920 vos_mem_free(wdiConfigBssReqParam);
2921 return VOS_STATUS_E_NOMEM;
2922 }
Kiran4a17ebe2013-01-31 10:43:43 -08002923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2924 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2927 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 /* Store Init Req pointer, as this will be used for response */
2929 /* store Params pass it to WDI */
2930 pWdaParams->pWdaContext = pWDA;
2931 pWdaParams->wdaMsgParam = configBssReqParam;
2932 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2934 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 if(IS_WDI_STATUS_FAILURE(status))
2936 {
2937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2938 "Failure in Config BSS WDI API, free all the memory " );
2939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2940 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002941 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2943 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 return CONVERT_WDI2VOS_STATUS(status) ;
2945}
Jeff Johnson295189b2012-06-20 16:38:30 -07002946#ifdef ENABLE_HAL_COMBINED_MESSAGES
2947/*
2948 * FUNCTION: WDA_PostAssocReqCallback
2949 * Post ASSOC req callback, send RSP back to PE
2950 */
2951void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2952 void* pUserData)
2953{
2954 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2955 tPostAssocParams *postAssocReqParam =
2956 (tPostAssocParams *)pWDA->wdaMsgParam ;
2957 /*STA context within the BSS Params*/
2958 tAddStaParams *staPostAssocParam =
2959 &postAssocReqParam->addBssParams.staContext ;
2960 /*STA Params for self STA*/
2961 tAddStaParams *selfStaPostAssocParam =
2962 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002964 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002966 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2968 {
2969 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2970 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2971 sizeof(tSirMacAddr)) ;
2972 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2973 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2974 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2976 }
2977 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2978 pWDA->wdaWdiApiMsgParam = NULL;
2979 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 return ;
2982}
Jeff Johnson295189b2012-06-20 16:38:30 -07002983/*
2984 * FUNCTION: WDA_ProcessPostAssocReq
2985 * Trigger POST ASSOC processing in WDI
2986 */
2987VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2988 tPostAssocParams *postAssocReqParam)
2989{
Jeff Johnson295189b2012-06-20 16:38:30 -07002990 WDI_Status status = WDI_STATUS_SUCCESS ;
2991
2992 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2993 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2994 sizeof(WDI_PostAssocReqParamsType)) ;
2995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002996 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002997
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 if(NULL == wdiPostAssocReqParam)
2999 {
3000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003001 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003002 VOS_ASSERT(0);
3003 return VOS_STATUS_E_NOMEM;
3004 }
3005
3006 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3007 {
3008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003009 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 VOS_ASSERT(0);
3011 return VOS_STATUS_E_FAILURE;
3012 }
3013
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 /* update BSS params into WDI structure */
3015 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3016 &postAssocReqParam->addBssParams) ;
3017 /* update STA params into WDI structure */
3018 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3019 &postAssocReqParam->addStaParams) ;
3020
3021 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3022 postAssocReqParam->addBssParams.highPerformance;
3023 WDA_UpdateEdcaParamsForAC(pWDA,
3024 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3025 &postAssocReqParam->addBssParams.acbe);
3026 WDA_UpdateEdcaParamsForAC(pWDA,
3027 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3028 &postAssocReqParam->addBssParams.acbk);
3029 WDA_UpdateEdcaParamsForAC(pWDA,
3030 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3031 &postAssocReqParam->addBssParams.acvi);
3032 WDA_UpdateEdcaParamsForAC(pWDA,
3033 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3034 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 /* Store Init Req pointer, as this will be used for response */
3036 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 /* store Params pass it to WDI */
3038 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3040 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 if(IS_WDI_STATUS_FAILURE(status))
3042 {
3043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3044 "Failure in Post Assoc WDI API, free all the memory " );
3045 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3046 pWDA->wdaWdiApiMsgParam = NULL;
3047 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 return CONVERT_WDI2VOS_STATUS(status) ;
3052}
3053#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003054/*
3055 * FUNCTION: WDA_AddStaReqCallback
3056 * ADD STA req callback, send RSP back to PE
3057 */
3058void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3059 void* pUserData)
3060{
3061 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3062 tWDA_CbContext *pWDA;
3063 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 if(NULL == pWdaParams)
3067 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 VOS_ASSERT(0) ;
3070 return ;
3071 }
3072 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3073 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003075 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3077 {
3078 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3079 /*TODO: UMAC structure doesn't have these fields*/
3080 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3081 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3082 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3083 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3084 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3085 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003086#ifdef FEATURE_WLAN_TDLS
3087 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3088 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3089#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003091#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 {
3093 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3094 wdiConfigStaRsp->ucBssIdx;
3095 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3096 WDA_VALID_STA_INDEX ;
3097 }
3098 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3099 {
3100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003101 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 VOS_ASSERT(0) ;
3103 return ;
3104 }
3105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3107 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003108 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 return ;
3110}
Jeff Johnson295189b2012-06-20 16:38:30 -07003111/*
3112 * FUNCTION: WDA_ConfigStaReq
3113 * Trigger Config STA processing in WDI
3114 */
3115VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3116 tAddStaParams *addStaReqParam)
3117{
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3120 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3121 sizeof(WDI_ConfigSTAReqParamsType)) ;
3122 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003124 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 if(NULL == wdiConfigStaReqParam)
3126 {
3127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003128 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 VOS_ASSERT(0);
3130 return VOS_STATUS_E_NOMEM;
3131 }
3132 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3133 if(NULL == pWdaParams)
3134 {
3135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 VOS_ASSERT(0);
3138 vos_mem_free(wdiConfigStaReqParam);
3139 return VOS_STATUS_E_NOMEM;
3140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 /* update STA params into WDI structure */
3143 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3144 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 /* Store Init Req pointer, as this will be used for response */
3146 /* store Params pass it to WDI */
3147 pWdaParams->pWdaContext = pWDA;
3148 pWdaParams->wdaMsgParam = addStaReqParam;
3149 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3151 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003152 if(IS_WDI_STATUS_FAILURE(status))
3153 {
3154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3155 "Failure in Config STA WDI API, free all the memory " );
3156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3157 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003159 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 return CONVERT_WDI2VOS_STATUS(status) ;
3162}
Jeff Johnson295189b2012-06-20 16:38:30 -07003163/*
3164 * FUNCTION: WDA_DelBSSReqCallback
3165 * Dens DEL BSS RSP back to PE
3166 */
3167void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3168 void* pUserData)
3169{
3170 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3171 tWDA_CbContext *pWDA;
3172 tDeleteBssParams *delBssReqParam;
3173 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003175 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003176 if(NULL == pWdaParams)
3177 {
3178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003179 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 VOS_ASSERT(0) ;
3181 return ;
3182 }
3183 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3184 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003185 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3187 {
3188 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3189 sizeof(tSirMacAddr)) ;
3190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3192 {
3193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003194 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 VOS_ASSERT(0) ;
3196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3198 {
3199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003200 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 VOS_ASSERT(0) ;
3202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_ASSERT(0) ;
3208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3210 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003211 /* reset the the system role*/
3212 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3213
3214 /* Reset the BA related information */
3215 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3216 {
3217 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3218 {
3219 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3220 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3221 /* Reset framesTxed counters here */
3222 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3223 {
3224 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3225 }
3226 }
3227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 return ;
3230}
3231
Jeff Johnson295189b2012-06-20 16:38:30 -07003232/*
3233 * FUNCTION: WDA_ProcessDelBssReq
3234 * Init DEL BSS req with WDI
3235 */
3236VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3237 tDeleteBssParams *delBssParam)
3238{
3239 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3241 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3242 sizeof(WDI_DelBSSReqParamsType)) ;
3243 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003245 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 if(NULL == wdiDelBssReqParam)
3247 {
3248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003249 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 VOS_ASSERT(0);
3251 return VOS_STATUS_E_NOMEM;
3252 }
3253 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3254 if(NULL == pWdaParams)
3255 {
3256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 VOS_ASSERT(0);
3259 vos_mem_free(wdiDelBssReqParam);
3260 return VOS_STATUS_E_NOMEM;
3261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003262 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3263 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3264
3265 /* Store Init Req pointer, as this will be used for response */
3266 /* store Params pass it to WDI */
3267 pWdaParams->pWdaContext = pWDA;
3268 pWdaParams->wdaMsgParam = delBssParam;
3269 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 status = WDI_DelBSSReq(wdiDelBssReqParam,
3271 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 if(IS_WDI_STATUS_FAILURE(status))
3273 {
3274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3275 "Failure in Del BSS WDI API, free all the memory " );
3276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3277 vos_mem_free(pWdaParams) ;
3278 delBssParam->status = eSIR_FAILURE ;
3279 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 return CONVERT_WDI2VOS_STATUS(status) ;
3282}
Jeff Johnson295189b2012-06-20 16:38:30 -07003283/*
3284 * FUNCTION: WDA_DelSTAReqCallback
3285 * Dens DEL STA RSP back to PE
3286 */
3287void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3288 void* pUserData)
3289{
3290 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3291 tWDA_CbContext *pWDA;
3292 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003294 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 if(NULL == pWdaParams)
3296 {
3297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003298 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 VOS_ASSERT(0) ;
3300 return ;
3301 }
3302 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3303 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003304 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3306 {
3307 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3308 {
3309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003310 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003311 VOS_ASSERT(0) ;
3312 }
3313 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3314 }
3315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3316 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003317 /*Reset the BA information corresponding to this STAIdx */
3318 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3319 WDA_INVALID_STA_INDEX;
3320 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3321
3322 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 return ;
3324}
Jeff Johnson295189b2012-06-20 16:38:30 -07003325/*
3326 * FUNCTION: WDA_ProcessDelStaReq
3327 * Init DEL STA req with WDI
3328 */
3329VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3330 tDeleteStaParams *delStaParam)
3331{
3332 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003333 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3334 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3335 sizeof(WDI_DelSTAReqParamsType)) ;
3336 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003338 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 if(NULL == wdiDelStaReqParam)
3340 {
3341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 VOS_ASSERT(0);
3344 return VOS_STATUS_E_NOMEM;
3345 }
3346 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3347 if(NULL == pWdaParams)
3348 {
3349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 VOS_ASSERT(0);
3352 vos_mem_free(wdiDelStaReqParam);
3353 return VOS_STATUS_E_NOMEM;
3354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3356 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 /* Store Init Req pointer, as this will be used for response */
3358 /* store Params pass it to WDI */
3359 pWdaParams->pWdaContext = pWDA;
3360 pWdaParams->wdaMsgParam = delStaParam;
3361 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 status = WDI_DelSTAReq(wdiDelStaReqParam,
3363 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 if(IS_WDI_STATUS_FAILURE(status))
3365 {
3366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3367 "Failure in Del STA WDI API, free all the memory status = %d",
3368 status );
3369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3370 vos_mem_free(pWdaParams) ;
3371 delStaParam->status = eSIR_FAILURE ;
3372 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003374 return CONVERT_WDI2VOS_STATUS(status) ;
3375}
Jeff Johnson295189b2012-06-20 16:38:30 -07003376void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3377{
3378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3379 tWDA_CbContext *pWDA;
3380 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003382 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 if(NULL == pWdaParams)
3384 {
3385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003386 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 VOS_ASSERT(0) ;
3388 return ;
3389 }
3390 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3391 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3393 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3395 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3396 pwdiAddSTASelfRsp->macSelfSta,
3397 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 return ;
3400}
Jeff Johnson295189b2012-06-20 16:38:30 -07003401/*
3402 * FUNCTION: WDA_ProcessAddStaSelfReq
3403 *
3404 */
3405VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3406{
3407 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003408 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003409 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3410 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3411 sizeof(WDI_AddSTASelfReqParamsType)) ;
3412 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003414 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 if( NULL == wdiAddStaSelfReq )
3416 {
3417 VOS_ASSERT( 0 );
3418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003419 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 return( VOS_STATUS_E_NOMEM );
3421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003423 if( NULL == pWdaParams )
3424 {
3425 VOS_ASSERT( 0 );
3426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003427 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003428 vos_mem_free(wdiAddStaSelfReq) ;
3429 return( VOS_STATUS_E_NOMEM );
3430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003432 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3433 /* Store Init Req pointer, as this will be used for response */
3434 /* store Params pass it to WDI */
3435 pWdaParams->pWdaContext = pWDA;
3436 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3437 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003438 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003439
Jeff Johnson43971f52012-07-17 12:26:56 -07003440 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003441 {
3442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3443 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003444 wstatus );
3445 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3447 vos_mem_free(pWdaParams) ;
3448 pAddStaSelfReq->status = eSIR_FAILURE ;
3449 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3450 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003451 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003452}
Jeff Johnson295189b2012-06-20 16:38:30 -07003453/*
3454 * FUNCTION: WDA_DelSTASelfRespCallback
3455 *
3456 */
3457void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3458 wdiDelStaSelfRspParams , void* pUserData)
3459{
3460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3461 tWDA_CbContext *pWDA;
3462 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003464 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 if (NULL == pWdaParams)
3466 {
3467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003468 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 VOS_ASSERT(0);
3470 return;
3471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3473 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003474 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003475 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003476
3477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3478 vos_mem_free(pWdaParams) ;
3479
3480 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 return ;
3482}
Jeff Johnson295189b2012-06-20 16:38:30 -07003483/*
3484 * FUNCTION: WDA_DelSTASelfReqCallback
3485 *
3486 */
3487void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3488 void* pUserData)
3489{
3490 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3491 tWDA_CbContext *pWDA;
3492 tDelStaSelfParams *delStaSelfParams;
3493
3494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3495 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003496 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003497
3498 if (NULL == pWdaParams)
3499 {
3500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003501 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003502 VOS_ASSERT(0);
3503 return;
3504 }
3505
3506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3507 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3508
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003509 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003510
3511 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3512 {
3513 VOS_ASSERT(0);
3514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3515 vos_mem_free(pWdaParams) ;
3516 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3517 }
3518
3519 return ;
3520}
3521
3522/*
3523 * FUNCTION: WDA_DelSTASelfReq
3524 * Trigger Config STA processing in WDI
3525 */
3526VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3527 tDelStaSelfParams* pDelStaSelfReqParam)
3528{
3529 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003530 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 tWDA_ReqParams *pWdaParams = NULL;
3532 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3533 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3534 sizeof(WDI_DelSTASelfReqParamsType)) ;
3535
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003537 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 if( NULL == wdiDelStaSelfReq )
3539 {
3540 VOS_ASSERT( 0 );
3541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003542 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 return( VOS_STATUS_E_NOMEM );
3544 }
3545
3546 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3547 if( NULL == pWdaParams )
3548 {
3549 VOS_ASSERT( 0 );
3550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003551 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 vos_mem_free(wdiDelStaSelfReq) ;
3553 return( VOS_STATUS_E_NOMEM );
3554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 pWdaParams->pWdaContext = pWDA;
3556 /* Store param pointer as passed in by caller */
3557 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3558 /* store Params pass it to WDI */
3559 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3561 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3562
3563 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3564 wdiDelStaSelfReq->pUserData = pWdaParams;
3565
Jeff Johnson43971f52012-07-17 12:26:56 -07003566 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3568
Jeff Johnson43971f52012-07-17 12:26:56 -07003569 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 {
3571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3572 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3573 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003574 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3576 vos_mem_free(pWdaParams) ;
3577 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3578 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3579 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003580 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003581}
3582
Jeff Johnson295189b2012-06-20 16:38:30 -07003583/*
3584 * FUNCTION: WDA_SendMsg
3585 * Send Message back to PE
3586 */
3587void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3588 void *pBodyptr, tANI_U32 bodyVal)
3589{
3590 tSirMsgQ msg = {0} ;
3591 tANI_U32 status = VOS_STATUS_SUCCESS ;
3592 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 msg.type = msgType;
3594 msg.bodyval = bodyVal;
3595 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 if (VOS_STATUS_SUCCESS != status)
3598 {
3599 if(NULL != pBodyptr)
3600 {
3601 vos_mem_free(pBodyptr);
3602 }
3603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003604 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003605 VOS_ASSERT(0) ;
3606 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 return ;
3608}
Jeff Johnson295189b2012-06-20 16:38:30 -07003609/*
3610 * FUNCTION: WDA_UpdateBSSParams
3611 * Translated WDA/PE BSS info into WDI BSS info..
3612 */
3613void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3614 WDI_ConfigBSSReqInfoType *wdiBssParams,
3615 tAddBssParams *wdaBssParams)
3616{
3617 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003618 /* copy bssReq Params to WDI structure */
3619 vos_mem_copy(wdiBssParams->macBSSID,
3620 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3621 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3622 sizeof(tSirMacAddr)) ;
3623 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3624 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3625 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 wdiBssParams->ucShortSlotTimeSupported =
3627 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003628 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3629 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3630 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3631 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3632 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3633
3634 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3635 wdiBssParams->ucTXOPProtectionFullSupport =
3636 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3638 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003639 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3641 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3642 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3643 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3644
Chet Lanctot186b5732013-03-18 10:26:30 -07003645 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3646
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 /* copy SSID into WDI structure */
3648 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3649 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3650 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3652 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654#ifdef WLAN_FEATURE_VOWIFI
3655 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3656#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659#ifdef WLAN_FEATURE_VOWIFI_11R
3660 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 if(wdiBssParams->bExtSetStaKeyParamValid)
3662 {
3663 /* copy set STA key params to WDI structure */
3664 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3665 wdaBssParams->extSetStaKeyParam.staIdx;
3666 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3667 wdaBssParams->extSetStaKeyParam.encType;
3668 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3669 wdaBssParams->extSetStaKeyParam.wepType;
3670 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3671 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3673 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003674 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003675 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3676 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3677 {
3678 WDA_GetWepKeysFromCfg( pWDA,
3679 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3680 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3681 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3682 }
3683 else
3684 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3686 keyIndex++)
3687 {
3688 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3689 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3690 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3691 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3692 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3693 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003694 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3695 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3696 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3697 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3698 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3699 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3700 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3701 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003703 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3704 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 }
3706 }
3707 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3708 }
3709 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3710 {
3711 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3712 sizeof(wdaBssParams->extSetStaKeyParam) );
3713 }
3714#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003715#ifdef WLAN_FEATURE_11AC
3716 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3717 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3718#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003719
3720 return ;
3721}
Jeff Johnson295189b2012-06-20 16:38:30 -07003722/*
3723 * FUNCTION: WDA_UpdateSTAParams
3724 * Translated WDA/PE BSS info into WDI BSS info..
3725 */
3726void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3727 WDI_ConfigStaReqInfoType *wdiStaParams,
3728 tAddStaParams *wdaStaParams)
3729{
3730 tANI_U8 i = 0;
3731 /* Update STA params */
3732 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3733 sizeof(tSirMacAddr)) ;
3734 wdiStaParams->usAssocId = wdaStaParams->assocId;
3735 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003736 wdiStaParams->staIdx = wdaStaParams->staIdx;
3737
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 wdiStaParams->ucShortPreambleSupported =
3739 wdaStaParams->shortPreambleSupported;
3740 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3741 sizeof(tSirMacAddr)) ;
3742 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3743
3744 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3745
3746 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3747 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3748 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3749 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3750 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3751 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3752 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3753
3754 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3755 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 wdiStaParams->wdiSupportedRates.opRateMode =
3757 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3759 {
3760 wdiStaParams->wdiSupportedRates.llbRates[i] =
3761 wdaStaParams->supportedRates.llbRates[i];
3762 }
3763 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3764 {
3765 wdiStaParams->wdiSupportedRates.llaRates[i] =
3766 wdaStaParams->supportedRates.llaRates[i];
3767 }
3768 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3769 {
3770 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3771 wdaStaParams->supportedRates.aniLegacyRates[i];
3772 }
3773 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3774 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003775#ifdef WLAN_FEATURE_11AC
3776 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3777 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3778 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3779 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3780#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003781 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3782 {
3783 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3784 wdaStaParams->supportedRates.supportedMCSSet[i];
3785 }
3786 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3787 wdaStaParams->supportedRates.rxHighestDataRate;
3788
3789 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3790
3791 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3792
3793 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3794 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3795 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3796
3797 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3798 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3799 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3800 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003801 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003802#ifdef WLAN_FEATURE_11AC
3803 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3804 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003805 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003806#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003807 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3808 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003809 return ;
3810}
Jeff Johnson295189b2012-06-20 16:38:30 -07003811/*
3812 * -------------------------------------------------------------------------
3813 * CFG update to WDI
3814 * -------------------------------------------------------------------------
3815 */
3816
3817 /*
3818 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3819 * Convert the WNI CFG ID to HAL CFG ID
3820 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003821static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003822{
3823 switch(wniCfgId)
3824 {
3825 case WNI_CFG_STA_ID:
3826 return QWLAN_HAL_CFG_STA_ID;
3827 case WNI_CFG_CURRENT_TX_ANTENNA:
3828 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3829 case WNI_CFG_CURRENT_RX_ANTENNA:
3830 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3831 case WNI_CFG_LOW_GAIN_OVERRIDE:
3832 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3833 case WNI_CFG_POWER_STATE_PER_CHAIN:
3834 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3835 case WNI_CFG_CAL_PERIOD:
3836 return QWLAN_HAL_CFG_CAL_PERIOD;
3837 case WNI_CFG_CAL_CONTROL:
3838 return QWLAN_HAL_CFG_CAL_CONTROL;
3839 case WNI_CFG_PROXIMITY:
3840 return QWLAN_HAL_CFG_PROXIMITY;
3841 case WNI_CFG_NETWORK_DENSITY:
3842 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3843 case WNI_CFG_MAX_MEDIUM_TIME:
3844 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3845 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3846 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3847 case WNI_CFG_RTS_THRESHOLD:
3848 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3849 case WNI_CFG_SHORT_RETRY_LIMIT:
3850 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3851 case WNI_CFG_LONG_RETRY_LIMIT:
3852 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3853 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3854 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3855 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3856 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3857 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3858 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3859 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3860 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3861 case WNI_CFG_FIXED_RATE:
3862 return QWLAN_HAL_CFG_FIXED_RATE;
3863 case WNI_CFG_RETRYRATE_POLICY:
3864 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3865 case WNI_CFG_RETRYRATE_SECONDARY:
3866 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3867 case WNI_CFG_RETRYRATE_TERTIARY:
3868 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3869 case WNI_CFG_FORCE_POLICY_PROTECTION:
3870 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3871 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3872 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3873 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3874 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3875 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3876 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3877 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3878 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3879 case WNI_CFG_MAX_BA_SESSIONS:
3880 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3881 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3882 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3883 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3884 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3885 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3886 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3887 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3888 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3889 case WNI_CFG_STATS_PERIOD:
3890 return QWLAN_HAL_CFG_STATS_PERIOD;
3891 case WNI_CFG_CFP_MAX_DURATION:
3892 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3893#if 0 /*This is not part of CFG*/
3894 case WNI_CFG_FRAME_TRANS_ENABLED:
3895 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3896#endif
3897 case WNI_CFG_DTIM_PERIOD:
3898 return QWLAN_HAL_CFG_DTIM_PERIOD;
3899 case WNI_CFG_EDCA_WME_ACBK:
3900 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3901 case WNI_CFG_EDCA_WME_ACBE:
3902 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3903 case WNI_CFG_EDCA_WME_ACVI:
3904 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3905 case WNI_CFG_EDCA_WME_ACVO:
3906 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3907#if 0
3908 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3909 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3910 case WNI_CFG_TELE_BCN_TRANS_LI:
3911 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3912 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3913 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3914 case WNI_CFG_TELE_BCN_MAX_LI:
3915 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3916 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3917 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3918#endif
3919 case WNI_CFG_ENABLE_CLOSE_LOOP:
3920 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003921 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3922 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 default:
3924 {
3925 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3926 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3927 wniCfgId);
3928 return VOS_STATUS_E_INVAL;
3929 }
3930 }
3931}
Jeff Johnson295189b2012-06-20 16:38:30 -07003932/*
3933 * FUNCTION: WDA_UpdateCfgCallback
3934 *
3935 */
3936void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3937{
3938 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3939 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3940 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003942 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 /*
3944 * currently there is no response message is expected between PE and
3945 * WDA, Failure return from WDI is a ASSERT condition
3946 */
3947 if(WDI_STATUS_SUCCESS != wdiStatus)
3948 {
3949 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003950 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003951 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3952 }
3953
3954 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3955 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3956 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003957 return ;
3958}
Jeff Johnson295189b2012-06-20 16:38:30 -07003959/*
3960 * FUNCTION: WDA_UpdateCfg
3961 *
3962 */
3963VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3964{
3965
3966 WDI_Status status = WDI_STATUS_SUCCESS ;
3967 tANI_U32 val =0;
3968 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3969 tHalCfg *configData;
3970 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3971 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003973 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 if (NULL == pMac )
3975 {
3976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003977 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 return VOS_STATUS_E_FAILURE;
3979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003980 if(WDA_START_STATE != pWDA->wdaState)
3981 {
3982 return VOS_STATUS_E_FAILURE;
3983 }
3984
3985 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3986 {
3987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003988 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 VOS_ASSERT(0);
3990 return VOS_STATUS_E_FAILURE;
3991 }
3992
3993 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3994 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 if(NULL == wdiCfgReqParam)
3996 {
3997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 VOS_ASSERT(0);
4000 return VOS_STATUS_E_NOMEM;
4001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4003 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 if(NULL == wdiCfgReqParam->pConfigBuffer)
4005 {
4006 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004007 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 vos_mem_free(wdiCfgReqParam);
4009 VOS_ASSERT(0);
4010 return VOS_STATUS_E_NOMEM;
4011 }
4012
4013 /*convert the WNI CFG Id to HAL CFG Id*/
4014 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4015 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4016
4017 /*TODO: revisit this for handling string parameters */
4018 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4019 &val) != eSIR_SUCCESS)
4020 {
4021 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4022 "Failed to cfg get id %d\n", cfgParam->bodyval);
4023 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4024 vos_mem_free(wdiCfgReqParam);
4025 return eSIR_FAILURE;
4026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4028 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4029 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4030 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4031 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4032
4033 /* store Params pass it to WDI */
4034 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004035#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4036 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4037 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 if(IS_WDI_STATUS_FAILURE(status))
4039 {
4040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4041 "Failure in Update CFG WDI API, free all the memory " );
4042 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4043 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4044 pWDA->wdaWdiCfgApiMsgParam = NULL;
4045 /* Failure is not expected */
4046 VOS_ASSERT(0) ;
4047 }
4048#else
4049 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4050 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4051 pWDA->wdaWdiCfgApiMsgParam = NULL;
4052#endif
4053 return CONVERT_WDI2VOS_STATUS(status) ;
4054}
4055
Jeff Johnson295189b2012-06-20 16:38:30 -07004056VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4057 v_U8_t *pDefaultKeyId,
4058 v_U8_t *pNumKeys,
4059 WDI_KeysType *pWdiKeys )
4060{
4061 v_U32_t i, j, defKeyId = 0;
4062 v_U32_t val = SIR_MAC_KEY_LENGTH;
4063 VOS_STATUS status = WDI_STATUS_SUCCESS;
4064 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004065 if (NULL == pMac )
4066 {
4067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004068 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004069 return VOS_STATUS_E_FAILURE;
4070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4072 &defKeyId ))
4073 {
4074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4075 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4076 }
4077
4078 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 /* Need to extract ALL of the configured WEP Keys */
4080 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4081 {
4082 val = SIR_MAC_KEY_LENGTH;
4083 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4084 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4085 pWdiKeys[j].key,
4086 &val ))
4087 {
4088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4089 "WEP Key index [%d] may not configured in CFG\n",i);
4090 }
4091 else
4092 {
4093 pWdiKeys[j].keyId = (tANI_U8) i;
4094 /*
4095 * Actually, a DC (Don't Care) because
4096 * this is determined (and set) by PE/MLME
4097 */
4098 pWdiKeys[j].unicast = 0;
4099 /*
4100 * Another DC (Don't Care)
4101 */
4102 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4103 /* Another DC (Don't Care). Unused for WEP */
4104 pWdiKeys[j].paeRole = 0;
4105 /* Determined from wlan_cfgGetStr() above.*/
4106 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 j++;
4108 *pNumKeys = (tANI_U8) j;
4109 }
4110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004111 return status;
4112}
Jeff Johnson295189b2012-06-20 16:38:30 -07004113/*
4114 * FUNCTION: WDA_SetBssKeyReqCallback
4115 * send SET BSS key RSP back to PE
4116 */
4117void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4118{
4119 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4120 tWDA_CbContext *pWDA;
4121 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004123 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 if(NULL == pWdaParams)
4125 {
4126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004127 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004128 VOS_ASSERT(0) ;
4129 return ;
4130 }
4131 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4132 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4134 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004135 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 return ;
4138}
Jeff Johnson295189b2012-06-20 16:38:30 -07004139/*
4140 * FUNCTION: WDA_ProcessSetBssKeyReq
4141 * Request to WDI for programming the BSS key( key for
4142 * broadcast/multicast frames Encryption)
4143 */
4144VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4145 tSetBssKeyParams *setBssKeyParams )
4146{
4147 WDI_Status status = WDI_STATUS_SUCCESS ;
4148 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4149 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4150 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4151 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004154 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 if(NULL == wdiSetBssKeyParam)
4156 {
4157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 VOS_ASSERT(0);
4160 return VOS_STATUS_E_NOMEM;
4161 }
4162 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4163 if(NULL == pWdaParams)
4164 {
4165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004166 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004167 VOS_ASSERT(0);
4168 vos_mem_free(wdiSetBssKeyParam);
4169 return VOS_STATUS_E_NOMEM;
4170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 /* copy set BSS params to WDI structure */
4173 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4174 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4175 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004176 if(setBssKeyParams->encType != eSIR_ED_NONE)
4177 {
4178 if( setBssKeyParams->numKeys == 0 &&
4179 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4180 setBssKeyParams->encType == eSIR_ED_WEP104))
4181 {
4182 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4184 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4185 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4186 }
4187 else
4188 {
4189 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4190 {
4191 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4192 setBssKeyParams->key[keyIndex].keyId;
4193 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4194 setBssKeyParams->key[keyIndex].unicast;
4195 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4196 setBssKeyParams->key[keyIndex].keyDirection;
4197 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4198 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4199 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4200 setBssKeyParams->key[keyIndex].paeRole;
4201 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4202 setBssKeyParams->key[keyIndex].keyLength;
4203 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4204 setBssKeyParams->key[keyIndex].key,
4205 SIR_MAC_MAX_KEY_LENGTH);
4206 }
4207 }
4208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4210 setBssKeyParams->singleTidRc;
4211 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 /* Store set key pointer, as this will be used for response */
4213 /* store Params pass it to WDI */
4214 pWdaParams->pWdaContext = pWDA;
4215 pWdaParams->wdaMsgParam = setBssKeyParams;
4216 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4218 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4219
4220 if(IS_WDI_STATUS_FAILURE(status))
4221 {
4222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4223 "Failure in Set BSS Key Req WDI API, free all the memory " );
4224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4225 vos_mem_free(pWdaParams) ;
4226 setBssKeyParams->status = eSIR_FAILURE ;
4227 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004229 return CONVERT_WDI2VOS_STATUS(status) ;
4230}
Jeff Johnson295189b2012-06-20 16:38:30 -07004231/*
4232 * FUNCTION: WDA_RemoveBssKeyReqCallback
4233 * send SET BSS key RSP back to PE
4234 */
4235void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4236{
4237 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4238 tWDA_CbContext *pWDA;
4239 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004241 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 if(NULL == pWdaParams)
4243 {
4244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004245 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004246 VOS_ASSERT(0) ;
4247 return ;
4248 }
4249 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4250 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4252 vos_mem_free(pWdaParams) ;
4253
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004254 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 return ;
4257}
Jeff Johnson295189b2012-06-20 16:38:30 -07004258/*
4259 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4260 * Request to WDI to remove the BSS key( key for broadcast/multicast
4261 * frames Encryption)
4262 */
4263VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4264 tRemoveBssKeyParams *removeBssKeyParams )
4265{
4266 WDI_Status status = WDI_STATUS_SUCCESS ;
4267 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4268 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4269 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4270 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004272 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 if(NULL == wdiRemoveBssKeyParam)
4274 {
4275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004276 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004277 VOS_ASSERT(0);
4278 return VOS_STATUS_E_NOMEM;
4279 }
4280 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4281 if(NULL == pWdaParams)
4282 {
4283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004284 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 VOS_ASSERT(0);
4286 vos_mem_free(wdiRemoveBssKeyParam);
4287 return VOS_STATUS_E_NOMEM;
4288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004289 /* copy Remove BSS key params to WDI structure*/
4290 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4291 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4292 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4293 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4294 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004295 /* Store remove key pointer, as this will be used for response */
4296 /* store Params pass it to WDI */
4297 pWdaParams->pWdaContext = pWDA;
4298 pWdaParams->wdaMsgParam = removeBssKeyParams;
4299 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4301 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 if(IS_WDI_STATUS_FAILURE(status))
4303 {
4304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4305 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4307 vos_mem_free(pWdaParams) ;
4308 removeBssKeyParams->status = eSIR_FAILURE ;
4309 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4310 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 return CONVERT_WDI2VOS_STATUS(status) ;
4312}
Jeff Johnson295189b2012-06-20 16:38:30 -07004313/*
4314 * FUNCTION: WDA_SetBssKeyReqCallback
4315 * send SET BSS key RSP back to PE
4316 */
4317void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4318{
4319 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4320 tWDA_CbContext *pWDA;
4321 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004323 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 if(NULL == pWdaParams)
4325 {
4326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004327 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 VOS_ASSERT(0) ;
4329 return ;
4330 }
4331 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4332 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4334 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004335 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 return ;
4338}
Jeff Johnson295189b2012-06-20 16:38:30 -07004339/*
4340 * FUNCTION: WDA_ProcessSetStaKeyReq
4341 * Request to WDI for programming the STA key( key for Unicast frames
4342 * Encryption)
4343 */
4344VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4345 tSetStaKeyParams *setStaKeyParams )
4346{
4347 WDI_Status status = WDI_STATUS_SUCCESS ;
4348 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4349 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4350 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4351 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004354 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 if(NULL == wdiSetStaKeyParam)
4356 {
4357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004358 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 VOS_ASSERT(0);
4360 return VOS_STATUS_E_NOMEM;
4361 }
4362 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4363 if(NULL == pWdaParams)
4364 {
4365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004366 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 VOS_ASSERT(0);
4368 vos_mem_free(wdiSetStaKeyParam);
4369 return VOS_STATUS_E_NOMEM;
4370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 /* copy set STA key params to WDI structure */
4374 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4375 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4376 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4377 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 if(setStaKeyParams->encType != eSIR_ED_NONE)
4379 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004380 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004381 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4382 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4383 {
4384 WDA_GetWepKeysFromCfg( pWDA,
4385 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4386 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4387 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4388 }
4389 else
4390 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4392 keyIndex++)
4393 {
4394 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4395 setStaKeyParams->key[keyIndex].keyId;
4396 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4397 setStaKeyParams->key[keyIndex].unicast;
4398 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4399 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4401 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4402 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4403 setStaKeyParams->key[keyIndex].paeRole;
4404 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4405 setStaKeyParams->key[keyIndex].keyLength;
4406 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4407 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4408 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4409 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4410 {
4411 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4412 }
4413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4415 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 }
4417 }
4418 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4419 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 /* Store set key pointer, as this will be used for response */
4421 /* store Params pass it to WDI */
4422 pWdaParams->pWdaContext = pWDA;
4423 pWdaParams->wdaMsgParam = setStaKeyParams;
4424 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4426 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 if(IS_WDI_STATUS_FAILURE(status))
4428 {
4429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4430 "Failure in set STA Key Req WDI API, free all the memory " );
4431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4432 vos_mem_free(pWdaParams) ;
4433 setStaKeyParams->status = eSIR_FAILURE ;
4434 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4435 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 return CONVERT_WDI2VOS_STATUS(status) ;
4437}
Jeff Johnson295189b2012-06-20 16:38:30 -07004438/*
4439 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4440 * send SET Bcast STA key RSP back to PE
4441 */
4442void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4443{
4444 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4445 tWDA_CbContext *pWDA;
4446 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004448 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004449 if(NULL == pWdaParams)
4450 {
4451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004452 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004453 VOS_ASSERT(0) ;
4454 return ;
4455 }
4456 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4457 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4459 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004460 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004461 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 return ;
4463}
4464
Jeff Johnson295189b2012-06-20 16:38:30 -07004465/*
4466 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4467 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4468 * Encryption)
4469 */
4470VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4471 tSetStaKeyParams *setStaKeyParams )
4472{
4473 WDI_Status status = WDI_STATUS_SUCCESS ;
4474 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4475 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4476 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4477 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004478 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004480 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 if(NULL == wdiSetStaKeyParam)
4482 {
4483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 VOS_ASSERT(0);
4486 return VOS_STATUS_E_NOMEM;
4487 }
4488 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4489 if(NULL == pWdaParams)
4490 {
4491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004493 VOS_ASSERT(0);
4494 vos_mem_free(wdiSetStaKeyParam);
4495 return VOS_STATUS_E_NOMEM;
4496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004497 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 /* copy set STA key params to WDI structure */
4500 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4501 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4502 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4503 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 if(setStaKeyParams->encType != eSIR_ED_NONE)
4505 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004506 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4507 keyIndex++)
4508 {
4509 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4510 setStaKeyParams->key[keyIndex].keyId;
4511 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4512 setStaKeyParams->key[keyIndex].unicast;
4513 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4514 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4516 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4517 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4518 setStaKeyParams->key[keyIndex].paeRole;
4519 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4520 setStaKeyParams->key[keyIndex].keyLength;
4521 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4522 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4525 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 }
4527 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 /* Store set key pointer, as this will be used for response */
4529 /* store Params pass it to WDI */
4530 pWdaParams->pWdaContext = pWDA;
4531 pWdaParams->wdaMsgParam = setStaKeyParams;
4532 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004533 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4534 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
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 set BCAST STA Key Req WDI API, free all the memory " );
4539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4540 vos_mem_free(pWdaParams) ;
4541 setStaKeyParams->status = eSIR_FAILURE ;
4542 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004544 return CONVERT_WDI2VOS_STATUS(status) ;
4545}
Jeff Johnson295189b2012-06-20 16:38:30 -07004546/*
4547 * FUNCTION: WDA_RemoveStaKeyReqCallback
4548 * send SET BSS key RSP back to PE
4549 */
4550void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4551{
4552 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4553 tWDA_CbContext *pWDA;
4554 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004556 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 if(NULL == pWdaParams)
4558 {
4559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004560 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 VOS_ASSERT(0) ;
4562 return ;
4563 }
4564 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4565 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4567 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004568 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004570 return ;
4571}
4572
Jeff Johnson295189b2012-06-20 16:38:30 -07004573/*
4574 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4575 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4576 */
4577VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4578 tRemoveStaKeyParams *removeStaKeyParams )
4579{
4580 WDI_Status status = WDI_STATUS_SUCCESS ;
4581 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4582 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4583 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4584 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004586 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 if(NULL == wdiRemoveStaKeyParam)
4588 {
4589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004590 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004591 VOS_ASSERT(0);
4592 return VOS_STATUS_E_NOMEM;
4593 }
4594 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4595 if(NULL == pWdaParams)
4596 {
4597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 VOS_ASSERT(0);
4600 vos_mem_free(wdiRemoveStaKeyParam);
4601 return VOS_STATUS_E_NOMEM;
4602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 /* copy remove STA key params to WDI structure*/
4604 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4605 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4606 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4607 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4608 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004609 /* Store remove key pointer, as this will be used for response */
4610 /* store Params pass it to WDI */
4611 pWdaParams->pWdaContext = pWDA;
4612 pWdaParams->wdaMsgParam = removeStaKeyParams;
4613 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4615 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004616 if(IS_WDI_STATUS_FAILURE(status))
4617 {
4618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4619 "Failure in remove STA Key Req WDI API, free all the memory " );
4620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4621 vos_mem_free(pWdaParams) ;
4622 removeStaKeyParams->status = eSIR_FAILURE ;
4623 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 return CONVERT_WDI2VOS_STATUS(status) ;
4626}
Jeff Johnson295189b2012-06-20 16:38:30 -07004627/*
4628 * FUNCTION: WDA_IsHandleSetLinkStateReq
4629 * Update the WDA state and return the status to handle this message or not
4630 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004631WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4632 tWDA_CbContext *pWDA,
4633 tLinkStateParams *linkStateParams)
4634{
4635 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004636 switch(linkStateParams->state)
4637 {
4638 case eSIR_LINK_PREASSOC_STATE:
4639 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4640 /*
4641 * set the WDA state to PRE ASSOC
4642 * copy the BSSID into pWDA to use it in join request and return,
4643 * No need to handle these messages.
4644 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004645 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4646 {
4647 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004649 }
4650 else
4651 {
4652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004653 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004654 VOS_ASSERT(0);
4655 }
4656
4657 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4658 {
4659 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004660 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004661 }
4662 else
4663 {
4664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004665 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004666 VOS_ASSERT(0);
4667 }
4668
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4670 *channel and after ) so reset the WDA state to ready when the second
4671 * time UMAC issue the link state with PREASSOC
4672 */
4673 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4674 {
4675 /* RESET WDA state back to WDA_READY_STATE */
4676 pWDA->wdaState = WDA_READY_STATE;
4677 }
4678 else
4679 {
4680 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4681 }
4682 //populate linkState info in WDACbCtxt
4683 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 default:
4686 if(pWDA->wdaState != WDA_READY_STATE)
4687 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004688 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4689 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4690 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4691 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4692 *the ASSERT in WDA_Stop during module unload.*/
4693 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4694 {
4695 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004696 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004697 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004698 else
4699 {
4700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004701 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004702 status = WDA_IGNORE_SET_LINK_STATE;
4703 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 }
4705 break;
4706 }
4707
4708 return status;
4709}
Jeff Johnson295189b2012-06-20 16:38:30 -07004710/*
4711 * FUNCTION: WDA_SetLinkStateCallback
4712 * call back function for set link state from WDI
4713 */
4714void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4715{
4716 tWDA_CbContext *pWDA;
4717 tLinkStateParams *linkStateParams;
4718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004720 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 if(NULL == pWdaParams)
4722 {
4723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004724 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 VOS_ASSERT(0) ;
4726 return ;
4727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 /*
4731 * In STA mode start the BA activity check timer after association
4732 * and in AP mode start BA activity check timer after BSS start */
4733 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4734 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4735 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4736 {
4737 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 /*
4741 * No respone required for WDA_SET_LINK_STATE so free the request
4742 * param here
4743 */
4744 if( pWdaParams != NULL )
4745 {
4746 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4747 {
4748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4749 }
4750 vos_mem_free(pWdaParams);
4751 }
4752 return ;
4753}
Jeff Johnson295189b2012-06-20 16:38:30 -07004754/*
4755 * FUNCTION: WDA_ProcessSetLinkState
4756 * Request to WDI to set the link status.
4757 */
4758VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4759 tLinkStateParams *linkStateParams)
4760{
4761 WDI_Status status = WDI_STATUS_SUCCESS ;
4762 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4763 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4764 sizeof(WDI_SetLinkReqParamsType)) ;
4765 tWDA_ReqParams *pWdaParams ;
4766 tpAniSirGlobal pMac;
4767 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4768
4769 if(NULL == pMac)
4770 {
4771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004772 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004773 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004774 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 return VOS_STATUS_E_FAILURE;
4776 }
4777
4778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004779 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004780 if(NULL == wdiSetLinkStateParam)
4781 {
4782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004783 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 VOS_ASSERT(0);
4785 return VOS_STATUS_E_NOMEM;
4786 }
4787 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4788 if(NULL == pWdaParams)
4789 {
4790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004791 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 VOS_ASSERT(0);
4793 vos_mem_free(wdiSetLinkStateParam);
4794 return VOS_STATUS_E_NOMEM;
4795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 if(WDA_IGNORE_SET_LINK_STATE ==
4797 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4798 {
4799 status = WDI_STATUS_E_FAILURE;
4800 }
4801 else
4802 {
4803 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4804 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4806 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4808 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004809 pWdaParams->pWdaContext = pWDA;
4810 /* Store remove key pointer, as this will be used for response */
4811 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004812 /* store Params pass it to WDI */
4813 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4814 /* Stop Timer only other than GO role and concurrent session */
4815 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4816 && !vos_concurrent_sessions_running() &&
4817 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4818 {
4819 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4822 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004823 if(IS_WDI_STATUS_FAILURE(status))
4824 {
4825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4826 "Failure in set link state Req WDI API, free all the memory " );
4827 }
4828 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004829 if(IS_WDI_STATUS_FAILURE(status))
4830 {
4831 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004832 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004833 vos_mem_free(pWdaParams);
4834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004835 return CONVERT_WDI2VOS_STATUS(status) ;
4836}
Jeff Johnson295189b2012-06-20 16:38:30 -07004837/*
4838 * FUNCTION: WDA_GetStatsReqParamsCallback
4839 * send the response to PE with Stats received from WDI
4840 */
4841void WDA_GetStatsReqParamsCallback(
4842 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4843 void* pUserData)
4844{
4845 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4846 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4847
4848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004849 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004850 pGetPEStatsRspParams =
4851 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4852 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4853
4854 if(NULL == pGetPEStatsRspParams)
4855 {
4856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004857 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004858 VOS_ASSERT(0);
4859 return;
4860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4862 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4863 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4864 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4865 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4866
4867 //Fill the Session Id Properly in PE
4868 pGetPEStatsRspParams->sessionId = 0;
4869 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004870 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004871 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4872 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 vos_mem_copy( pGetPEStatsRspParams + 1,
4874 wdiGetStatsRsp + 1,
4875 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 /* send response to UMAC*/
4877 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4878
4879 return;
4880}
4881
Jeff Johnson295189b2012-06-20 16:38:30 -07004882/*
4883 * FUNCTION: WDA_ProcessGetStatsReq
4884 * Request to WDI to get the statistics
4885 */
4886VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4887 tAniGetPEStatsReq *pGetStatsParams)
4888{
4889 WDI_Status status = WDI_STATUS_SUCCESS ;
4890 WDI_GetStatsReqParamsType wdiGetStatsParam;
4891 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004893 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4895 pGetStatsParams->staId;
4896 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4897 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004898 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004899 status = WDI_GetStatsReq(&wdiGetStatsParam,
4900 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 if(IS_WDI_STATUS_FAILURE(status))
4902 {
4903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4904 "Failure in Get Stats Req WDI API, free all the memory " );
4905 pGetPEStatsRspParams =
4906 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4907 if(NULL == pGetPEStatsRspParams)
4908 {
4909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004912 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 return VOS_STATUS_E_NOMEM;
4914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4916 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4917 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4918 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4919 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4920 (void *)pGetPEStatsRspParams, 0) ;
4921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 /* Free the request message */
4923 vos_mem_free(pGetStatsParams);
4924 return CONVERT_WDI2VOS_STATUS(status);
4925}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004926
4927#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
4928/*
4929 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
4930 * send the response to PE with roam Rssi received from WDI
4931 */
4932void WDA_GetRoamRssiReqParamsCallback(
4933 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
4934 void* pUserData)
4935{
4936 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4937 tWDA_CbContext *pWDA = NULL;
4938 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
4939 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
4940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4941 "<------ %s " ,__func__);
4942 if(NULL == pWdaParams)
4943 {
4944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4945 "%s: pWdaParams received NULL", __func__);
4946 VOS_ASSERT(0) ;
4947 return ;
4948 }
4949 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4950 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
4951
4952 if(NULL == pGetRoamRssiReqParams)
4953 {
4954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4955 "%s: pGetRoamRssiReqParams received NULL", __func__);
4956 VOS_ASSERT(0);
4957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4958 vos_mem_free(pWdaParams);
4959 return ;
4960 }
4961 pGetRoamRssiRspParams =
4962 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
4963
4964 if(NULL == pGetRoamRssiRspParams)
4965 {
4966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4967 "%s: VOS MEM Alloc Failure", __func__);
4968 VOS_ASSERT(0);
4969 return;
4970 }
4971 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
4972 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004973 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004974 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
4975 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
4976
4977 /* Assign get roam rssi req (backup) in to the response */
4978 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
4979
4980 /* free WDI command buffer */
4981 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4982 vos_mem_free(pWdaParams) ;
4983
4984 /* send response to UMAC*/
4985 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
4986
4987 return;
4988}
4989
4990
4991
4992/*
4993 * FUNCTION: WDA_ProcessGetRoamRssiReq
4994 * Request to WDI to get the statistics
4995 */
4996VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
4997 tAniGetRssiReq *pGetRoamRssiParams)
4998{
4999 WDI_Status status = WDI_STATUS_SUCCESS ;
5000 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5001 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5002 tWDA_ReqParams *pWdaParams = NULL;
5003
5004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5005 "------> %s " ,__func__);
5006 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5007 pGetRoamRssiParams->staId;
5008 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5009
5010 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5011 if(NULL == pWdaParams)
5012 {
5013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5014 "%s: VOS MEM Alloc Failure", __func__);
5015 VOS_ASSERT(0);
5016 return VOS_STATUS_E_NOMEM;
5017 }
5018
5019 /* Store Init Req pointer, as this will be used for response */
5020 pWdaParams->pWdaContext = pWDA;
5021
5022 /* Take Get roam Rssi req backup as it stores the callback to be called after
5023 receiving the response */
5024 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5025 pWdaParams->wdaWdiApiMsgParam = NULL;
5026
5027 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5028 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5029 if(IS_WDI_STATUS_FAILURE(status))
5030 {
5031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5032 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5033 pGetRoamRssiRspParams =
5034 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5035 if(NULL == pGetRoamRssiRspParams)
5036 {
5037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5038 "%s: VOS MEM Alloc Failure", __func__);
5039 VOS_ASSERT(0);
5040 vos_mem_free(pGetRoamRssiParams);
5041 vos_mem_free(pWdaParams);
5042 return VOS_STATUS_E_NOMEM;
5043 }
5044 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5045 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5046 pGetRoamRssiRspParams->rssi = 0;
5047 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5048 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5049 (void *)pGetRoamRssiRspParams, 0) ;
5050 }
5051 return CONVERT_WDI2VOS_STATUS(status);
5052}
5053#endif
5054
5055
Jeff Johnson295189b2012-06-20 16:38:30 -07005056/*
5057 * FUNCTION: WDA_UpdateEDCAParamCallback
5058 * call back function for Update EDCA params from WDI
5059 */
5060void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5061{
5062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5063 tEdcaParams *pEdcaParams;
5064
5065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005066 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 if(NULL == pWdaParams)
5068 {
5069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005070 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 VOS_ASSERT(0) ;
5072 return ;
5073 }
5074 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5076 vos_mem_free(pWdaParams);
5077 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 return ;
5079}
Jeff Johnson295189b2012-06-20 16:38:30 -07005080/*
5081 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5082 * Request to WDI to Update the EDCA params.
5083 */
5084VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5085 tEdcaParams *pEdcaParams)
5086{
5087 WDI_Status status = WDI_STATUS_SUCCESS ;
5088 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5089 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5090 sizeof(WDI_UpdateEDCAParamsType)) ;
5091 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005093 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005094 if(NULL == wdiEdcaParam)
5095 {
5096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005097 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005098 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005099 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005100 return VOS_STATUS_E_NOMEM;
5101 }
5102 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5103 if(NULL == pWdaParams)
5104 {
5105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005107 VOS_ASSERT(0);
5108 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005109 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005110 return VOS_STATUS_E_NOMEM;
5111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005112 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5113 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5114 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5115 &pEdcaParams->acbe);
5116 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5117 &pEdcaParams->acbk);
5118 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5119 &pEdcaParams->acvi);
5120 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5121 &pEdcaParams->acvo);
5122 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 pWdaParams->pWdaContext = pWDA;
5124 /* Store remove key pointer, as this will be used for response */
5125 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 /* store Params pass it to WDI */
5127 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5129 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 if(IS_WDI_STATUS_FAILURE(status))
5131 {
5132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5133 "Failure in Update EDCA Params WDI API, free all the memory " );
5134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5135 vos_mem_free(pWdaParams);
5136 vos_mem_free(pEdcaParams);
5137 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005138 return CONVERT_WDI2VOS_STATUS(status) ;
5139}
Jeff Johnson295189b2012-06-20 16:38:30 -07005140/*
5141 * FUNCTION: WDA_AddBAReqCallback
5142 * send ADD BA RSP back to PE
5143 */
5144void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5145 void* pUserData)
5146{
5147 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5148 tWDA_CbContext *pWDA;
5149 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005151 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 if(NULL == pWdaParams)
5153 {
5154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005155 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005156 VOS_ASSERT(0) ;
5157 return ;
5158 }
5159 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5160 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5162 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005163 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 return ;
5166}
5167
Jeff Johnson295189b2012-06-20 16:38:30 -07005168/*
5169 * FUNCTION: WDA_ProcessAddBAReq
5170 * Request to WDI to Update the ADDBA REQ params.
5171 */
5172VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5173 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5174{
Jeff Johnson43971f52012-07-17 12:26:56 -07005175 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005176 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5177 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5178 sizeof(WDI_AddBAReqParamsType)) ;
5179 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005181 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 if(NULL == wdiAddBAReqParam)
5183 {
5184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005186 VOS_ASSERT(0);
5187 return VOS_STATUS_E_NOMEM;
5188 }
5189 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5190 if(NULL == pWdaParams)
5191 {
5192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005194 VOS_ASSERT(0);
5195 vos_mem_free(wdiAddBAReqParam);
5196 return VOS_STATUS_E_NOMEM;
5197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005198 do
5199 {
5200 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 wdiAddBaInfo->ucSTAIdx = staIdx ;
5202 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5203 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005204 } while(0) ;
5205 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 pWdaParams->pWdaContext = pWDA;
5207 /* store Params pass it to WDI */
5208 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5209 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005210 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5211 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005212
Jeff Johnson43971f52012-07-17 12:26:56 -07005213 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005214 {
5215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005216 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5217 status = CONVERT_WDI2VOS_STATUS(wstatus);
5218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 vos_mem_free(pWdaParams);
5220 pAddBAReqParams->status = eSIR_FAILURE;
5221 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5222 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005223 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005224}
Jeff Johnson295189b2012-06-20 16:38:30 -07005225/*
5226 * FUNCTION: WDA_AddBASessionReqCallback
5227 * send ADD BA SESSION RSP back to PE/(or TL)
5228 */
5229void WDA_AddBASessionReqCallback(
5230 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5231{
5232 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5234 tWDA_CbContext *pWDA;
5235 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005237 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 if(NULL == pWdaParams)
5239 {
5240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 VOS_ASSERT(0) ;
5243 return ;
5244 }
5245 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5246 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 if( NULL == pAddBAReqParams )
5248 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005250 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005251 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5253 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 return ;
5255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5257 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 /*
5259 * if WDA in update TL state, update TL with BA session parama and send
5260 * another request to HAL(/WDI) (ADD_BA_REQ)
5261 */
5262
5263 if((VOS_STATUS_SUCCESS ==
5264 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5265 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5266 {
5267 /* Update TL with BA info received from HAL/WDI */
5268 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5269 wdiAddBaSession->usBaSessionID,
5270 wdiAddBaSession->ucSTAIdx,
5271 wdiAddBaSession->ucBaTID,
5272 wdiAddBaSession->ucBaBufferSize,
5273 wdiAddBaSession->ucWinSize,
5274 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5276 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5277 }
5278 else
5279 {
5280 pAddBAReqParams->status =
5281 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5282
5283 /* Setting Flag to indicate that Set BA is success */
5284 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5285 {
5286 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5287 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5288 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5289 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005290 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005292 /*Reset the WDA state to READY */
5293 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005294 return ;
5295}
5296
Jeff Johnson295189b2012-06-20 16:38:30 -07005297/*
5298 * FUNCTION: WDA_ProcessAddBASessionReq
5299 * Request to WDI to Update the ADDBA REQ params.
5300 */
5301VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5302 tAddBAParams *pAddBAReqParams)
5303{
5304 WDI_Status status = WDI_STATUS_SUCCESS ;
5305 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5306 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5307 sizeof(WDI_AddBASessionReqParamsType)) ;
5308 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005310 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 if(NULL == wdiAddBASessionReqParam)
5312 {
5313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005314 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005315 VOS_ASSERT(0);
5316 return VOS_STATUS_E_NOMEM;
5317 }
5318 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5319 if(NULL == pWdaParams)
5320 {
5321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005322 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005323 VOS_ASSERT(0);
5324 vos_mem_free(wdiAddBASessionReqParam);
5325 return VOS_STATUS_E_NOMEM;
5326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 /*
5328 * Populate ADD BA parameters and pass these paarmeters to WDI.
5329 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5330 * the state to track if these is BA recipient case or BA initiator
5331 * case.
5332 */
5333 do
5334 {
5335 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5336 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5337 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5338 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5339 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5340 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5341 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005342 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5344 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5345 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5346 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5347 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 /* check the BA direction and update state accordingly */
5349 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5350 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5351 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5352
5353 }while(0) ;
5354 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 pWdaParams->pWdaContext = pWDA;
5356 /* Store ADD BA pointer, as this will be used for response */
5357 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5358 /* store Params pass it to WDI */
5359 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5361 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 if(IS_WDI_STATUS_FAILURE(status))
5363 {
5364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005365 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5367 "Send ADD BA failure response to PE\n");
5368 pAddBAReqParams->status =
5369 CONVERT_WDI2SIR_STATUS(status) ;
5370 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 vos_mem_free(pWdaParams);
5373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005375}
Jeff Johnson295189b2012-06-20 16:38:30 -07005376/*
5377 * FUNCTION: WDA_DelBANotifyTL
5378 * send DEL BA IND to TL
5379 */
5380void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5381 tDelBAParams *pDelBAReqParams)
5382{
5383 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5384 //tSirMsgQ msg;
5385 vos_msg_t vosMsg;
5386 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 if(NULL == pDelBAInd)
5388 {
5389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 VOS_ASSERT(0) ;
5392 return;
5393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5395 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5396 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5397 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005398
Jeff Johnson295189b2012-06-20 16:38:30 -07005399
5400 vosMsg.type = WDA_DELETEBA_IND;
5401 vosMsg.bodyptr = pDelBAInd;
5402 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5403 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5404 {
5405 vosStatus = VOS_STATUS_E_BADMSG;
5406 }
5407}
Jeff Johnson295189b2012-06-20 16:38:30 -07005408/*
5409 * FUNCTION: WDA_DelBAReqCallback
5410 * send DEL BA RSP back to PE
5411 */
5412void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5413{
5414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5415 tWDA_CbContext *pWDA;
5416 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005418 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 if(NULL == pWdaParams)
5420 {
5421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005422 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005423 VOS_ASSERT(0) ;
5424 return ;
5425 }
5426 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5427 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 /* Notify TL about DEL BA in case of recipinet */
5429 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5430 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5431 {
5432 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005434 /*
5435 * No respone required for WDA_DELBA_IND so just free the request
5436 * param here
5437 */
5438 vos_mem_free(pDelBAReqParams);
5439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5440 vos_mem_free(pWdaParams);
5441 return ;
5442}
5443
Jeff Johnson295189b2012-06-20 16:38:30 -07005444/*
5445 * FUNCTION: WDA_ProcessDelBAReq
5446 * Request to WDI to Update the DELBA REQ params.
5447 */
5448VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5449 tDelBAParams *pDelBAReqParams)
5450{
5451 WDI_Status status = WDI_STATUS_SUCCESS ;
5452 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5453 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5454 sizeof(WDI_DelBAReqParamsType)) ;
5455 tWDA_ReqParams *pWdaParams ;
5456 tANI_U16 staIdx = 0;
5457 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005459 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 if(NULL == wdiDelBAReqParam)
5461 {
5462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005463 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 VOS_ASSERT(0);
5465 return VOS_STATUS_E_NOMEM;
5466 }
5467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5468 if(NULL == pWdaParams)
5469 {
5470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005472 VOS_ASSERT(0);
5473 vos_mem_free(wdiDelBAReqParam);
5474 return VOS_STATUS_E_NOMEM;
5475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5477 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5478 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5479 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 pWdaParams->pWdaContext = pWDA;
5481 /* Store DEL BA pointer, as this will be used for response */
5482 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005483 /* store Params pass it to WDI */
5484 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5486 * maintained in WDA, so that WDA can retry for another BA session
5487 */
5488 staIdx = pDelBAReqParams->staIdx;
5489 tid = pDelBAReqParams->baTID;
5490 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 status = WDI_DelBAReq(wdiDelBAReqParam,
5492 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005493 if(IS_WDI_STATUS_FAILURE(status))
5494 {
5495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5496 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5498 vos_mem_free(pWdaParams->wdaMsgParam);
5499 vos_mem_free(pWdaParams);
5500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005502}
Jeff Johnson295189b2012-06-20 16:38:30 -07005503/*
5504 * FUNCTION: WDA_AddTSReqCallback
5505 * send ADD TS RSP back to PE
5506 */
5507void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5508{
5509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5510 tWDA_CbContext *pWDA;
5511 tAddTsParams *pAddTsReqParams;
5512
5513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005514 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005515 if(NULL == pWdaParams)
5516 {
5517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005518 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 VOS_ASSERT(0) ;
5520 return ;
5521 }
5522 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5523 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5525 vos_mem_free(pWdaParams);
5526
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005527 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 return ;
5530}
5531
Jeff Johnson295189b2012-06-20 16:38:30 -07005532/*
5533 * FUNCTION: WDA_ProcessAddTSReq
5534 * Request to WDI to Update the ADD TS REQ params.
5535 */
5536VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5537 tAddTsParams *pAddTsReqParams)
5538{
5539 WDI_Status status = WDI_STATUS_SUCCESS ;
5540 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5541 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5542 sizeof(WDI_AddTSReqParamsType)) ;
5543 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005545 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 if(NULL == wdiAddTSReqParam)
5547 {
5548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005550 VOS_ASSERT(0);
5551 return VOS_STATUS_E_NOMEM;
5552 }
5553 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5554 if(NULL == pWdaParams)
5555 {
5556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 VOS_ASSERT(0);
5559 vos_mem_free(wdiAddTSReqParam);
5560 return VOS_STATUS_E_NOMEM;
5561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5563 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005564 //TS IE
5565 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5566 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5567 pAddTsReqParams->tspec.length;
5568
5569 //TS IE : TS INFO : TRAFFIC
5570 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5571 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5572 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5573 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5574 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5575 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5576 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5577 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5578 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5579 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5580 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5581 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5582 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5583 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5584 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5585 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5586
5587 //TS IE : TS INFO : SCHEDULE
5588 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5589 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5590 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5591 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005592 //TS IE
5593 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5594 pAddTsReqParams->tspec.nomMsduSz;
5595 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5596 pAddTsReqParams->tspec.maxMsduSz;
5597 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5598 pAddTsReqParams->tspec.minSvcInterval;
5599 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5600 pAddTsReqParams->tspec.maxSvcInterval;
5601 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5602 pAddTsReqParams->tspec.inactInterval;
5603 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5604 pAddTsReqParams->tspec.suspendInterval;
5605 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5606 pAddTsReqParams->tspec.svcStartTime;
5607 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5608 pAddTsReqParams->tspec.minDataRate;
5609 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5610 pAddTsReqParams->tspec.meanDataRate;
5611 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5612 pAddTsReqParams->tspec.peakDataRate;
5613 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5614 pAddTsReqParams->tspec.maxBurstSz;
5615 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5616 pAddTsReqParams->tspec.delayBound;
5617 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5618 pAddTsReqParams->tspec.minPhyRate;
5619 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5620 pAddTsReqParams->tspec.surplusBw;
5621 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5622 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005623 /* TODO: tAddTsParams doesn't have the following fields */
5624#if 0
5625 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5626 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5627 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5628 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5629#endif
5630 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5631
5632 pWdaParams->pWdaContext = pWDA;
5633 /* Store ADD TS pointer, as this will be used for response */
5634 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 /* store Params pass it to WDI */
5636 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 status = WDI_AddTSReq(wdiAddTSReqParam,
5638 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005639 if(IS_WDI_STATUS_FAILURE(status))
5640 {
5641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5642 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5644 vos_mem_free(pWdaParams);
5645 pAddTsReqParams->status = eSIR_FAILURE ;
5646 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005649}
5650
Jeff Johnson295189b2012-06-20 16:38:30 -07005651/*
5652 * FUNCTION: WDA_DelTSReqCallback
5653 * send DEL TS RSP back to PE
5654 */
5655void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5656{
5657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005659 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005660 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5661 vos_mem_free(pWdaParams->wdaMsgParam) ;
5662 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 /*
5664 * No respone required for WDA_DEL_TS_REQ so just free the request
5665 * param here
5666 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005667 return ;
5668}
5669
Jeff Johnson295189b2012-06-20 16:38:30 -07005670/*
5671 * FUNCTION: WDA_ProcessDelTSReq
5672 * Request to WDI to Update the DELTS REQ params.
5673 */
5674VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5675 tDelTsParams *pDelTSReqParams)
5676{
5677 WDI_Status status = WDI_STATUS_SUCCESS ;
5678 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5679 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5680 sizeof(WDI_DelTSReqParamsType)) ;
5681 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005683 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 if(NULL == wdiDelTSReqParam)
5685 {
5686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005688 VOS_ASSERT(0);
5689 return VOS_STATUS_E_NOMEM;
5690 }
5691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5692 if(NULL == pWdaParams)
5693 {
5694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005696 VOS_ASSERT(0);
5697 vos_mem_free(wdiDelTSReqParam);
5698 return VOS_STATUS_E_NOMEM;
5699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5701 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5702 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5703 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5704 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 pWdaParams->pWdaContext = pWDA;
5706 /* Store DEL TS pointer, as this will be used for response */
5707 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005708 /* store Params pass it to WDI */
5709 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005710 status = WDI_DelTSReq(wdiDelTSReqParam,
5711 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005712 if(IS_WDI_STATUS_FAILURE(status))
5713 {
5714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5715 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5717 vos_mem_free(pWdaParams->wdaMsgParam);
5718 vos_mem_free(pWdaParams);
5719 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005720 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005721}
Jeff Johnson295189b2012-06-20 16:38:30 -07005722/*
5723 * FUNCTION: WDA_UpdateBeaconParamsCallback
5724 * Free the memory. No need to send any response to PE in this case
5725 */
5726void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5727{
5728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 if(NULL == pWdaParams)
5732 {
5733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005734 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005735 VOS_ASSERT(0) ;
5736 return ;
5737 }
5738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5739 vos_mem_free(pWdaParams->wdaMsgParam) ;
5740 vos_mem_free(pWdaParams);
5741 /*
5742 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5743 * param here
5744 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005745 return ;
5746}
Jeff Johnson295189b2012-06-20 16:38:30 -07005747/*
5748 * FUNCTION: WDA_ProcessUpdateBeaconParams
5749 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5750 */
5751VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5752 tUpdateBeaconParams *pUpdateBeaconParams)
5753{
5754 WDI_Status status = WDI_STATUS_SUCCESS ;
5755 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5756 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5757 sizeof(WDI_UpdateBeaconParamsType)) ;
5758 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005760 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 if(NULL == wdiUpdateBeaconParams)
5762 {
5763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005764 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 VOS_ASSERT(0);
5766 return VOS_STATUS_E_NOMEM;
5767 }
5768 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5769 if(NULL == pWdaParams)
5770 {
5771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 VOS_ASSERT(0);
5774 vos_mem_free(wdiUpdateBeaconParams);
5775 return VOS_STATUS_E_NOMEM;
5776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005777 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5778 pUpdateBeaconParams->bssIdx;
5779 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5780 pUpdateBeaconParams->fShortPreamble;
5781 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5782 pUpdateBeaconParams->fShortSlotTime;
5783 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5784 pUpdateBeaconParams->beaconInterval;
5785 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5786 pUpdateBeaconParams->llaCoexist;
5787 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5788 pUpdateBeaconParams->llbCoexist;
5789 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5790 pUpdateBeaconParams->llgCoexist;
5791 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5792 pUpdateBeaconParams->ht20MhzCoexist;
5793 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5794 pUpdateBeaconParams->llnNonGFCoexist;
5795 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5796 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5797 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5798 pUpdateBeaconParams->fRIFSMode;
5799 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5800 pUpdateBeaconParams->paramChangeBitmap;
5801 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5802
5803 pWdaParams->pWdaContext = pWDA;
5804 /* Store UpdateBeacon Req pointer, as this will be used for response */
5805 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005806 /* store Params pass it to WDI */
5807 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005808 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5809 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5810 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 if(IS_WDI_STATUS_FAILURE(status))
5812 {
5813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5814 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5816 vos_mem_free(pWdaParams->wdaMsgParam);
5817 vos_mem_free(pWdaParams);
5818 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005819 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005820}
Jeff Johnson295189b2012-06-20 16:38:30 -07005821#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005822/*
5823 * FUNCTION: WDA_TSMStatsReqCallback
5824 * send TSM Stats RSP back to PE
5825 */
5826void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5827{
5828 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5829 tWDA_CbContext *pWDA = NULL;
5830 tTSMStats *pTsmRspParams = NULL;
5831
5832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005833 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005834 if(NULL == pWdaParams)
5835 {
5836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005837 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005838 VOS_ASSERT(0) ;
5839 return ;
5840 }
5841 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5842 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005843 if( NULL == pTsmRspParams )
5844 {
5845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005846 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005847 VOS_ASSERT( 0 );
5848 return ;
5849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5851 vos_mem_free(pWdaParams);
5852
5853 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5854 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5855 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5856 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5857 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5858 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5859 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5860 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5861 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5862 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005863 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 return ;
5865}
5866
5867
Jeff Johnson295189b2012-06-20 16:38:30 -07005868/*
5869 * FUNCTION: WDA_ProcessTsmStatsReq
5870 * Request to WDI to get the TSM Stats params.
5871 */
5872VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5873 tTSMStats *pTsmStats)
5874{
5875 WDI_Status status = WDI_STATUS_SUCCESS ;
5876 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5877 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005879 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5881 sizeof(WDI_TSMStatsReqParamsType));
5882 if(NULL == wdiTSMReqParam)
5883 {
5884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005885 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005886 VOS_ASSERT(0);
5887 return VOS_STATUS_E_NOMEM;
5888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5890 if(NULL == pWdaParams)
5891 {
5892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005893 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005894 VOS_ASSERT(0);
5895 vos_mem_free(wdiTSMReqParam);
5896 return VOS_STATUS_E_NOMEM;
5897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005898 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5899 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5900 pTsmStats->bssId,
5901 sizeof(wpt_macAddr));
5902 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5903
5904 pWdaParams->pWdaContext = pWDA;
5905 /* Store TSM Stats pointer, as this will be used for response */
5906 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 /* store Params pass it to WDI */
5908 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 status = WDI_TSMStatsReq(wdiTSMReqParam,
5910 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 if(IS_WDI_STATUS_FAILURE(status))
5912 {
5913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5914 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5916 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005917 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 return CONVERT_WDI2VOS_STATUS(status) ;
5920}
5921#endif
5922/*
5923 * FUNCTION: WDA_SendBeaconParamsCallback
5924 * No need to send any response to PE in this case
5925 */
5926void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5927{
5928
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005930 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 return ;
5932}
Jeff Johnson295189b2012-06-20 16:38:30 -07005933/*
5934 * FUNCTION: WDA_ProcessSendBeacon
5935 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5936 * start beacon trasmission
5937 */
5938VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5939 tSendbeaconParams *pSendbeaconParams)
5940{
5941 WDI_Status status = WDI_STATUS_SUCCESS ;
5942 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005944 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5946 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5947 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5948 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5950 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05305951 /* p2pIeOffset should be atleast greater than timIeOffset */
5952 if ((pSendbeaconParams->p2pIeOffset != 0) &&
5953 (pSendbeaconParams->p2pIeOffset <
5954 pSendbeaconParams->timIeOffset))
5955 {
5956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5957 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
5958 VOS_ASSERT( 0 );
5959 return WDI_STATUS_E_FAILURE;
5960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5962 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 /* Copy the beacon template to local buffer */
5964 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5965 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5966 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5967
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5969 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 if(IS_WDI_STATUS_FAILURE(status))
5971 {
5972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5973 "Failure in SEND BEACON REQ Params WDI API" );
5974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005975 vos_mem_free(pSendbeaconParams);
5976 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005977}
Jeff Johnson295189b2012-06-20 16:38:30 -07005978/*
5979 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5980 * No need to send any response to PE in this case
5981 */
5982void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5983{
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005985 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 return ;
5987}
5988
Jeff Johnson295189b2012-06-20 16:38:30 -07005989/*
5990 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5991 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5992 * send probe response
5993 */
5994VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5995 tSendProbeRespParams *pSendProbeRspParams)
5996{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005997 WDI_Status status = WDI_STATUS_SUCCESS;
5998 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5999 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006001 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006002
6003 if (!wdiSendProbeRspParam)
6004 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6005
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006007 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006008 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006009 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006011 /* Copy the Probe Response template to local buffer */
6012 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006013 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 pSendProbeRspParams->pProbeRespTemplate,
6015 pSendProbeRspParams->probeRespTemplateLen);
6016 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006017 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6019 WDI_PROBE_REQ_BITMAP_IE_LEN);
6020
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006021 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006022
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006023 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
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 SEND Probe RSP Params WDI API" );
6029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006031 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006033}
Jeff Johnson295189b2012-06-20 16:38:30 -07006034#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6035/*
6036 * FUNCTION: WDA_SetMaxTxPowerCallBack
6037 * send the response to PE with power value received from WDI
6038 */
6039void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6040 void* pUserData)
6041{
6042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6043 tWDA_CbContext *pWDA = NULL;
6044 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6045
6046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006047 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006048 if(NULL == pWdaParams)
6049 {
6050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006051 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 VOS_ASSERT(0) ;
6053 return ;
6054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006055 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6056 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006057 if( NULL == pMaxTxPowerParams )
6058 {
6059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006060 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006061 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6063 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 return ;
6065 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006066
Jeff Johnson295189b2012-06-20 16:38:30 -07006067
6068 /*need to free memory for the pointers used in the
6069 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6071 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006073
Jeff Johnson295189b2012-06-20 16:38:30 -07006074
6075 /* send response to UMAC*/
6076 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6077
6078 return;
6079}
Jeff Johnson295189b2012-06-20 16:38:30 -07006080/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006081 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 * Request to WDI to send set Max Tx Power Request
6083 */
6084 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6085 tMaxTxPowerParams *MaxTxPowerParams)
6086{
6087 WDI_Status status = WDI_STATUS_SUCCESS;
6088 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6089 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006090
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006092 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006093
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6095 sizeof(WDI_SetMaxTxPowerParamsType));
6096 if(NULL == wdiSetMaxTxPowerParams)
6097 {
6098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 VOS_ASSERT(0);
6101 return VOS_STATUS_E_NOMEM;
6102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6104 if(NULL == pWdaParams)
6105 {
6106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006108 vos_mem_free(wdiSetMaxTxPowerParams);
6109 VOS_ASSERT(0);
6110 return VOS_STATUS_E_NOMEM;
6111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 /* Copy.Max.Tx.Power Params to WDI structure */
6113 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6114 MaxTxPowerParams->bssId,
6115 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006116 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6117 MaxTxPowerParams->selfStaMacAddr,
6118 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6120 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006121 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 pWdaParams->pWdaContext = pWDA;
6123 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 /* store Params pass it to WDI */
6125 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006126 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6127 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006128 if(IS_WDI_STATUS_FAILURE(status))
6129 {
6130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6131 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6133 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006134 /* send response to UMAC*/
6135 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 }
6137 return CONVERT_WDI2VOS_STATUS(status);
6138
6139}
Jeff Johnson295189b2012-06-20 16:38:30 -07006140#endif
schang86c22c42013-03-13 18:41:24 -07006141
6142/*
6143 * FUNCTION: WDA_SetTxPowerCallBack
6144 * send the response to PE with power value received from WDI
6145 */
6146void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6147 void* pUserData)
6148{
6149 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6150 tWDA_CbContext *pWDA = NULL;
6151 tSirSetTxPowerReq *pTxPowerParams = NULL;
6152
6153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6154 "<------ %s ", __func__);
6155 if(NULL == pWdaParams)
6156 {
6157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6158 "%s: pWdaParams received NULL", __func__);
6159 VOS_ASSERT(0) ;
6160 return ;
6161 }
6162 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6163 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6164 if(NULL == pTxPowerParams)
6165 {
6166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6167 "%s: pTxPowerParams received NULL " ,__func__);
6168 VOS_ASSERT(0);
6169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6170 vos_mem_free(pWdaParams);
6171 return ;
6172 }
6173
6174 /*need to free memory for the pointers used in the
6175 WDA Process.Set Max Tx Power Req function*/
6176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6177 vos_mem_free(pWdaParams);
6178
6179 /* send response to UMAC*/
6180 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6181 return;
6182}
6183
6184/*
6185 * FUNCTION: WDA_ProcessSetTxPowerReq
6186 * Request to WDI to send set Tx Power Request
6187 */
6188 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6189 tSirSetTxPowerReq *txPowerParams)
6190{
6191 WDI_Status status = WDI_STATUS_SUCCESS;
6192 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6193 tWDA_ReqParams *pWdaParams = NULL;
6194
6195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6196 "------> %s ", __func__);
6197
6198 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6199 sizeof(WDI_SetTxPowerParamsType));
6200 if(NULL == wdiSetTxPowerParams)
6201 {
6202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6203 "%s: VOS MEM Alloc Failure", __func__);
6204 VOS_ASSERT(0);
6205 return VOS_STATUS_E_NOMEM;
6206 }
6207 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6208 if(NULL == pWdaParams)
6209 {
6210 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6211 "%s: VOS MEM Alloc Failure", __func__);
6212 vos_mem_free(wdiSetTxPowerParams);
6213 VOS_ASSERT(0);
6214 return VOS_STATUS_E_NOMEM;
6215 }
6216 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6217 txPowerParams->bssIdx;
6218 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6219 txPowerParams->mwPower;
6220 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6221 pWdaParams->pWdaContext = pWDA;
6222 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6223 /* store Params pass it to WDI */
6224 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6225 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6226 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6227 if(IS_WDI_STATUS_FAILURE(status))
6228 {
6229 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6230 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6232 vos_mem_free(pWdaParams);
6233 /* send response to UMAC*/
6234 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6235 }
6236 return CONVERT_WDI2VOS_STATUS(status);
6237}
6238
Jeff Johnson295189b2012-06-20 16:38:30 -07006239/*
6240 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6241 * Free the memory. No need to send any response to PE in this case
6242 */
6243void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6244{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006245 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6246
Jeff Johnson295189b2012-06-20 16:38:30 -07006247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006248 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006249
6250 if(NULL == pWdaParams)
6251 {
6252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006253 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006254 VOS_ASSERT(0) ;
6255 return ;
6256 }
6257
6258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6259 vos_mem_free(pWdaParams->wdaMsgParam) ;
6260 vos_mem_free(pWdaParams);
6261
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 /*
6263 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6264 * so just free the request param here
6265 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 return ;
6267}
6268
Jeff Johnson295189b2012-06-20 16:38:30 -07006269/*
6270 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6271 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6272 */
6273VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6274 tP2pPsParams *pP2pPsConfigParams)
6275{
6276 WDI_Status status = WDI_STATUS_SUCCESS ;
6277 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6278 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6279 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006280 tWDA_ReqParams *pWdaParams = NULL;
6281
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006283 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 if(NULL == wdiSetP2PGONOAReqParam)
6285 {
6286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006288 VOS_ASSERT(0);
6289 return VOS_STATUS_E_NOMEM;
6290 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006291
6292 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6293 if(NULL == pWdaParams)
6294 {
6295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006296 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006297 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006298 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006299 VOS_ASSERT(0);
6300 return VOS_STATUS_E_NOMEM;
6301 }
6302
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6304 pP2pPsConfigParams->opp_ps;
6305 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6306 pP2pPsConfigParams->ctWindow;
6307 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6308 pP2pPsConfigParams->count;
6309 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6310 pP2pPsConfigParams->duration;
6311 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6312 pP2pPsConfigParams->interval;
6313 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6314 pP2pPsConfigParams->single_noa_duration;
6315 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6316 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006317
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6319 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006320 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6321
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006323 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6324 pWdaParams->pWdaContext = pWDA;
6325
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006327 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6328
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 if(IS_WDI_STATUS_FAILURE(status))
6330 {
6331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6332 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6334 vos_mem_free(pWdaParams->wdaMsgParam);
6335 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006337 return CONVERT_WDI2VOS_STATUS(status);
6338
Jeff Johnson295189b2012-06-20 16:38:30 -07006339}
Jeff Johnson295189b2012-06-20 16:38:30 -07006340#ifdef WLAN_FEATURE_VOWIFI_11R
6341/*
6342 * FUNCTION: WDA_AggrAddTSReqCallback
6343 * send ADD AGGREGATED TS RSP back to PE
6344 */
6345void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6346{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006347 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6348 tWDA_CbContext *pWDA;
6349 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006350 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006352 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006353 if(NULL == pWdaParams)
6354 {
6355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006356 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006357 VOS_ASSERT(0) ;
6358 return ;
6359 }
6360
6361 pWDA = pWdaParams->pWdaContext;
6362 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006363
6364 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6365 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006366 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006369
6370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6371 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006372 return ;
6373}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006374/*
6375 * FUNCTION: WDA_ProcessAddTSReq
6376 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6377 */
6378VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6379 tAggrAddTsParams *pAggrAddTsReqParams)
6380{
6381 WDI_Status status = WDI_STATUS_SUCCESS ;
6382 int i;
6383 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006384 tWDA_ReqParams *pWdaParams = NULL;
6385
6386
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006388 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6390 sizeof(WDI_AggrAddTSReqParamsType)) ;
6391 if(NULL == wdiAggrAddTSReqParam)
6392 {
6393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006395 VOS_ASSERT(0);
6396 return VOS_STATUS_E_NOMEM;
6397 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006398
6399
6400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6401 if(NULL == pWdaParams)
6402 {
6403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006404 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006405 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006406 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006407 VOS_ASSERT(0);
6408 return VOS_STATUS_E_NOMEM;
6409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6411 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6412 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006413 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6414 {
6415 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6416 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6417 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6419 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6420 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6421 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6422 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6423 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6424 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6425 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6426 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6427 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6428 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6429 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6430 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6431 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6432 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6433 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6435 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6437 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6438 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6439 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6440 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6441 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6442 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6443 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6444 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6445 pAggrAddTsReqParams->tspec[i].inactInterval;
6446 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6447 pAggrAddTsReqParams->tspec[i].suspendInterval;
6448 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6449 pAggrAddTsReqParams->tspec[i].svcStartTime;
6450 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6451 pAggrAddTsReqParams->tspec[i].minDataRate;
6452 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6453 pAggrAddTsReqParams->tspec[i].meanDataRate;
6454 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6455 pAggrAddTsReqParams->tspec[i].peakDataRate;
6456 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6457 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6458 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6459 pAggrAddTsReqParams->tspec[i].delayBound;
6460 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6461 pAggrAddTsReqParams->tspec[i].minPhyRate;
6462 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6463 pAggrAddTsReqParams->tspec[i].surplusBw;
6464 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6465 pAggrAddTsReqParams->tspec[i].mediumTime;
6466 }
6467
6468 /* TODO: tAggrAddTsParams doesn't have the following fields */
6469#if 0
6470 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6471 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6472 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6473 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6474#endif
6475 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6476
6477 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006478 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006479 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006480 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6481
6482 pWdaParams->pWdaContext = pWDA;
6483
Jeff Johnson295189b2012-06-20 16:38:30 -07006484 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006485 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6486
Jeff Johnson295189b2012-06-20 16:38:30 -07006487 if(IS_WDI_STATUS_FAILURE(status))
6488 {
6489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6490 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006491 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6492 vos_mem_free(pWdaParams);
6493
6494 /* send the failure response back to PE*/
6495 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6496 {
6497 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6498 }
6499
6500 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6501 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006503 return CONVERT_WDI2VOS_STATUS(status) ;
6504}
6505#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006506/*
6507 * FUNCTION: WDA_EnterImpsReqCallback
6508 * send Enter IMPS RSP back to PE
6509 */
6510void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6511{
6512 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006514 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006515 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006516 return ;
6517}
Jeff Johnson295189b2012-06-20 16:38:30 -07006518/*
6519 * FUNCTION: WDA_ProcessEnterImpsReq
6520 * Request to WDI to Enter IMPS power state.
6521 */
6522VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6523{
6524 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006526 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006528 if(IS_WDI_STATUS_FAILURE(status))
6529 {
6530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6531 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006532 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 return CONVERT_WDI2VOS_STATUS(status) ;
6535}
Jeff Johnson295189b2012-06-20 16:38:30 -07006536/*
6537 * FUNCTION: WDA_ExitImpsReqCallback
6538 * send Exit IMPS RSP back to PE
6539 */
6540void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6541{
6542 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006544 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006545 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 return ;
6547}
Jeff Johnson295189b2012-06-20 16:38:30 -07006548/*
6549 * FUNCTION: WDA_ProcessExitImpsReq
6550 * Request to WDI to Exit IMPS power state.
6551 */
6552VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6553{
6554 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006556 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006558 if(IS_WDI_STATUS_FAILURE(status))
6559 {
6560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6561 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006562 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 return CONVERT_WDI2VOS_STATUS(status) ;
6565}
Jeff Johnson295189b2012-06-20 16:38:30 -07006566/*
6567 * FUNCTION: WDA_EnterBmpsReqCallback
6568 * send Enter BMPS RSP back to PE
6569 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006570void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006571{
6572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6573 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006574 tEnterBmpsParams *pEnterBmpsRspParams;
6575
Jeff Johnson295189b2012-06-20 16:38:30 -07006576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006577 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006578 if(NULL == pWdaParams)
6579 {
6580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006581 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006582 VOS_ASSERT(0) ;
6583 return ;
6584 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006585
6586 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6587 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6588
6589 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006590 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006591
6592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006593 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006594 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6595
Jeff Johnson295189b2012-06-20 16:38:30 -07006596 return ;
6597}
Jeff Johnson295189b2012-06-20 16:38:30 -07006598/*
6599 * FUNCTION: WDA_ProcessEnterBmpsReq
6600 * Request to WDI to Enter BMPS power state.
6601 */
6602VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6603 tEnterBmpsParams *pEnterBmpsReqParams)
6604{
6605 WDI_Status status = WDI_STATUS_SUCCESS;
6606 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6607 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006609 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006610 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6611 {
6612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006613 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006614 VOS_ASSERT(0);
6615 return VOS_STATUS_E_FAILURE;
6616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006617 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6618 if (NULL == wdiEnterBmpsReqParams)
6619 {
6620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006622 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006623 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6624 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006625 return VOS_STATUS_E_NOMEM;
6626 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006627 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6628 if (NULL == pWdaParams)
6629 {
6630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 VOS_ASSERT(0);
6633 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006634 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6635 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 return VOS_STATUS_E_NOMEM;
6637 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006638 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6639 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6640 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6641 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006642 // For CCX and 11R Roaming
6643 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6644 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6645 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6646 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006647
Jeff Johnson295189b2012-06-20 16:38:30 -07006648 /* Store param pointer as passed in by caller */
6649 /* store Params pass it to WDI */
6650 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006651 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006652 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006653 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6654 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006655 if (IS_WDI_STATUS_FAILURE(status))
6656 {
6657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6658 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006660 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006661 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006662 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006663 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006664 return CONVERT_WDI2VOS_STATUS(status);
6665}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006666
6667
6668static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6669 WDI_Status wdiStatus,
6670 tExitBmpsParams *pExitBmpsReqParams)
6671{
6672 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6673
6674 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6675}
6676
6677
Jeff Johnson295189b2012-06-20 16:38:30 -07006678/*
6679 * FUNCTION: WDA_ExitBmpsReqCallback
6680 * send Exit BMPS RSP back to PE
6681 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006682void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006683{
6684 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6685 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006686 tExitBmpsParams *pExitBmpsRspParams;
6687
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006689 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 if(NULL == pWdaParams)
6691 {
6692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006693 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006694 VOS_ASSERT(0) ;
6695 return ;
6696 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006697
6698 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6699 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6700
6701 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006702 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006703
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6705 vos_mem_free(pWdaParams) ;
6706
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006707 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006708 return ;
6709}
Jeff Johnson295189b2012-06-20 16:38:30 -07006710/*
6711 * FUNCTION: WDA_ProcessExitBmpsReq
6712 * Request to WDI to Exit BMPS power state.
6713 */
6714VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6715 tExitBmpsParams *pExitBmpsReqParams)
6716{
6717 WDI_Status status = WDI_STATUS_SUCCESS ;
6718 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6719 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6720 sizeof(WDI_ExitBmpsReqParamsType)) ;
6721 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006723 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006724 if(NULL == wdiExitBmpsReqParams)
6725 {
6726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006727 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006728 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006729 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006730 return VOS_STATUS_E_NOMEM;
6731 }
6732 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6733 if(NULL == pWdaParams)
6734 {
6735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006736 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006737 VOS_ASSERT(0);
6738 vos_mem_free(wdiExitBmpsReqParams);
6739 return VOS_STATUS_E_NOMEM;
6740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006742
6743 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6744
Jeff Johnson295189b2012-06-20 16:38:30 -07006745 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6746
6747 /* Store param pointer as passed in by caller */
6748 /* store Params pass it to WDI */
6749 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6750 pWdaParams->pWdaContext = pWDA;
6751 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6753 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 if(IS_WDI_STATUS_FAILURE(status))
6755 {
6756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6757 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6759 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006760 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 return CONVERT_WDI2VOS_STATUS(status) ;
6763}
Jeff Johnson295189b2012-06-20 16:38:30 -07006764/*
6765 * FUNCTION: WDA_EnterUapsdReqCallback
6766 * send Enter UAPSD RSP back to PE
6767 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006768void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006769{
6770 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6771 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006772 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006774 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 if(NULL == pWdaParams)
6776 {
6777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006778 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 VOS_ASSERT(0) ;
6780 return ;
6781 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006782
6783 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6784 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6785
6786 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006787 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006788
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6790 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006791 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 return ;
6793}
Jeff Johnson295189b2012-06-20 16:38:30 -07006794/*
6795 * FUNCTION: WDA_ProcessEnterUapsdReq
6796 * Request to WDI to Enter UAPSD power state.
6797 */
6798VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6799 tUapsdParams *pEnterUapsdReqParams)
6800{
6801 WDI_Status status = WDI_STATUS_SUCCESS ;
6802 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6803 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6804 sizeof(WDI_EnterUapsdReqParamsType)) ;
6805 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006807 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 if(NULL == wdiEnterUapsdReqParams)
6809 {
6810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006811 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 VOS_ASSERT(0);
6813 return VOS_STATUS_E_NOMEM;
6814 }
6815 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6816 if(NULL == pWdaParams)
6817 {
6818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006819 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006820 VOS_ASSERT(0);
6821 vos_mem_free(wdiEnterUapsdReqParams);
6822 return VOS_STATUS_E_NOMEM;
6823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6825 pEnterUapsdReqParams->beDeliveryEnabled;
6826 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6827 pEnterUapsdReqParams->beTriggerEnabled;
6828 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6829 pEnterUapsdReqParams->bkDeliveryEnabled;
6830 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6831 pEnterUapsdReqParams->bkTriggerEnabled;
6832 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6833 pEnterUapsdReqParams->viDeliveryEnabled;
6834 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6835 pEnterUapsdReqParams->viTriggerEnabled;
6836 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6837 pEnterUapsdReqParams->voDeliveryEnabled;
6838 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6839 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006840 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006841
6842 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6843
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 /* Store param pointer as passed in by caller */
6845 /* store Params pass it to WDI */
6846 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6847 pWdaParams->pWdaContext = pWDA;
6848 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6850 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006851 if(IS_WDI_STATUS_FAILURE(status))
6852 {
6853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6854 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6855 vos_mem_free(pWdaParams->wdaMsgParam) ;
6856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6857 vos_mem_free(pWdaParams) ;
6858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 return CONVERT_WDI2VOS_STATUS(status) ;
6860}
Jeff Johnson295189b2012-06-20 16:38:30 -07006861/*
6862 * FUNCTION: WDA_ExitUapsdReqCallback
6863 * send Exit UAPSD RSP back to PE
6864 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006865void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006866{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006867
6868 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6869 tWDA_CbContext *pWDA;
6870 tExitUapsdParams *pExitUapsdRspParams;
6871
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006873 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006874 if(NULL == pWdaParams)
6875 {
6876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006877 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006878 VOS_ASSERT(0);
6879 return;
6880 }
6881
6882 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6883 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6884
6885 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006886 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006887
6888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6889 vos_mem_free(pWdaParams) ;
6890
6891 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 return ;
6893}
Jeff Johnson295189b2012-06-20 16:38:30 -07006894/*
6895 * FUNCTION: WDA_ProcessExitUapsdReq
6896 * Request to WDI to Exit UAPSD power state.
6897 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006898VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6899 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006900{
6901 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006902 tWDA_ReqParams *pWdaParams ;
6903 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6904 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6905 sizeof(WDI_ExitUapsdReqParamsType)) ;
6906
Jeff Johnson295189b2012-06-20 16:38:30 -07006907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006908 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006909
6910 if(NULL == wdiExitUapsdReqParams)
6911 {
6912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006913 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006914 VOS_ASSERT(0);
6915 return VOS_STATUS_E_NOMEM;
6916 }
6917 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6918 if(NULL == pWdaParams)
6919 {
6920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006921 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006922 VOS_ASSERT(0);
6923 vos_mem_free(wdiExitUapsdReqParams);
6924 return VOS_STATUS_E_NOMEM;
6925 }
6926
6927 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6928 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6929
6930 /* Store param pointer as passed in by caller */
6931 /* store Params pass it to WDI */
6932 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6933 pWdaParams->pWdaContext = pWDA;
6934 pWdaParams->wdaMsgParam = pExitUapsdParams;
6935
6936 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 if(IS_WDI_STATUS_FAILURE(status))
6938 {
6939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6940 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006941 vos_mem_free(pWdaParams->wdaMsgParam) ;
6942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6943 vos_mem_free(pWdaParams) ;
6944
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 return CONVERT_WDI2VOS_STATUS(status) ;
6947}
6948
Jeff Johnson295189b2012-06-20 16:38:30 -07006949/*
6950 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6951 *
6952 */
6953void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6954{
6955 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006957 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006958 if(NULL == pWdaParams)
6959 {
6960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006961 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006962 VOS_ASSERT(0) ;
6963 return ;
6964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 if( pWdaParams != NULL )
6966 {
6967 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6968 {
6969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6970 }
6971 if( pWdaParams->wdaMsgParam != NULL )
6972 {
6973 vos_mem_free(pWdaParams->wdaMsgParam) ;
6974 }
6975 vos_mem_free(pWdaParams) ;
6976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006977 return ;
6978}
Jeff Johnson295189b2012-06-20 16:38:30 -07006979/*
6980 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6981 * Request to WDI to set the power save params at start.
6982 */
6983VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6984 tSirPowerSaveCfg *pPowerSaveCfg)
6985{
6986 WDI_Status status = WDI_STATUS_SUCCESS ;
6987 tHalCfg *tlvStruct = NULL ;
6988 tANI_U8 *tlvStructStart = NULL ;
6989 v_PVOID_t *configParam;
6990 tANI_U32 configParamSize;
6991 tANI_U32 *configDataValue;
6992 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6993 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006995 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6997 {
6998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006999 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007001 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007002 return VOS_STATUS_E_FAILURE;
7003 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007004 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7005 if (NULL == wdiPowerSaveCfg)
7006 {
7007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007008 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007009 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007010 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007011 return VOS_STATUS_E_NOMEM;
7012 }
7013 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7014 if(NULL == pWdaParams)
7015 {
7016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007017 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 VOS_ASSERT(0);
7019 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007020 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 return VOS_STATUS_E_NOMEM;
7022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7024 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 if(NULL == configParam)
7026 {
7027 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007028 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007029 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 vos_mem_free(pWdaParams);
7031 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007032 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007033 return VOS_STATUS_E_NOMEM;
7034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 vos_mem_set(configParam, configParamSize, 0);
7036 wdiPowerSaveCfg->pConfigBuffer = configParam;
7037 tlvStruct = (tHalCfg *)configParam;
7038 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7040 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7041 tlvStruct->length = sizeof(tANI_U32);
7042 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7043 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7045 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7047 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7048 tlvStruct->length = sizeof(tANI_U32);
7049 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7050 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7052 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7054 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7055 tlvStruct->length = sizeof(tANI_U32);
7056 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7057 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7059 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007060 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7061 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7062 tlvStruct->length = sizeof(tANI_U32);
7063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7064 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7066 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7068 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7069 tlvStruct->length = sizeof(tANI_U32);
7070 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7071 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7073 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007074 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7075 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7076 tlvStruct->length = sizeof(tANI_U32);
7077 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7078 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7080 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7082 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7083 tlvStruct->length = sizeof(tANI_U32);
7084 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7085 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007086 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7087 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7089 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7090 tlvStruct->length = sizeof(tANI_U32);
7091 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7092 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7093 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7094 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007095 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7096 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7097 tlvStruct->length = sizeof(tANI_U32);
7098 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7099 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7100 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7101 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7103 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7104 tlvStruct->length = sizeof(tANI_U32);
7105 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7106 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007107 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7108 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7110 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7111 tlvStruct->length = sizeof(tANI_U32);
7112 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7113 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007114 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7115 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007116 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007118 /* store Params pass it to WDI */
7119 pWdaParams->wdaMsgParam = configParam;
7120 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7121 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007122 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7123 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 if(IS_WDI_STATUS_FAILURE(status))
7125 {
7126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7127 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7128 vos_mem_free(pWdaParams->wdaMsgParam);
7129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7130 vos_mem_free(pWdaParams);
7131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 return CONVERT_WDI2VOS_STATUS(status);
7134}
Jeff Johnson295189b2012-06-20 16:38:30 -07007135/*
7136 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7137 *
7138 */
7139void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
7140{
7141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007143 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7145 vos_mem_free(pWdaParams);
7146
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 return ;
7148}
Jeff Johnson295189b2012-06-20 16:38:30 -07007149/*
7150 * FUNCTION: WDA_SetUapsdAcParamsReq
7151 * Request to WDI to set the UAPSD params for an ac (sta mode).
7152 */
7153VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7154 tUapsdInfo *pUapsdInfo)
7155{
7156 WDI_Status status = WDI_STATUS_SUCCESS;
7157 tWDA_CbContext *pWDA = NULL ;
7158 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7159 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7160 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7161 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007163 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 if(NULL == wdiUapsdParams)
7165 {
7166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 VOS_ASSERT(0);
7169 return VOS_STATUS_E_NOMEM;
7170 }
7171 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7172 if(NULL == pWdaParams)
7173 {
7174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 VOS_ASSERT(0);
7177 vos_mem_free(wdiUapsdParams);
7178 return VOS_STATUS_E_NOMEM;
7179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7181 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7182 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7183 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7184 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7185 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007187 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 pWdaParams->pWdaContext = pWDA;
7189 /* Store param pointer as passed in by caller */
7190 pWdaParams->wdaMsgParam = pUapsdInfo;
7191 /* store Params pass it to WDI */
7192 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
7194 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
7195 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007196 if(IS_WDI_STATUS_FAILURE(status))
7197 {
7198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7199 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7201 vos_mem_free(pWdaParams);
7202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007203 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7204 return VOS_STATUS_SUCCESS;
7205 else
7206 return VOS_STATUS_E_FAILURE;
7207
Jeff Johnson295189b2012-06-20 16:38:30 -07007208}
7209/*
7210 * FUNCTION: WDA_ClearUapsdAcParamsReq
7211 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7212 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7213 * and again enter the UPASD with the modified params. Hence the disable
7214 * function was kept empty.
7215 *
7216 */
7217VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7218{
7219 /* do nothing */
7220 return VOS_STATUS_SUCCESS;
7221}
Jeff Johnson295189b2012-06-20 16:38:30 -07007222/*
7223 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7224 *
7225 */
7226void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
7227{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007228 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7229
Jeff Johnson295189b2012-06-20 16:38:30 -07007230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007231 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007232
7233 if(NULL == pWdaParams)
7234 {
7235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007236 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007237 VOS_ASSERT(0) ;
7238 return ;
7239 }
7240
7241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7242 vos_mem_free(pWdaParams->wdaMsgParam);
7243 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007244
Jeff Johnson295189b2012-06-20 16:38:30 -07007245 //print a msg, nothing else to do
7246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7247 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007248 return ;
7249}
Jeff Johnson295189b2012-06-20 16:38:30 -07007250/*
7251 * FUNCTION: WDA_UpdateUapsdParamsReq
7252 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7253 */
7254VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7255 tUpdateUapsdParams* pUpdateUapsdInfo)
7256{
7257 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007258 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7260 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7261 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007262 tWDA_ReqParams *pWdaParams = NULL;
7263
Jeff Johnson295189b2012-06-20 16:38:30 -07007264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007265 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007266 if(NULL == wdiUpdateUapsdParams)
7267 {
7268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007270 VOS_ASSERT(0);
7271 return VOS_STATUS_E_NOMEM;
7272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007273 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7274 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7275 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007276
7277 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7278 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 {
7280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007281 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007282 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007283 vos_mem_free(pUpdateUapsdInfo);
7284 vos_mem_free(wdiUpdateUapsdParams);
7285 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007288 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007290 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7291 pWdaParams->pWdaContext = pWDA;
7292
Jeff Johnson43971f52012-07-17 12:26:56 -07007293 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007294 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7295 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007296
Jeff Johnson43971f52012-07-17 12:26:56 -07007297 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007298 {
7299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7300 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007301 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7303 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007304 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007306 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007307}
Jeff Johnson295189b2012-06-20 16:38:30 -07007308/*
7309 * FUNCTION: WDA_ConfigureRxpFilterCallback
7310 *
7311 */
7312void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7313{
7314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007316 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007317 if(WDI_STATUS_SUCCESS != wdiStatus)
7318 {
7319 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007320 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007322 if(NULL == pWdaParams)
7323 {
7324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007325 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007326 VOS_ASSERT(0) ;
7327 return ;
7328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7330 vos_mem_free(pWdaParams->wdaMsgParam);
7331 vos_mem_free(pWdaParams);
7332 return ;
7333}
Jeff Johnson295189b2012-06-20 16:38:30 -07007334/*
7335 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7336 *
7337 */
7338VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7339 tSirWlanSetRxpFilters *pWlanSuspendParam)
7340{
Jeff Johnson295189b2012-06-20 16:38:30 -07007341 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007342 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007343 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7344 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7345 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7346 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007348 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007349 if(NULL == wdiRxpFilterParams)
7350 {
7351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007352 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007353 VOS_ASSERT(0);
7354 vos_mem_free(pWlanSuspendParam);
7355 return VOS_STATUS_E_NOMEM;
7356 }
7357 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7358 if(NULL == pWdaParams)
7359 {
7360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007362 VOS_ASSERT(0);
7363 vos_mem_free(wdiRxpFilterParams);
7364 vos_mem_free(pWlanSuspendParam);
7365 return VOS_STATUS_E_NOMEM;
7366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007367 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7368 pWlanSuspendParam->setMcstBcstFilter;
7369 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7370 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7371
7372 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 pWdaParams->pWdaContext = pWDA;
7374 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7375 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007376 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007377 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7378 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007379 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 {
7381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7382 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007383 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7385 vos_mem_free(pWdaParams->wdaMsgParam);
7386 vos_mem_free(pWdaParams);
7387 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007388 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007389}
Jeff Johnson295189b2012-06-20 16:38:30 -07007390/*
7391 * FUNCTION: WDA_WdiIndicationCallback
7392 *
7393 */
7394void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7395 void* pUserData)
7396{
7397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007398 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007399}
Jeff Johnson295189b2012-06-20 16:38:30 -07007400/*
7401 * FUNCTION: WDA_ProcessWlanSuspendInd
7402 *
7403 */
7404VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7405 tSirWlanSuspendParam *pWlanSuspendParam)
7406{
7407 WDI_Status wdiStatus;
7408 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007410 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007411 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7412 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7413 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7414 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007416 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7417 if(WDI_STATUS_PENDING == wdiStatus)
7418 {
7419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007420 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007421 }
7422 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7423 {
7424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007425 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007427 vos_mem_free(pWlanSuspendParam);
7428 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7429}
7430
Chet Lanctot186b5732013-03-18 10:26:30 -07007431#ifdef WLAN_FEATURE_11W
7432/*
7433 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7434 *
7435 */
7436VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7437 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7438{
7439 WDI_Status wdiStatus;
7440 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7442 "------> %s ", __func__);
7443
7444 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7445 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7446 sizeof(tSirMacAddr));
7447
7448 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7449 wdiExclUnencryptParams.pUserData = pWDA;
7450
7451 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7452 if(WDI_STATUS_PENDING == wdiStatus)
7453 {
7454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7455 "Pending received for %s:%d ", __func__, __LINE__ );
7456 }
7457 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7458 {
7459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7460 "Failure in %s:%d ", __func__, __LINE__ );
7461 }
7462 vos_mem_free(pExclUnencryptParam);
7463 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7464}
7465#endif
7466
Jeff Johnson295189b2012-06-20 16:38:30 -07007467/*
7468 * FUNCTION: WDA_ProcessWlanResumeCallback
7469 *
7470 */
7471void WDA_ProcessWlanResumeCallback(
7472 WDI_SuspendResumeRspParamsType *resumeRspParams,
7473 void* pUserData)
7474{
7475 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007477 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 if(NULL == pWdaParams)
7479 {
7480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007481 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 VOS_ASSERT(0) ;
7483 return ;
7484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7486 {
7487 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007488 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7491 vos_mem_free(pWdaParams->wdaMsgParam);
7492 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 return ;
7494}
Jeff Johnson295189b2012-06-20 16:38:30 -07007495/*
7496 * FUNCTION: WDA_ProcessWlanResumeReq
7497 *
7498 */
7499VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7500 tSirWlanResumeParam *pWlanResumeParam)
7501{
7502 WDI_Status wdiStatus;
7503 WDI_ResumeParamsType *wdiResumeParams =
7504 (WDI_ResumeParamsType *)vos_mem_malloc(
7505 sizeof(WDI_ResumeParamsType) ) ;
7506 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007508 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 if(NULL == wdiResumeParams)
7510 {
7511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 VOS_ASSERT(0);
7514 return VOS_STATUS_E_NOMEM;
7515 }
7516 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7517 if(NULL == pWdaParams)
7518 {
7519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007521 VOS_ASSERT(0);
7522 vos_mem_free(wdiResumeParams);
7523 return VOS_STATUS_E_NOMEM;
7524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7526 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 wdiResumeParams->wdiReqStatusCB = NULL;
7529 pWdaParams->wdaMsgParam = pWlanResumeParam;
7530 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7531 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7533 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7534 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7536 {
7537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7538 "Failure in Host Resume REQ WDI API, free all the memory " );
7539 VOS_ASSERT(0);
7540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7541 vos_mem_free(pWdaParams->wdaMsgParam);
7542 vos_mem_free(pWdaParams);
7543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007544 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7545}
7546
Jeff Johnson295189b2012-06-20 16:38:30 -07007547/*
7548 * FUNCTION: WDA_SetBeaconFilterReqCallback
7549 *
7550 */
7551void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7552{
7553 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007555 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 if(NULL == pWdaParams)
7557 {
7558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007559 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007560 VOS_ASSERT(0) ;
7561 return ;
7562 }
7563
7564 vos_mem_free(pWdaParams->wdaMsgParam) ;
7565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7566 vos_mem_free(pWdaParams) ;
7567 /*
7568 * No respone required for SetBeaconFilter req so just free the request
7569 * param here
7570 */
7571
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 return ;
7573}
Jeff Johnson295189b2012-06-20 16:38:30 -07007574/*
7575 * FUNCTION: WDA_SetBeaconFilterReq
7576 * Request to WDI to send the beacon filtering related information.
7577 */
7578VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7579 tBeaconFilterMsg* pBeaconFilterInfo)
7580{
7581 WDI_Status status = WDI_STATUS_SUCCESS;
7582 tANI_U8 *dstPtr, *srcPtr;
7583 tANI_U8 filterLength;
7584 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7585 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7586 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7587 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007589 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 if(NULL == wdiBeaconFilterInfo)
7591 {
7592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007593 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 VOS_ASSERT(0);
7595 return VOS_STATUS_E_NOMEM;
7596 }
7597 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7598 if(NULL == pWdaParams)
7599 {
7600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007602 VOS_ASSERT(0);
7603 vos_mem_free(wdiBeaconFilterInfo);
7604 return VOS_STATUS_E_NOMEM;
7605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7607 pBeaconFilterInfo->beaconInterval;
7608 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7609 pBeaconFilterInfo->capabilityInfo;
7610 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7611 pBeaconFilterInfo->capabilityMask;
7612 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007613
7614 //Fill the BssIdx
7615 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7616
Jeff Johnson295189b2012-06-20 16:38:30 -07007617 //Fill structure with info contained in the beaconFilterTable
7618 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7619 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7620 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7621 if(WDI_BEACON_FILTER_LEN < filterLength)
7622 {
7623 filterLength = WDI_BEACON_FILTER_LEN;
7624 }
7625 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7627 /* Store param pointer as passed in by caller */
7628 /* store Params pass it to WDI */
7629 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7630 pWdaParams->pWdaContext = pWDA;
7631 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7632
Jeff Johnson295189b2012-06-20 16:38:30 -07007633 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7634 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 if(IS_WDI_STATUS_FAILURE(status))
7636 {
7637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7638 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7639 vos_mem_free(pWdaParams->wdaMsgParam) ;
7640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7641 vos_mem_free(pWdaParams) ;
7642 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007643 return CONVERT_WDI2VOS_STATUS(status) ;
7644}
Jeff Johnson295189b2012-06-20 16:38:30 -07007645/*
7646 * FUNCTION: WDA_RemBeaconFilterReqCallback
7647 *
7648 */
7649void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7650{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007651 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7652
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007654 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007655
7656 if(NULL == pWdaParams)
7657 {
7658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007659 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007660 VOS_ASSERT(0) ;
7661 return ;
7662 }
7663
7664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7665 vos_mem_free(pWdaParams->wdaMsgParam);
7666 vos_mem_free(pWdaParams);
7667
Jeff Johnson295189b2012-06-20 16:38:30 -07007668 //print a msg, nothing else to do
7669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7670 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 return ;
7672}
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 // TODO: PE does not have this feature for now implemented,
7674 // but the support for removing beacon filter exists between
7675 // HAL and FW. This function can be called whenever PE defines
7676 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007677/*
7678 * FUNCTION: WDA_RemBeaconFilterReq
7679 * Request to WDI to send the removal of beacon filtering related information.
7680 */
7681VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7682 tRemBeaconFilterMsg* pBeaconFilterInfo)
7683{
7684 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007685 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007686 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7687 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7688 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007689 tWDA_ReqParams *pWdaParams ;
7690
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007692 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 if(NULL == wdiBeaconFilterInfo)
7694 {
7695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007696 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 VOS_ASSERT(0);
7698 return VOS_STATUS_E_NOMEM;
7699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007700 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7701 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007702 //Fill structure with info contained in the ucRemIeId
7703 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7704 pBeaconFilterInfo->ucRemIeId,
7705 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7706 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007707
7708 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7709 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007710 {
7711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007712 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007714 vos_mem_free(wdiBeaconFilterInfo);
7715 vos_mem_free(pBeaconFilterInfo);
7716 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007717 }
7718
7719 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007720 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007722 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7723
7724 pWdaParams->pWdaContext = pWDA;
7725
Jeff Johnson43971f52012-07-17 12:26:56 -07007726 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007727 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007728 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007729 {
7730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7731 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007732 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7734 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007735 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007737 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007738}
Jeff Johnson295189b2012-06-20 16:38:30 -07007739/*
7740 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7741 *
7742 */
7743void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7744{
7745 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007747 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007748 if(NULL == pWdaParams)
7749 {
7750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007751 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 VOS_ASSERT(0) ;
7753 return ;
7754 }
7755
7756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7757 vos_mem_free(pWdaParams) ;
7758
Jeff Johnson295189b2012-06-20 16:38:30 -07007759 return ;
7760}
Jeff Johnson295189b2012-06-20 16:38:30 -07007761/*
7762 * FUNCTION: WDA_SetRSSIThresholdsReq
7763 * Request to WDI to set the RSSI thresholds (sta mode).
7764 */
7765VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7766{
7767 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007768 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007769 tWDA_CbContext *pWDA = NULL ;
7770 v_PVOID_t pVosContext = NULL;
7771 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7772 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7773 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7774 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007776 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 if(NULL == wdiRSSIThresholdsInfo)
7778 {
7779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007780 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007781 VOS_ASSERT(0);
7782 return VOS_STATUS_E_NOMEM;
7783 }
7784 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7785 if(NULL == pWdaParams)
7786 {
7787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007788 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 VOS_ASSERT(0);
7790 vos_mem_free(wdiRSSIThresholdsInfo);
7791 return VOS_STATUS_E_NOMEM;
7792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007794 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7795 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7796 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7798 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7799 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007800 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7801 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7802 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7805 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7806
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 /* Store param pointer as passed in by caller */
7808 /* store Params pass it to WDI */
7809 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7810 pWdaParams->pWdaContext = pWDA;
7811 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007812 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007813 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007814 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 {
7816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7817 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007818 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7820 vos_mem_free(pWdaParams) ;
7821 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007822 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007823
7824}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007825/*
7826 * FUNCTION: WDA_HostOffloadReqCallback
7827 *
7828 */
7829void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7830{
7831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7832
7833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007834 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 if(NULL == pWdaParams)
7836 {
7837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007838 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 VOS_ASSERT(0) ;
7840 return ;
7841 }
7842
7843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7844 vos_mem_free(pWdaParams->wdaMsgParam);
7845 vos_mem_free(pWdaParams) ;
7846
7847 //print a msg, nothing else to do
7848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7849 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007850 return ;
7851}
Jeff Johnson295189b2012-06-20 16:38:30 -07007852/*
7853 * FUNCTION: WDA_ProcessHostOffloadReq
7854 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7855 * to broadcast traffic (sta mode).
7856 */
7857VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7858 tSirHostOffloadReq *pHostOffloadParams)
7859{
7860 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007861 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007862 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7863 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7864 sizeof(WDI_HostOffloadReqParamsType)) ;
7865 tWDA_ReqParams *pWdaParams ;
7866
7867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007868 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007869
7870 if(NULL == wdiHostOffloadInfo)
7871 {
7872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007874 VOS_ASSERT(0);
7875 return VOS_STATUS_E_NOMEM;
7876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7878 if(NULL == pWdaParams)
7879 {
7880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007881 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007882 VOS_ASSERT(0);
7883 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007884 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 return VOS_STATUS_E_NOMEM;
7886 }
7887
7888 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7889 pHostOffloadParams->offloadType;
7890 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7891 pHostOffloadParams->enableOrDisable;
7892
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007893 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7894 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7895
Jeff Johnson295189b2012-06-20 16:38:30 -07007896 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7897 {
7898 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7899 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7900 pHostOffloadParams->params.hostIpv4Addr,
7901 4);
7902 break;
7903 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7904 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7905 pHostOffloadParams->params.hostIpv6Addr,
7906 16);
7907 break;
7908 case SIR_IPV6_NS_OFFLOAD:
7909 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7910 pHostOffloadParams->params.hostIpv6Addr,
7911 16);
7912
7913#ifdef WLAN_NS_OFFLOAD
7914 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7915 {
7916 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7917 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7918 16);
7919 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7920 }
7921 else
7922 {
7923 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7924 }
7925
7926 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7927 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7928 16);
7929 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7930 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7931 6);
7932
7933 //Only two are supported so let's go through them without a loop
7934 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7935 {
7936 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7937 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7938 16);
7939 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7940 }
7941 else
7942 {
7943 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7944 }
7945
7946 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7947 {
7948 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7949 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7950 16);
7951 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7952 }
7953 else
7954 {
7955 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7956 }
7957 break;
7958#endif //WLAN_NS_OFFLOAD
7959 default:
7960 {
7961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7962 "No Handling for Offload Type %x in WDA "
7963 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7964 //WDA_VOS_ASSERT(0) ;
7965 }
7966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007967 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007968
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007970 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 /* store Params pass it to WDI */
7972 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7973 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007974
Jeff Johnson295189b2012-06-20 16:38:30 -07007975
Jeff Johnson43971f52012-07-17 12:26:56 -07007976 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007977 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7978
Jeff Johnson43971f52012-07-17 12:26:56 -07007979 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007980 {
7981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7982 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007983 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7985 vos_mem_free(pWdaParams->wdaMsgParam);
7986 vos_mem_free(pWdaParams) ;
7987 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007988 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007989
7990}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007991/*
7992 * FUNCTION: WDA_KeepAliveReqCallback
7993 *
7994 */
7995void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7996{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007997 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7998
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008000 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008001
8002 if(NULL == pWdaParams)
8003 {
8004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008005 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008006 VOS_ASSERT(0) ;
8007 return ;
8008 }
8009
8010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8011 vos_mem_free(pWdaParams->wdaMsgParam);
8012 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008013
Jeff Johnson295189b2012-06-20 16:38:30 -07008014 //print a msg, nothing else to do
8015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8016 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 return ;
8018}
Jeff Johnson295189b2012-06-20 16:38:30 -07008019/*
8020 * FUNCTION: WDA_ProcessKeepAliveReq
8021 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8022 * wakeup due to broadcast traffic (sta mode).
8023 */
8024VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8025 tSirKeepAliveReq *pKeepAliveParams)
8026{
8027 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008028 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008029 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8030 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8031 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008032 tWDA_ReqParams *pWdaParams;
8033
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008035 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008036 if(NULL == wdiKeepAliveInfo)
8037 {
8038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008040 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008041 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 return VOS_STATUS_E_NOMEM;
8043 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008044
8045 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8046 if(NULL == pWdaParams)
8047 {
8048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008049 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008050 VOS_ASSERT(0);
8051 vos_mem_free(wdiKeepAliveInfo);
8052 vos_mem_free(pKeepAliveParams);
8053 return VOS_STATUS_E_NOMEM;
8054 }
8055
Jeff Johnson295189b2012-06-20 16:38:30 -07008056 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8057 pKeepAliveParams->packetType;
8058 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8059 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008060
8061 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8062 pKeepAliveParams->bssId,
8063 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008064
8065 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8066 {
8067 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8068 pKeepAliveParams->hostIpv4Addr,
8069 SIR_IPV4_ADDR_LEN);
8070 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8071 pKeepAliveParams->destIpv4Addr,
8072 SIR_IPV4_ADDR_LEN);
8073 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8074 pKeepAliveParams->destMacAddr,
8075 SIR_MAC_ADDR_LEN);
8076 }
8077 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8078 {
8079 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8080 SIR_IPV4_ADDR_LEN,
8081 0);
8082 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8083 SIR_IPV4_ADDR_LEN,
8084 0);
8085 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8086 SIR_MAC_ADDR_LEN,
8087 0);
8088 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008090
Jeff Johnson295189b2012-06-20 16:38:30 -07008091 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008092 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008094 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8095 pWdaParams->pWdaContext = pWDA;
8096
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8098 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8099 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8100 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8101 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8103 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8104 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8105 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8106 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8108 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8109 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8110 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8111 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8112 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8113 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8114 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8116 "TimePeriod %d PacketType %d",
8117 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8118 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008119 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008120 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
8121
Jeff Johnson43971f52012-07-17 12:26:56 -07008122 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008123 {
8124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8125 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008126 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8128 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008129 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008130 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008131 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008132
8133}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008134/*
8135 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8136 *
8137 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008138void WDA_WowlAddBcPtrnReqCallback(
8139 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8140 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008141{
8142 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008144 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 if(NULL == pWdaParams)
8146 {
8147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008148 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008149 VOS_ASSERT(0) ;
8150 return ;
8151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8153 vos_mem_free(pWdaParams->wdaMsgParam);
8154 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008155 return ;
8156}
Jeff Johnson295189b2012-06-20 16:38:30 -07008157/*
8158 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8159 * Request to WDI to add WOWL Bcast pattern
8160 */
8161VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8162 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8163{
8164 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008165 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8167 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8168 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8169 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008171 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008172 if(NULL == wdiWowlAddBcPtrnInfo)
8173 {
8174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 VOS_ASSERT(0);
8177 return VOS_STATUS_E_NOMEM;
8178 }
8179 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8180 if(NULL == pWdaParams)
8181 {
8182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008184 VOS_ASSERT(0);
8185 vos_mem_free(wdiWowlAddBcPtrnInfo);
8186 return VOS_STATUS_E_NOMEM;
8187 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008188 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8189 pWowlAddBcPtrnParams->ucPatternId;
8190 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8191 pWowlAddBcPtrnParams->ucPatternByteOffset;
8192 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8193 pWowlAddBcPtrnParams->ucPatternMaskSize;
8194 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8195 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008196 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8197 {
8198 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8199 pWowlAddBcPtrnParams->ucPattern,
8200 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8201 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8202 pWowlAddBcPtrnParams->ucPatternMask,
8203 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8204 }
8205 else
8206 {
8207 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8208 pWowlAddBcPtrnParams->ucPattern,
8209 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8210 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8211 pWowlAddBcPtrnParams->ucPatternMask,
8212 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8213
8214 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8215 pWowlAddBcPtrnParams->ucPatternExt,
8216 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8217 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8218 pWowlAddBcPtrnParams->ucPatternMaskExt,
8219 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8220 }
8221
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008222 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8223 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8224
Jeff Johnson295189b2012-06-20 16:38:30 -07008225 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008226 /* Store param pointer as passed in by caller */
8227 /* store Params pass it to WDI */
8228 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8229 pWdaParams->pWdaContext = pWDA;
8230 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008231 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008232 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008233 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008234 {
8235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8236 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008237 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008238 vos_mem_free(pWdaParams->wdaMsgParam) ;
8239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8240 vos_mem_free(pWdaParams) ;
8241 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008242 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008243
8244}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008245/*
8246 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8247 *
8248 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008249void WDA_WowlDelBcPtrnReqCallback(
8250 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8251 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008252{
8253 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008255 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 if(NULL == pWdaParams)
8257 {
8258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008259 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008260 VOS_ASSERT(0) ;
8261 return ;
8262 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8264 vos_mem_free(pWdaParams->wdaMsgParam);
8265 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008266 return ;
8267}
Jeff Johnson295189b2012-06-20 16:38:30 -07008268/*
8269 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8270 * Request to WDI to delete WOWL Bcast pattern
8271 */
8272VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8273 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8274{
8275 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008276 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008277 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8278 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8279 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8280 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008282 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008283 if(NULL == wdiWowlDelBcPtrnInfo)
8284 {
8285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 VOS_ASSERT(0);
8288 return VOS_STATUS_E_NOMEM;
8289 }
8290 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8291 if(NULL == pWdaParams)
8292 {
8293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008295 VOS_ASSERT(0);
8296 vos_mem_free(wdiWowlDelBcPtrnInfo);
8297 return VOS_STATUS_E_NOMEM;
8298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008299 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8300 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008301
8302 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8303 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8304
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 /* Store param pointer as passed in by caller */
8307 /* store Params pass it to WDI */
8308 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8309 pWdaParams->pWdaContext = pWDA;
8310 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008311 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008313 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008314 {
8315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8316 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008317 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 vos_mem_free(pWdaParams->wdaMsgParam) ;
8319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8320 vos_mem_free(pWdaParams) ;
8321 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008322 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008323
8324}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008325/*
8326 * FUNCTION: WDA_WowlEnterReqCallback
8327 *
8328 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008329void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008330{
8331 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8332 tWDA_CbContext *pWDA;
8333 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008335 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 if(NULL == pWdaParams)
8337 {
8338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008339 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008340 VOS_ASSERT(0) ;
8341 return ;
8342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8344 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8345
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008346 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8347
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8349 vos_mem_free(pWdaParams) ;
8350
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008351 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008352 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008354 return ;
8355}
Jeff Johnson295189b2012-06-20 16:38:30 -07008356/*
8357 * FUNCTION: WDA_ProcessWowlEnterReq
8358 * Request to WDI to enter WOWL
8359 */
8360VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8361 tSirHalWowlEnterParams *pWowlEnterParams)
8362{
8363 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008364 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8366 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8367 sizeof(WDI_WowlEnterReqParamsType)) ;
8368 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008370 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 if(NULL == wdiWowlEnterInfo)
8372 {
8373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008374 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 VOS_ASSERT(0);
8376 return VOS_STATUS_E_NOMEM;
8377 }
8378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8379 if(NULL == pWdaParams)
8380 {
8381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 VOS_ASSERT(0);
8384 vos_mem_free(wdiWowlEnterInfo);
8385 return VOS_STATUS_E_NOMEM;
8386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008387 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8388 pWowlEnterParams->magicPtrn,
8389 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8391 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8393 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008394 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8395 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8397 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008398 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8399 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008400 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8401 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8403 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8405 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008406#ifdef WLAN_WAKEUP_EVENTS
8407 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8408 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8409
8410 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8411 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8412
8413 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8414 pWowlEnterParams->ucWowNetScanOffloadMatch;
8415
8416 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8417 pWowlEnterParams->ucWowGTKRekeyError;
8418
8419 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8420 pWowlEnterParams->ucWoWBSSConnLoss;
8421#endif // WLAN_WAKEUP_EVENTS
8422
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008423 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8424 pWowlEnterParams->bssIdx;
8425
Jeff Johnson295189b2012-06-20 16:38:30 -07008426 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008427 /* Store param pointer as passed in by caller */
8428 /* store Params pass it to WDI */
8429 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8430 pWdaParams->pWdaContext = pWDA;
8431 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008432 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008434 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 {
8436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8437 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008438 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 vos_mem_free(pWdaParams->wdaMsgParam) ;
8440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8441 vos_mem_free(pWdaParams) ;
8442 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008443 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008444
8445}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008446/*
8447 * FUNCTION: WDA_WowlExitReqCallback
8448 *
8449 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008450void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008451{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008452 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8453 tWDA_CbContext *pWDA;
8454 tSirHalWowlExitParams *pWowlExitParams;
8455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008456 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008457 if(NULL == pWdaParams)
8458 {
8459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008460 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008461 VOS_ASSERT(0) ;
8462 return ;
8463 }
8464 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8465 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8466
8467 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008468 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008469
8470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8471 vos_mem_free(pWdaParams) ;
8472
Jeff Johnson295189b2012-06-20 16:38:30 -07008473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008474 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008475 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008476 return ;
8477}
Jeff Johnson295189b2012-06-20 16:38:30 -07008478/*
8479 * FUNCTION: WDA_ProcessWowlExitReq
8480 * Request to WDI to add WOWL Bcast pattern
8481 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008482VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8483 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008484{
8485 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008486 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008487 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8488 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8489 sizeof(WDI_WowlExitReqParamsType)) ;
8490 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008492 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008493 if(NULL == wdiWowlExitInfo)
8494 {
8495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008496 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008497 VOS_ASSERT(0);
8498 return VOS_STATUS_E_NOMEM;
8499 }
8500 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8501 if(NULL == pWdaParams)
8502 {
8503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008504 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008505 VOS_ASSERT(0);
8506 vos_mem_free(wdiWowlExitInfo);
8507 return VOS_STATUS_E_NOMEM;
8508 }
8509
8510 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8511 pWowlExitParams->bssIdx;
8512
8513 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8514
8515 /* Store param pointer as passed in by caller */
8516 /* store Params pass it to WDI */
8517 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8518 pWdaParams->pWdaContext = pWDA;
8519 pWdaParams->wdaMsgParam = pWowlExitParams;
8520
8521 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8522 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008523
Jeff Johnson43971f52012-07-17 12:26:56 -07008524 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 {
8526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8527 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008528 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8530 vos_mem_free(pWdaParams->wdaMsgParam);
8531 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008532 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008533 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008534}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008535/*
8536 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8537 * Request to WDI to determine whether a given station is capable of
8538 * using HW-based frame translation
8539 */
8540v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8541 tANI_U8 staIdx)
8542{
8543 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8544}
Jeff Johnson295189b2012-06-20 16:38:30 -07008545/*
8546 * FUNCTION: WDA_NvDownloadReqCallback
8547 * send NV Download RSP back to PE
8548 */
8549void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8550 void* pUserData)
8551{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008552
8553 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8554 tWDA_CbContext *pWDA;
8555
Jeff Johnson295189b2012-06-20 16:38:30 -07008556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008557 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008558
8559 if(NULL == pWdaParams)
8560 {
8561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008562 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008563 VOS_ASSERT(0) ;
8564 return ;
8565 }
8566
8567 pWDA = pWdaParams->pWdaContext;
8568
Jeff Johnson295189b2012-06-20 16:38:30 -07008569 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8571 vos_mem_free(pWdaParams);
8572
Jeff Johnson295189b2012-06-20 16:38:30 -07008573 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008574 return ;
8575}
Jeff Johnson295189b2012-06-20 16:38:30 -07008576/*
8577 * FUNCTION: WDA_ProcessNvDownloadReq
8578 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8579 */
8580VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8581{
8582 /* Initialize the local Variables*/
8583 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8584 v_VOID_t *pNvBuffer=NULL;
8585 v_SIZE_t bufferSize = 0;
8586 WDI_Status status = WDI_STATUS_E_FAILURE;
8587 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008588 tWDA_ReqParams *pWdaParams ;
8589
Jeff Johnson295189b2012-06-20 16:38:30 -07008590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008591 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 if(NULL == pWDA)
8593 {
8594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008595 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008596 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 return VOS_STATUS_E_FAILURE;
8598 }
8599
8600 /* Get the NV structure base address and size from VOS */
8601 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008602 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8603 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008604 if(NULL == wdiNvDownloadReqParam)
8605 {
8606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008608 VOS_ASSERT(0);
8609 return VOS_STATUS_E_NOMEM;
8610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008611 /* Copy Params to wdiNvDownloadReqParam*/
8612 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8613 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008614
8615 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8616 if(NULL == pWdaParams)
8617 {
8618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008619 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008620 VOS_ASSERT(0);
8621 vos_mem_free(wdiNvDownloadReqParam);
8622 return VOS_STATUS_E_NOMEM;
8623 }
8624
Jeff Johnson295189b2012-06-20 16:38:30 -07008625 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008626 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8627 pWdaParams->wdaMsgParam = NULL;
8628 pWdaParams->pWdaContext = pWDA;
8629
8630
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008632
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008634 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8635
Jeff Johnson295189b2012-06-20 16:38:30 -07008636 if(IS_WDI_STATUS_FAILURE(status))
8637 {
8638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8639 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8641 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008643 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008644}
8645/*
8646 * FUNCTION: WDA_FlushAcReqCallback
8647 * send Flush AC RSP back to TL
8648 */
8649void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8650{
8651 vos_msg_t wdaMsg = {0} ;
8652 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8653 tFlushACReq *pFlushACReqParams;
8654 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008656 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008657 if(NULL == pWdaParams)
8658 {
8659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008660 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 VOS_ASSERT(0) ;
8662 return ;
8663 }
8664
8665 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8666 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8667 if(NULL == pFlushACRspParams)
8668 {
8669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008672 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008673 return ;
8674 }
8675 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8676 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8677 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8678 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8679 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008680 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008681 vos_mem_free(pWdaParams->wdaMsgParam) ;
8682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8683 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008684 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8685 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8686 // POST message to TL
8687 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8688
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 return ;
8690}
Jeff Johnson295189b2012-06-20 16:38:30 -07008691/*
8692 * FUNCTION: WDA_ProcessFlushAcReq
8693 * Request to WDI to Update the DELBA REQ params.
8694 */
8695VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8696 tFlushACReq *pFlushAcReqParams)
8697{
8698 WDI_Status status = WDI_STATUS_SUCCESS ;
8699 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8700 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8701 sizeof(WDI_FlushAcReqParamsType)) ;
8702 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 if(NULL == wdiFlushAcReqParam)
8704 {
8705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008706 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008707 VOS_ASSERT(0);
8708 return VOS_STATUS_E_NOMEM;
8709 }
8710 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8711 if(NULL == pWdaParams)
8712 {
8713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008714 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008715 VOS_ASSERT(0);
8716 vos_mem_free(wdiFlushAcReqParam);
8717 return VOS_STATUS_E_NOMEM;
8718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008720 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008721 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8722 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8723 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8724 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008725 /* Store Flush AC pointer, as this will be used for response */
8726 /* store Params pass it to WDI */
8727 pWdaParams->pWdaContext = pWDA;
8728 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8729 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8731 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008732 if(IS_WDI_STATUS_FAILURE(status))
8733 {
8734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8735 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8736 vos_mem_free(pWdaParams->wdaMsgParam) ;
8737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8738 vos_mem_free(pWdaParams) ;
8739 //TODO: respond to TL with failure
8740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008742}
Jeff Johnson295189b2012-06-20 16:38:30 -07008743/*
8744 * FUNCTION: WDA_BtAmpEventReqCallback
8745 *
8746 */
8747void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8748{
8749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8750 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008751 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008752
8753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008754 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 if(NULL == pWdaParams)
8756 {
8757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008758 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 VOS_ASSERT(0) ;
8760 return ;
8761 }
8762 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8763 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8764 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8765 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8766 {
8767 pWDA->wdaAmpSessionOn = VOS_FALSE;
8768 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 vos_mem_free(pWdaParams->wdaMsgParam) ;
8770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8771 vos_mem_free(pWdaParams) ;
8772 /*
8773 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8774 * param here
8775 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008776 return ;
8777}
8778
Jeff Johnson295189b2012-06-20 16:38:30 -07008779/*
8780 * FUNCTION: WDA_ProcessBtAmpEventReq
8781 * Request to WDI to Update with BT AMP events.
8782 */
8783VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8784 tSmeBtAmpEvent *pBtAmpEventParams)
8785{
8786 WDI_Status status = WDI_STATUS_SUCCESS ;
8787 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8788 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8789 sizeof(WDI_BtAmpEventParamsType)) ;
8790 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008792 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008793 if(NULL == wdiBtAmpEventParam)
8794 {
8795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008796 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 VOS_ASSERT(0);
8798 return VOS_STATUS_E_NOMEM;
8799 }
8800 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8801 if(NULL == pWdaParams)
8802 {
8803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008804 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008805 VOS_ASSERT(0);
8806 vos_mem_free(wdiBtAmpEventParam);
8807 return VOS_STATUS_E_NOMEM;
8808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008809 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8810 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008811 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 /* Store BT AMP event pointer, as this will be used for response */
8813 /* store Params pass it to WDI */
8814 pWdaParams->pWdaContext = pWDA;
8815 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8816 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008817 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8818 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008819 if(IS_WDI_STATUS_FAILURE(status))
8820 {
8821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8822 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8823 vos_mem_free(pWdaParams->wdaMsgParam) ;
8824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8825 vos_mem_free(pWdaParams) ;
8826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008827 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8828 {
8829 pWDA->wdaAmpSessionOn = VOS_TRUE;
8830 }
8831 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008832}
8833
Jeff Johnson295189b2012-06-20 16:38:30 -07008834/*
8835 * FUNCTION: WDA_FTMCommandReqCallback
8836 * Handle FTM CMD response came from HAL
8837 * Route responce to HDD FTM
8838 */
8839void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8840 void *usrData)
8841{
8842 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8844 {
8845 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008846 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008847 return;
8848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008849 /* Release Current FTM Command Request */
8850 vos_mem_free(pWDA->wdaFTMCmdReq);
8851 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008852 /* Post FTM Responce to HDD FTM */
8853 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008854 return;
8855}
Jeff Johnson295189b2012-06-20 16:38:30 -07008856/*
8857 * FUNCTION: WDA_ProcessFTMCommand
8858 * Send FTM command to WDI
8859 */
8860VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8861 tPttMsgbuffer *pPTTFtmCmd)
8862{
8863 WDI_Status status = WDI_STATUS_SUCCESS;
8864 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008865 ftmCMDReq = (WDI_FTMCommandReqType *)
8866 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8867 if(NULL == ftmCMDReq)
8868 {
8869 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8870 "WDA FTM Command buffer alloc fail");
8871 return VOS_STATUS_E_NOMEM;
8872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008873 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8874 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008875 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008876 /* Send command to WDI */
8877 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008878 return status;
8879}
Jeff Johnsone7245742012-09-05 17:12:55 -07008880#ifdef FEATURE_OEM_DATA_SUPPORT
8881/*
8882 * FUNCTION: WDA_StartOemDataReqCallback
8883 *
8884 */
8885void WDA_StartOemDataReqCallback(
8886 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8887 void* pUserData)
8888{
8889 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8891 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008892 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008893
Jeff Johnsone7245742012-09-05 17:12:55 -07008894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008895 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008896
8897 if(NULL == pWdaParams)
8898 {
8899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008900 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008901 VOS_ASSERT(0) ;
8902 return ;
8903 }
8904 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8905
Jeff Johnsone7245742012-09-05 17:12:55 -07008906 if(NULL == pWDA)
8907 {
8908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008909 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008910 VOS_ASSERT(0);
8911 return ;
8912 }
8913
8914 /*
8915 * Allocate memory for response params sent to PE
8916 */
8917 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8918
8919 // Check if memory is allocated for OemdataMeasRsp Params.
8920 if(NULL == pOemDataRspParams)
8921 {
8922 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8923 "OEM DATA WDA callback alloc fail");
8924 VOS_ASSERT(0) ;
8925 return;
8926 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008927
Jeff Johnsone7245742012-09-05 17:12:55 -07008928 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8930 vos_mem_free(pWdaParams->wdaMsgParam);
8931 vos_mem_free(pWdaParams) ;
8932
Jeff Johnsone7245742012-09-05 17:12:55 -07008933 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08008934 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07008935 * Also, here success always means that we have atleast one BSSID.
8936 */
8937 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8938
8939 //enable Tx
8940 status = WDA_ResumeDataTx(pWDA);
8941 if(status != VOS_STATUS_SUCCESS)
8942 {
8943 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8944 }
8945 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8946 return ;
8947}
8948/*
8949 * FUNCTION: WDA_ProcessStartOemDataReq
8950 * Send Start Oem Data Req to WDI
8951 */
8952VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8953 tStartOemDataReq *pOemDataReqParams)
8954{
8955 WDI_Status status = WDI_STATUS_SUCCESS;
8956 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008957 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008958
8959 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8960
8961 if(NULL == wdiOemDataReqParams)
8962 {
8963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008964 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008965 VOS_ASSERT(0);
8966 return VOS_STATUS_E_NOMEM;
8967 }
8968
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008969 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8970 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8971 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8972 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008973
8974 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8975
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008976 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8977 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008978 {
8979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008980 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008981 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008982 vos_mem_free(pOemDataReqParams);
8983 VOS_ASSERT(0);
8984 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008985 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008986
Bernald44a1ae2013-01-09 08:30:39 -08008987 pWdaParams->pWdaContext = (void*)pWDA;
8988 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
8989 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008990
8991 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8992 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008993
8994 if(IS_WDI_STATUS_FAILURE(status))
8995 {
8996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8997 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8999 vos_mem_free(pWdaParams->wdaMsgParam);
9000 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009001 }
9002 return CONVERT_WDI2VOS_STATUS(status) ;
9003}
9004#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009005/*
9006 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9007 *
9008 */
9009void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
9010{
9011 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009013 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009014 if(NULL == pWdaParams)
9015 {
9016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009017 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 VOS_ASSERT(0) ;
9019 return ;
9020 }
9021
9022 if(NULL != pWdaParams->wdaMsgParam)
9023 {
9024 vos_mem_free(pWdaParams->wdaMsgParam);
9025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009026 if(NULL != pWdaParams->wdaWdiApiMsgParam)
9027 {
9028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9029 }
9030
9031 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009032 return ;
9033}
Jeff Johnson295189b2012-06-20 16:38:30 -07009034#ifdef WLAN_FEATURE_GTK_OFFLOAD
9035/*
9036 * FUNCTION: WDA_HostOffloadReqCallback
9037 *
9038 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009039void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
9040 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009041{
9042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9043
9044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009045 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009046
9047 VOS_ASSERT(NULL != pWdaParams);
9048
9049 vos_mem_free(pWdaParams->wdaMsgParam) ;
9050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9051 vos_mem_free(pWdaParams) ;
9052
9053 //print a msg, nothing else to do
9054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9055 "WDA_GTKOffloadReqCallback invoked " );
9056
9057 return ;
9058}
9059
9060/*
9061 * FUNCTION: WDA_ProcessGTKOffloadReq
9062 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9063 * to broadcast traffic (sta mode).
9064 */
9065VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9066 tpSirGtkOffloadParams pGtkOffloadParams)
9067{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309068 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009069 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9070 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9071 sizeof(WDI_GtkOffloadReqMsg)) ;
9072 tWDA_ReqParams *pWdaParams ;
9073
9074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009075 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009076
9077 if(NULL == wdiGtkOffloadReqMsg)
9078 {
9079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009081 VOS_ASSERT(0);
9082 return VOS_STATUS_E_NOMEM;
9083 }
9084
9085 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9086 if(NULL == pWdaParams)
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 vos_mem_free(wdiGtkOffloadReqMsg);
9092 return VOS_STATUS_E_NOMEM;
9093 }
9094
9095 //
9096 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9097 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009098
9099 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309100 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009101
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9103 // Copy KCK
9104 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9105 // Copy KEK
9106 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9107 // Copy KeyReplayCounter
9108 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9109 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9110
9111 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
9112
Jeff Johnson295189b2012-06-20 16:38:30 -07009113
9114 /* Store Params pass it to WDI */
9115 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
9116 pWdaParams->pWdaContext = pWDA;
9117 /* Store param pointer as passed in by caller */
9118 pWdaParams->wdaMsgParam = pGtkOffloadParams;
9119
9120 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
9121
9122 if(IS_WDI_STATUS_FAILURE(status))
9123 {
9124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9125 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
9126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9127 vos_mem_free(pWdaParams->wdaMsgParam);
9128 vos_mem_free(pWdaParams);
9129 }
9130
9131 return CONVERT_WDI2VOS_STATUS(status) ;
9132}
9133
9134/*
9135 * FUNCTION: WDA_GtkOffloadGetInfoCallback
9136 *
9137 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009138void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
9139 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009140{
9141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9142 tWDA_CbContext *pWDA;
9143 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
9144 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009145 vos_msg_t vosMsg;
9146
9147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009148 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009149
9150 VOS_ASSERT(NULL != pWdaParams);
9151
9152 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9153 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
9154
9155 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
9156 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
9157
9158 /* Message Header */
9159 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9160 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
9161
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009162 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
9163 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
9164 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
9165 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
9166 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009167
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309168 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
9169 pwdiGtkOffloadGetInfoRsparams->bssId,
9170 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009171 /* VOS message wrapper */
9172 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9173 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
9174 vosMsg.bodyval = 0;
9175
9176 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
9177 {
9178 /* free the mem and return */
9179 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
9180 }
9181
9182 vos_mem_free(pWdaParams->wdaMsgParam) ;
9183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9184 vos_mem_free(pWdaParams) ;
9185}
9186#endif
9187
9188/*
9189 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
9190 * Request to WDI to set Tx Per Tracking configurations
9191 */
9192VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
9193{
9194 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009195 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009196 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
9197 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
9198 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
9199 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009201 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009202 if(NULL == pwdiSetTxPerTrackingReqParams)
9203 {
9204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 vos_mem_free(pTxPerTrackingParams);
9207 VOS_ASSERT(0);
9208 return VOS_STATUS_E_NOMEM;
9209 }
9210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9211 if(NULL == pWdaParams)
9212 {
9213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009214 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 vos_mem_free(pwdiSetTxPerTrackingReqParams);
9216 vos_mem_free(pTxPerTrackingParams);
9217 VOS_ASSERT(0);
9218 return VOS_STATUS_E_NOMEM;
9219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009220 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
9221 pTxPerTrackingParams->ucTxPerTrackingEnable;
9222 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
9223 pTxPerTrackingParams->ucTxPerTrackingPeriod;
9224 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
9225 pTxPerTrackingParams->ucTxPerTrackingRatio;
9226 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
9227 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009229 /* Store param pointer as passed in by caller */
9230 /* store Params pass it to WDI
9231 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
9232 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
9233 pWdaParams->pWdaContext = pWDA;
9234 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009235 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07009236 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009237 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009238 {
9239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9240 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009241 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009242 vos_mem_free(pWdaParams->wdaMsgParam) ;
9243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9244 vos_mem_free(pWdaParams) ;
9245 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009246 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009247
9248}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009249/*
9250 * FUNCTION: WDA_HALDumpCmdCallback
9251 * Send the VOS complete .
9252 */
9253void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
9254 void* pUserData)
9255{
9256 tANI_U8 *buffer = NULL;
9257 tWDA_CbContext *pWDA = NULL;
9258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 if(NULL == pWdaParams)
9260 {
9261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009262 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009263 VOS_ASSERT(0) ;
9264 return ;
9265 }
9266
9267 pWDA = pWdaParams->pWdaContext;
9268 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 if(wdiRspParams->usBufferLen > 0)
9270 {
9271 /*Copy the Resp data to UMAC supplied buffer*/
9272 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
9273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9275 vos_mem_free(pWdaParams);
9276
9277 /* Indicate VOSS about the start complete */
9278 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 return ;
9280}
9281
Jeff Johnson295189b2012-06-20 16:38:30 -07009282/*
9283 * FUNCTION: WDA_ProcessHALDumpCmdReq
9284 * Send Dump command to WDI
9285 */
9286VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9287 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9288 tANI_U32 arg4, tANI_U8 *pBuffer)
9289{
9290 WDI_Status status = WDI_STATUS_SUCCESS;
9291 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9292 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9293 tWDA_ReqParams *pWdaParams ;
9294 pVosContextType pVosContext = NULL;
9295 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009296 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9297 (void *)pMac);
9298
9299 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9300 if(NULL == pWdaParams)
9301 {
9302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009303 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009304 return VOS_STATUS_E_NOMEM;
9305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 /* Allocate memory WDI request structure*/
9307 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9308 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9309 if(NULL == wdiHALDumpCmdReqParam)
9310 {
9311 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9312 "WDA HAL DUMP Command buffer alloc fail");
9313 vos_mem_free(pWdaParams);
9314 return WDI_STATUS_E_FAILURE;
9315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009317 /* Extract the arguments */
9318 wdiHalDumpCmdInfo->command = cmd;
9319 wdiHalDumpCmdInfo->argument1 = arg1;
9320 wdiHalDumpCmdInfo->argument2 = arg2;
9321 wdiHalDumpCmdInfo->argument3 = arg3;
9322 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9325
9326 /* Response message will be passed through the buffer */
9327 pWdaParams->wdaMsgParam = (void *)pBuffer;
9328
9329 /* store Params pass it to WDI */
9330 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 /* Send command to WDI */
9332 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -08009333 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 if ( vStatus != VOS_STATUS_SUCCESS )
9335 {
9336 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9337 {
9338 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -08009339 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 }
9341 else
9342 {
9343 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009344 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 }
9346 VOS_ASSERT(0);
9347 }
9348 return status;
9349}
Jeff Johnson295189b2012-06-20 16:38:30 -07009350#ifdef WLAN_FEATURE_GTK_OFFLOAD
9351/*
9352 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9353 * Request to WDI to get GTK Offload Information
9354 */
9355VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9356 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9357{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309358 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009359 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9360 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9361 tWDA_ReqParams *pWdaParams ;
9362
9363 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9364 {
9365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009366 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 VOS_ASSERT(0);
9368 return VOS_STATUS_E_NOMEM;
9369 }
9370
9371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9372 if(NULL == pWdaParams)
9373 {
9374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 VOS_ASSERT(0);
9377 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9378 return VOS_STATUS_E_NOMEM;
9379 }
9380
9381 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9382
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 /* Store Params pass it to WDI */
9384 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9385 pWdaParams->pWdaContext = pWDA;
9386 /* Store param pointer as passed in by caller */
9387 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9388
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009389 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309390 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009391
Jeff Johnson295189b2012-06-20 16:38:30 -07009392 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9393
9394 if(IS_WDI_STATUS_FAILURE(status))
9395 {
9396 /* failure returned by WDI API */
9397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9398 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9400 vos_mem_free(pWdaParams) ;
9401 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9402 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9403 }
9404
9405 return CONVERT_WDI2VOS_STATUS(status) ;
9406}
9407#endif // WLAN_FEATURE_GTK_OFFLOAD
9408
9409/*
9410 * -------------------------------------------------------------------------
9411 * DATA interface with WDI for Mgmt Frames
9412 * -------------------------------------------------------------------------
9413 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009414/*
9415 * FUNCTION: WDA_TxComplete
9416 * Callback function for the WDA_TxPacket
9417 */
9418VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9419 VOS_STATUS status )
9420{
9421
9422 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9423 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009424 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009425
9426 if(NULL == wdaContext)
9427 {
9428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9429 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009430 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009431 VOS_ASSERT(0);
9432 return VOS_STATUS_E_FAILURE;
9433 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009434
9435 /*Check if frame was timed out or not*/
9436 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9437 (v_PVOID_t)&uUserData);
9438
9439 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9440 {
9441 /*Discard frame - no further processing is needed*/
9442 vos_pkt_return_packet(pData);
9443 return VOS_STATUS_SUCCESS;
9444 }
9445
Jeff Johnson295189b2012-06-20 16:38:30 -07009446 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9447 if( NULL!=wdaContext->pTxCbFunc)
9448 {
9449 /*check if packet is freed already*/
9450 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9451 {
9452 wdaContext->pTxCbFunc(pMac, pData);
9453 }
9454 else
9455 {
9456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9457 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009458 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009459 //Return from here since we reaching here because the packet already timeout
9460 return status;
9461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009462 }
9463
9464 /*
9465 * Trigger the event to bring the HAL TL Tx complete function to come
9466 * out of wait
9467 * Let the coe above to complete the packet first. When this event is set,
9468 * the thread waiting for the event may run and set Vospacket_freed causing the original
9469 * packet not being freed.
9470 */
9471 status = vos_event_set(&wdaContext->txFrameEvent);
9472 if(!VOS_IS_STATUS_SUCCESS(status))
9473 {
9474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9475 "NEW VOS Event Set failed - status = %d \n", status);
9476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009477 return status;
9478}
Jeff Johnson295189b2012-06-20 16:38:30 -07009479/*
9480 * FUNCTION: WDA_TxPacket
9481 * Forward TX management frame to WDI
9482 */
9483VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9484 void *pFrmBuf,
9485 tANI_U16 frmLen,
9486 eFrameType frmType,
9487 eFrameTxDir txDir,
9488 tANI_U8 tid,
9489 pWDATxRxCompFunc pCompFunc,
9490 void *pData,
9491 pWDAAckFnTxComp pAckTxComp,
9492 tANI_U8 txFlag)
9493{
9494 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9495 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9496 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9497 tANI_U8 eventIdx = 0;
9498 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9499 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 if((NULL == pWDA)||(NULL == pFrmBuf))
9501 {
9502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9503 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009504 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 VOS_ASSERT(0);
9506 return VOS_STATUS_E_FAILURE;
9507 }
9508
9509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9510 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009511 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9512 if(NULL == pMac)
9513 {
9514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009515 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009516 VOS_ASSERT(0);
9517 return VOS_STATUS_E_FAILURE;
9518 }
9519
9520
9521
9522 /* store the call back function in WDA context */
9523 pWDA->pTxCbFunc = pCompFunc;
9524 /* store the call back for the function of ackTxComplete */
9525 if( pAckTxComp )
9526 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009527 if( NULL != pWDA->pAckTxCbFunc )
9528 {
9529 /* Already TxComp is active no need to active again */
9530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9531 "There is already one request pending for tx complete\n");
9532 pWDA->pAckTxCbFunc( pMac, 0);
9533 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009534
Jeff Johnsone7245742012-09-05 17:12:55 -07009535 if( VOS_STATUS_SUCCESS !=
9536 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9537 {
9538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9539 "Tx Complete timeout Timer Stop Failed ");
9540 }
9541 else
9542 {
9543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009544 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -07009545 }
9546 }
9547
9548 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9549 pWDA->pAckTxCbFunc = pAckTxComp;
9550 if( VOS_STATUS_SUCCESS !=
9551 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9552 {
9553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9554 "Tx Complete Timer Start Failed ");
9555 pWDA->pAckTxCbFunc = NULL;
9556 return eHAL_STATUS_FAILURE;
9557 }
9558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 /* Reset the event to be not signalled */
9560 status = vos_event_reset(&pWDA->txFrameEvent);
9561 if(!VOS_IS_STATUS_SUCCESS(status))
9562 {
9563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9564 "VOS Event reset failed - status = %d\n",status);
9565 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9566 if( pAckTxComp )
9567 {
9568 pWDA->pAckTxCbFunc = NULL;
9569 if( VOS_STATUS_SUCCESS !=
9570 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9571 {
9572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9573 "Tx Complete timeout Timer Stop Failed ");
9574 }
9575 }
9576 return VOS_STATUS_E_FAILURE;
9577 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009578
9579 /* If Peer Sta mask is set don't overwrite to self sta */
9580 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009582 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009583 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009584 else
9585 {
Ganesh K08bce952012-12-13 15:04:41 -08009586 /* Get system role, use the self station if in unknown role or STA role */
9587 systemRole = wdaGetGlobalSystemRole(pMac);
9588 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9589 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009590#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -08009591 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009592#endif
Ganesh K08bce952012-12-13 15:04:41 -08009593 ))
9594 {
9595 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9596 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009598
Jeff Johnsone7245742012-09-05 17:12:55 -07009599 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9600 disassoc frame reaches the HW, HAL has already deleted the peer station */
9601 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009602 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009603 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009604 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009605 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 /*Send Probe request frames on self sta idx*/
9607 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009608 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009609 /* Since we donot want probe responses to be retried, send probe responses
9610 through the NO_ACK queues */
9611 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9612 {
9613 //probe response is sent out using self station and no retries options.
9614 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9615 }
9616 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9617 {
9618 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9619 }
9620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009621 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9622
9623 /*Set frame tag to 0
9624 We will use the WDA user data in order to tag a frame as expired*/
9625 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9626 (v_PVOID_t)0);
9627
9628
9629 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9630 frmLen, ucTypeSubType, tid,
9631 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9632 {
9633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9634 "Sending Mgmt Frame failed - status = %d\n", status);
9635 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9636 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9637 if( pAckTxComp )
9638 {
9639 pWDA->pAckTxCbFunc = NULL;
9640 if( VOS_STATUS_SUCCESS !=
9641 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9642 {
9643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9644 "Tx Complete timeout Timer Stop Failed ");
9645 }
9646 }
9647 return VOS_STATUS_E_FAILURE;
9648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009649 /*
9650 * Wait for the event to be set by the TL, to get the response of TX
9651 * complete, this event should be set by the Callback function called by TL
9652 */
9653 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9654 &eventIdx);
9655 if(!VOS_IS_STATUS_SUCCESS(status))
9656 {
9657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9658 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009659 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009660 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9661 after the packet gets completed(packet freed once)*/
9662
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009663 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -07009664 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009665
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009666 /*Tag Frame as timed out for later deletion*/
9667 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9668 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9669
Jeff Johnson295189b2012-06-20 16:38:30 -07009670 /* check whether the packet was freed already,so need not free again when
9671 * TL calls the WDA_Txcomplete routine
9672 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009673 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9674 /*if(vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -07009675 {
9676 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009677 } */
9678
Jeff Johnson295189b2012-06-20 16:38:30 -07009679 if( pAckTxComp )
9680 {
9681 pWDA->pAckTxCbFunc = NULL;
9682 if( VOS_STATUS_SUCCESS !=
9683 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9684 {
9685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9686 "Tx Complete timeout Timer Stop Failed ");
9687 }
9688 }
9689 status = VOS_STATUS_E_FAILURE;
9690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009691 return status;
9692}
Jeff Johnson295189b2012-06-20 16:38:30 -07009693/*
9694 * FUNCTION: WDA_McProcessMsg
9695 * Trigger DAL-AL to start CFG download
9696 */
9697VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9698{
9699 VOS_STATUS status = VOS_STATUS_SUCCESS;
9700 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 if(NULL == pMsg)
9702 {
9703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009704 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009705 VOS_ASSERT(0);
9706 return VOS_STATUS_E_FAILURE;
9707 }
9708
9709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009710 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009711
9712 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9713 if(NULL == pWDA )
9714 {
9715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009716 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009717 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009718 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009719 return VOS_STATUS_E_FAILURE;
9720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009721 /* Process all the WDA messages.. */
9722 switch( pMsg->type )
9723 {
9724 case WNI_CFG_DNLD_REQ:
9725 {
9726 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 /* call WDA complete event if config download success */
9728 if( VOS_IS_STATUS_SUCCESS(status) )
9729 {
9730 vos_WDAComplete_cback(pVosContext);
9731 }
9732 else
9733 {
9734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9735 "WDA Config Download failure" );
9736 }
9737 break ;
9738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009739 /*
9740 * Init SCAN request from PE, convert it into DAL format
9741 * and send it to DAL
9742 */
9743 case WDA_INIT_SCAN_REQ:
9744 {
9745 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9746 break ;
9747 }
9748 /* start SCAN request from PE */
9749 case WDA_START_SCAN_REQ:
9750 {
9751 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9752 break ;
9753 }
9754 /* end SCAN request from PE */
9755 case WDA_END_SCAN_REQ:
9756 {
9757 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9758 break ;
9759 }
9760 /* end SCAN request from PE */
9761 case WDA_FINISH_SCAN_REQ:
9762 {
9763 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9764 break ;
9765 }
9766 /* join request from PE */
9767 case WDA_CHNL_SWITCH_REQ:
9768 {
9769 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9770 {
9771 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9772 }
9773 else
9774 {
9775 WDA_ProcessChannelSwitchReq(pWDA,
9776 (tSwitchChannelParams*)pMsg->bodyptr) ;
9777 }
9778 break ;
9779 }
9780 /* ADD BSS request from PE */
9781 case WDA_ADD_BSS_REQ:
9782 {
9783 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9784 break ;
9785 }
9786 case WDA_ADD_STA_REQ:
9787 {
9788 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9789 break ;
9790 }
9791 case WDA_DELETE_BSS_REQ:
9792 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009793 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9794 break ;
9795 }
9796 case WDA_DELETE_STA_REQ:
9797 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009798 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9799 break ;
9800 }
9801 case WDA_CONFIG_PARAM_UPDATE_REQ:
9802 {
9803 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9804 break ;
9805 }
9806 case WDA_SET_BSSKEY_REQ:
9807 {
9808 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9809 break ;
9810 }
9811 case WDA_SET_STAKEY_REQ:
9812 {
9813 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9814 break ;
9815 }
9816 case WDA_SET_STA_BCASTKEY_REQ:
9817 {
9818 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9819 break ;
9820 }
9821 case WDA_REMOVE_BSSKEY_REQ:
9822 {
9823 WDA_ProcessRemoveBssKeyReq(pWDA,
9824 (tRemoveBssKeyParams *)pMsg->bodyptr);
9825 break ;
9826 }
9827 case WDA_REMOVE_STAKEY_REQ:
9828 {
9829 WDA_ProcessRemoveStaKeyReq(pWDA,
9830 (tRemoveStaKeyParams *)pMsg->bodyptr);
9831 break ;
9832 }
9833 case WDA_REMOVE_STA_BCASTKEY_REQ:
9834 {
9835 /* TODO: currently UMAC is not sending this request, Add the code for
9836 handling this request when UMAC supports */
9837 break;
9838 }
9839#ifdef FEATURE_WLAN_CCX
9840 case WDA_TSM_STATS_REQ:
9841 {
9842 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9843 break;
9844 }
9845#endif
9846 case WDA_UPDATE_EDCA_PROFILE_IND:
9847 {
9848 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9849 break;
9850 }
9851 case WDA_ADD_TS_REQ:
9852 {
9853 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9854 break;
9855 }
9856 case WDA_DEL_TS_REQ:
9857 {
9858 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9859 break;
9860 }
9861 case WDA_ADDBA_REQ:
9862 {
9863 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9864 break;
9865 }
9866 case WDA_DELBA_IND:
9867 {
9868 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9869 break;
9870 }
9871 case WDA_SET_LINK_STATE:
9872 {
9873 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9874 break;
9875 }
9876 case WDA_GET_STATISTICS_REQ:
9877 {
9878 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9879 break;
9880 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08009881#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
9882 case WDA_GET_ROAM_RSSI_REQ:
9883 {
9884 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
9885 break;
9886 }
9887#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009888 case WDA_PWR_SAVE_CFG:
9889 {
9890 if(pWDA->wdaState == WDA_READY_STATE)
9891 {
9892 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9893 }
9894 else
9895 {
9896 if(NULL != pMsg->bodyptr)
9897 {
9898 vos_mem_free(pMsg->bodyptr);
9899 }
9900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9901 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9902 }
9903 break;
9904 }
9905 case WDA_ENTER_IMPS_REQ:
9906 {
9907 if(pWDA->wdaState == WDA_READY_STATE)
9908 {
9909 WDA_ProcessEnterImpsReq(pWDA);
9910 }
9911 else
9912 {
9913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9914 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9915 }
9916 break;
9917 }
9918 case WDA_EXIT_IMPS_REQ:
9919 {
9920 if(pWDA->wdaState == WDA_READY_STATE)
9921 {
9922 WDA_ProcessExitImpsReq(pWDA);
9923 }
9924 else
9925 {
9926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9927 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9928 }
9929 break;
9930 }
9931 case WDA_ENTER_BMPS_REQ:
9932 {
9933 if(pWDA->wdaState == WDA_READY_STATE)
9934 {
9935 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9936 }
9937 else
9938 {
9939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9940 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9941 }
9942 break;
9943 }
9944 case WDA_EXIT_BMPS_REQ:
9945 {
9946 if(pWDA->wdaState == WDA_READY_STATE)
9947 {
9948 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9949 }
9950 else
9951 {
9952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9953 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9954 }
9955 break;
9956 }
9957 case WDA_ENTER_UAPSD_REQ:
9958 {
9959 if(pWDA->wdaState == WDA_READY_STATE)
9960 {
9961 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9962 }
9963 else
9964 {
9965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9966 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9967 }
9968 break;
9969 }
9970 case WDA_EXIT_UAPSD_REQ:
9971 {
9972 if(pWDA->wdaState == WDA_READY_STATE)
9973 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009974 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009975 }
9976 else
9977 {
9978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9979 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9980 }
9981 break;
9982 }
9983 case WDA_UPDATE_UAPSD_IND:
9984 {
9985 if(pWDA->wdaState == WDA_READY_STATE)
9986 {
9987 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9988 }
9989 else
9990 {
9991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9992 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9993 }
9994 break;
9995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009996 case WDA_REGISTER_PE_CALLBACK :
9997 {
9998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9999 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10000 /*TODO: store the PE callback */
10001 /* Do Nothing? MSG Body should be freed at here */
10002 if(NULL != pMsg->bodyptr)
10003 {
10004 vos_mem_free(pMsg->bodyptr);
10005 }
10006 break;
10007 }
10008 case WDA_SYS_READY_IND :
10009 {
10010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10011 "Handling msg type WDA_SYS_READY_IND " );
10012 pWDA->wdaState = WDA_READY_STATE;
10013 if(NULL != pMsg->bodyptr)
10014 {
10015 vos_mem_free(pMsg->bodyptr);
10016 }
10017 break;
10018 }
10019 case WDA_BEACON_FILTER_IND :
10020 {
10021 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
10022 break;
10023 }
10024 case WDA_BTC_SET_CFG:
10025 {
10026 /*TODO: handle this while dealing with BTC */
10027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10028 "Handling msg type WDA_BTC_SET_CFG " );
10029 /* Do Nothing? MSG Body should be freed at here */
10030 if(NULL != pMsg->bodyptr)
10031 {
10032 vos_mem_free(pMsg->bodyptr);
10033 }
10034 break;
10035 }
10036 case WDA_SIGNAL_BT_EVENT:
10037 {
10038 /*TODO: handle this while dealing with BTC */
10039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10040 "Handling msg type WDA_SIGNAL_BT_EVENT " );
10041 /* Do Nothing? MSG Body should be freed at here */
10042 if(NULL != pMsg->bodyptr)
10043 {
10044 vos_mem_free(pMsg->bodyptr);
10045 }
10046 break;
10047 }
10048 case WDA_CFG_RXP_FILTER_REQ:
10049 {
10050 WDA_ProcessConfigureRxpFilterReq(pWDA,
10051 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
10052 break;
10053 }
10054 case WDA_SET_HOST_OFFLOAD:
10055 {
10056 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10057 break;
10058 }
10059 case WDA_SET_KEEP_ALIVE:
10060 {
10061 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
10062 break;
10063 }
10064#ifdef WLAN_NS_OFFLOAD
10065 case WDA_SET_NS_OFFLOAD:
10066 {
10067 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10068 break;
10069 }
10070#endif //WLAN_NS_OFFLOAD
10071 case WDA_ADD_STA_SELF_REQ:
10072 {
10073 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
10074 break;
10075 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010076 case WDA_DEL_STA_SELF_REQ:
10077 {
10078 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
10079 break;
10080 }
10081 case WDA_WOWL_ADD_BCAST_PTRN:
10082 {
10083 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
10084 break;
10085 }
10086 case WDA_WOWL_DEL_BCAST_PTRN:
10087 {
10088 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
10089 break;
10090 }
10091 case WDA_WOWL_ENTER_REQ:
10092 {
10093 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
10094 break;
10095 }
10096 case WDA_WOWL_EXIT_REQ:
10097 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010098 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010099 break;
10100 }
10101 case WDA_TL_FLUSH_AC_REQ:
10102 {
10103 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
10104 break;
10105 }
10106 case WDA_SIGNAL_BTAMP_EVENT:
10107 {
10108 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
10109 break;
10110 }
10111#ifdef WDA_UT
10112 case WDA_WDI_EVENT_MSG:
10113 {
10114 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
10115 break ;
10116 }
10117#endif
10118 case WDA_UPDATE_BEACON_IND:
10119 {
10120 WDA_ProcessUpdateBeaconParams(pWDA,
10121 (tUpdateBeaconParams *)pMsg->bodyptr);
10122 break;
10123 }
10124 case WDA_SEND_BEACON_REQ:
10125 {
10126 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
10127 break;
10128 }
10129 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
10130 {
10131 WDA_ProcessUpdateProbeRspTemplate(pWDA,
10132 (tSendProbeRespParams *)pMsg->bodyptr);
10133 break;
10134 }
10135#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
10136 case WDA_SET_MAX_TX_POWER_REQ:
10137 {
10138 WDA_ProcessSetMaxTxPowerReq(pWDA,
10139 (tMaxTxPowerParams *)pMsg->bodyptr);
10140 break;
10141 }
10142#endif
schang86c22c42013-03-13 18:41:24 -070010143 case WDA_SET_TX_POWER_REQ:
10144 {
10145 WDA_ProcessSetTxPowerReq(pWDA,
10146 (tSirSetTxPowerReq *)pMsg->bodyptr);
10147 break;
10148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010149 case WDA_SET_P2P_GO_NOA_REQ:
10150 {
10151 WDA_ProcessSetP2PGONOAReq(pWDA,
10152 (tP2pPsParams *)pMsg->bodyptr);
10153 break;
10154 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010155 /* timer related messages */
10156 case WDA_TIMER_BA_ACTIVITY_REQ:
10157 {
10158 WDA_BaCheckActivity(pWDA) ;
10159 break ;
10160 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010161
10162 /* timer related messages */
10163 case WDA_TIMER_TRAFFIC_STATS_IND:
10164 {
10165 WDA_TimerTrafficStatsInd(pWDA);
10166 break;
10167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010168#ifdef WLAN_FEATURE_VOWIFI_11R
10169 case WDA_AGGR_QOS_REQ:
10170 {
10171 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
10172 break;
10173 }
10174#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070010175 case WDA_FTM_CMD_REQ:
10176 {
10177 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
10178 break ;
10179 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010180#ifdef FEATURE_OEM_DATA_SUPPORT
10181 case WDA_START_OEM_DATA_REQ:
10182 {
10183 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
10184 break;
10185 }
10186#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010187 /* Tx Complete Time out Indication */
10188 case WDA_TX_COMPLETE_TIMEOUT_IND:
10189 {
10190 WDA_ProcessTxCompleteTimeOutInd(pWDA);
10191 break;
10192 }
10193 case WDA_WLAN_SUSPEND_IND:
10194 {
10195 WDA_ProcessWlanSuspendInd(pWDA,
10196 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
10197 break;
10198 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010199 case WDA_WLAN_RESUME_REQ:
10200 {
10201 WDA_ProcessWlanResumeReq(pWDA,
10202 (tSirWlanResumeParam *)pMsg->bodyptr) ;
10203 break;
10204 }
10205
10206 case WDA_UPDATE_CF_IND:
10207 {
10208 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
10209 pMsg->bodyptr = NULL;
10210 break;
10211 }
10212#ifdef FEATURE_WLAN_SCAN_PNO
10213 case WDA_SET_PNO_REQ:
10214 {
10215 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
10216 break;
10217 }
10218 case WDA_UPDATE_SCAN_PARAMS_REQ:
10219 {
10220 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
10221 break;
10222 }
10223 case WDA_SET_RSSI_FILTER_REQ:
10224 {
10225 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
10226 break;
10227 }
10228#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 case WDA_SET_TX_PER_TRACKING_REQ:
10230 {
10231 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
10232 break;
10233 }
10234
10235#ifdef WLAN_FEATURE_PACKET_FILTERING
10236 case WDA_8023_MULTICAST_LIST_REQ:
10237 {
10238 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
10239 break;
10240 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010241 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
10242 {
10243 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
10244 break;
10245 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
10247 {
10248 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
10249 break;
10250 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
10252 {
10253 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
10254 break;
10255 }
10256#endif // WLAN_FEATURE_PACKET_FILTERING
10257
10258
10259 case WDA_TRANSMISSION_CONTROL_IND:
10260 {
10261 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
10262 break;
10263 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 case WDA_SET_POWER_PARAMS_REQ:
10265 {
10266 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
10267 break;
10268 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010269#ifdef WLAN_FEATURE_GTK_OFFLOAD
10270 case WDA_GTK_OFFLOAD_REQ:
10271 {
10272 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
10273 break;
10274 }
10275
10276 case WDA_GTK_OFFLOAD_GETINFO_REQ:
10277 {
10278 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
10279 break;
10280 }
10281#endif //WLAN_FEATURE_GTK_OFFLOAD
10282
10283 case WDA_SET_TM_LEVEL_REQ:
10284 {
10285 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
10286 break;
10287 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070010288#ifdef WLAN_FEATURE_11AC
10289 case WDA_UPDATE_OP_MODE:
10290 {
10291 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
10292 {
10293 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10294 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10295 else
10296 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10297 " VHT OpMode Feature is Not Supported \n");
10298 }
10299 else
10300 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10301 " 11AC Feature is Not Supported \n");
10302 break;
10303 }
10304#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070010305#ifdef WLAN_FEATURE_11W
10306 case WDA_EXCLUDE_UNENCRYPTED_IND:
10307 {
10308 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
10309 break;
10310 }
10311#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010312 default:
10313 {
10314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10315 "No Handling for msg type %x in WDA "
10316 ,pMsg->type);
10317 /* Do Nothing? MSG Body should be freed at here */
10318 if(NULL != pMsg->bodyptr)
10319 {
10320 vos_mem_free(pMsg->bodyptr);
10321 }
10322 //WDA_VOS_ASSERT(0) ;
10323 }
10324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010325 return status ;
10326}
10327
Jeff Johnson295189b2012-06-20 16:38:30 -070010328/*
10329 * FUNCTION: WDA_LowLevelIndCallback
10330 * IND API callback from WDI, send Ind to PE
10331 */
10332void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10333 void* pUserData )
10334{
10335 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10336#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10337 tSirRSSINotification rssiNotification;
10338#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010339 if(NULL == pWDA)
10340 {
10341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010342 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 VOS_ASSERT(0);
10344 return ;
10345 }
10346
10347 switch(wdiLowLevelInd->wdiIndicationType)
10348 {
10349 case WDI_RSSI_NOTIFICATION_IND:
10350 {
10351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10352 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010353#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10354 rssiNotification.bReserved =
10355 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10356 rssiNotification.bRssiThres1NegCross =
10357 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10358 rssiNotification.bRssiThres1PosCross =
10359 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10360 rssiNotification.bRssiThres2NegCross =
10361 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10362 rssiNotification.bRssiThres2PosCross =
10363 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10364 rssiNotification.bRssiThres3NegCross =
10365 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10366 rssiNotification.bRssiThres3PosCross =
10367 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080010368 rssiNotification.avgRssi = (v_S7_t)
10369 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070010370 WLANTL_BMPSRSSIRegionChangedNotification(
10371 pWDA->pVosContext,
10372 &rssiNotification);
10373#endif
10374 break ;
10375 }
10376 case WDI_MISSED_BEACON_IND:
10377 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010378 tpSirSmeMissedBeaconInd pMissBeacInd =
10379 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10381 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010382 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010383 if(NULL == pMissBeacInd)
10384 {
10385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10386 "%s: VOS MEM Alloc Failure", __func__);
10387 break;
10388 }
10389 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
10390 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
10391 pMissBeacInd->bssIdx =
10392 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
10393 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 break ;
10395 }
10396 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10397 {
10398 /* TODO: Decode Ind and send Ind to PE */
10399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10400 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10401 break ;
10402 }
10403
10404 case WDI_MIC_FAILURE_IND:
10405 {
10406 tpSirSmeMicFailureInd pMicInd =
10407 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10408
10409 if(NULL == pMicInd)
10410 {
10411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010413 break;
10414 }
10415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10416 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010417 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10418 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10419 vos_mem_copy(pMicInd->bssId,
10420 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10421 sizeof(tSirMacAddr));
10422 vos_mem_copy(pMicInd->info.srcMacAddr,
10423 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10424 sizeof(tSirMacAddr));
10425 vos_mem_copy(pMicInd->info.taMacAddr,
10426 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10427 sizeof(tSirMacAddr));
10428 vos_mem_copy(pMicInd->info.dstMacAddr,
10429 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10430 sizeof(tSirMacAddr));
10431 vos_mem_copy(pMicInd->info.rxMacAddr,
10432 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10433 sizeof(tSirMacAddr));
10434 pMicInd->info.multicast =
10435 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10436 pMicInd->info.keyId=
10437 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10438 pMicInd->info.IV1=
10439 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10440 vos_mem_copy(pMicInd->info.TSC,
10441 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010442 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10443 (void *)pMicInd , 0) ;
10444 break ;
10445 }
10446 case WDI_FATAL_ERROR_IND:
10447 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010448 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010449 /* TODO: Decode Ind and send Ind to PE */
10450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10451 "Received WDI_FATAL_ERROR_IND from WDI ");
10452 break ;
10453 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010454 case WDI_DEL_STA_IND:
10455 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010456 tpDeleteStaContext pDelSTACtx =
10457 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10458
10459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10460 "Received WDI_DEL_STA_IND from WDI ");
10461 if(NULL == pDelSTACtx)
10462 {
10463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010465 break;
10466 }
10467 vos_mem_copy(pDelSTACtx->addr2,
10468 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10469 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010470 vos_mem_copy(pDelSTACtx->bssId,
10471 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10472 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010473 pDelSTACtx->assocId =
10474 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10475 pDelSTACtx->reasonCode =
10476 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10477 pDelSTACtx->staId =
10478 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010479 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10480 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 break ;
10482 }
10483 case WDI_COEX_IND:
10484 {
10485 tANI_U32 index;
10486 vos_msg_t vosMsg;
10487 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10488 if(NULL == pSmeCoexInd)
10489 {
10490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010491 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010492 break;
10493 }
10494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10495 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010496 /* Message Header */
10497 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10498 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010499 /* Info from WDI Indication */
10500 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10501 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10502 {
10503 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010505 /* VOS message wrapper */
10506 vosMsg.type = eWNI_SME_COEX_IND;
10507 vosMsg.bodyptr = (void *)pSmeCoexInd;
10508 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010509 /* Send message to SME */
10510 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10511 {
10512 /* free the mem and return */
10513 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10514 }
10515 else
10516 {
10517 /* DEBUG */
10518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10519 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10520 pSmeCoexInd->coexIndType,
10521 pSmeCoexInd->coexIndData[0],
10522 pSmeCoexInd->coexIndData[1],
10523 pSmeCoexInd->coexIndData[2],
10524 pSmeCoexInd->coexIndData[3]);
10525 }
10526 break;
10527 }
10528 case WDI_TX_COMPLETE_IND:
10529 {
10530 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10531 /* Calling TxCompleteAck Indication from wda context*/
10532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10533 "Complete Indication received from HAL");
10534 if( pWDA->pAckTxCbFunc )
10535 {
10536 if( VOS_STATUS_SUCCESS !=
10537 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10538 {
10539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10540 "Tx Complete timeout Timer Stop Failed ");
10541 }
10542 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10543 pWDA->pAckTxCbFunc = NULL;
10544 }
10545 else
10546 {
10547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10548 "Tx Complete Indication is received after timeout ");
10549 }
10550 break;
10551 }
Viral Modid86bde22012-12-10 13:09:21 -080010552 case WDI_P2P_NOA_START_IND :
10553 {
10554 tSirP2PNoaStart *pP2pNoaStart =
10555 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
10556
10557 if (NULL == pP2pNoaStart)
10558 {
10559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10560 "Memory allocation failure, "
10561 "WDI_P2P_NOA_START_IND not forwarded");
10562 break;
10563 }
10564 pP2pNoaStart->status =
10565 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
10566 pP2pNoaStart->bssIdx =
10567 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
10568 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
10569 (void *)pP2pNoaStart , 0) ;
10570 break;
10571 }
10572
Jeff Johnson295189b2012-06-20 16:38:30 -070010573 case WDI_P2P_NOA_ATTR_IND :
10574 {
10575 tSirP2PNoaAttr *pP2pNoaAttr =
10576 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10578 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010579 if (NULL == pP2pNoaAttr)
10580 {
10581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10582 "Memory allocation failure, "
10583 "WDI_P2P_NOA_ATTR_IND not forwarded");
10584 break;
10585 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010586 pP2pNoaAttr->index =
10587 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10588 pP2pNoaAttr->oppPsFlag =
10589 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10590 pP2pNoaAttr->ctWin =
10591 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10592
10593 pP2pNoaAttr->uNoa1IntervalCnt =
10594 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10595 pP2pNoaAttr->uNoa1Duration =
10596 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10597 pP2pNoaAttr->uNoa1Interval =
10598 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10599 pP2pNoaAttr->uNoa1StartTime =
10600 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010601 pP2pNoaAttr->uNoa2IntervalCnt =
10602 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10603 pP2pNoaAttr->uNoa2Duration =
10604 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10605 pP2pNoaAttr->uNoa2Interval =
10606 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10607 pP2pNoaAttr->uNoa2StartTime =
10608 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010609 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10610 (void *)pP2pNoaAttr , 0) ;
10611 break;
10612 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010613#ifdef FEATURE_WLAN_SCAN_PNO
10614 case WDI_PREF_NETWORK_FOUND_IND:
10615 {
10616 vos_msg_t vosMsg;
10617 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10619 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010620 if (NULL == pPrefNetworkFoundInd)
10621 {
10622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10623 "Memory allocation failure, "
10624 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10625 break;
10626 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010627 /* Message Header */
10628 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10629 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10630
10631 /* Info from WDI Indication */
10632 pPrefNetworkFoundInd->ssId.length =
10633 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010634 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010635 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10636 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10637 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010638 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010639 /* VOS message wrapper */
10640 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10641 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10642 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010643 /* Send message to SME */
10644 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10645 {
10646 /* free the mem and return */
10647 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10648 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010649 break;
10650 }
10651#endif // FEATURE_WLAN_SCAN_PNO
10652
10653#ifdef WLAN_WAKEUP_EVENTS
10654 case WDI_WAKE_REASON_IND:
10655 {
10656 vos_msg_t vosMsg;
10657 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10658 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10659 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10660
10661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10662 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10663 wdiLowLevelInd->wdiIndicationType,
10664 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10665 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10666 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10667
10668 if (NULL == pWakeReasonInd)
10669 {
10670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10671 "Memory allocation failure, "
10672 "WDI_WAKE_REASON_IND not forwarded");
10673 break;
10674 }
10675
10676 vos_mem_zero(pWakeReasonInd, allocSize);
10677
10678 /* Message Header */
10679 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10680 pWakeReasonInd->mesgLen = allocSize;
10681
10682 /* Info from WDI Indication */
10683 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10684 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10685 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10686 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10687 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10688 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10689 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10690 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10691
10692 /* VOS message wrapper */
10693 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10694 vosMsg.bodyptr = (void *) pWakeReasonInd;
10695 vosMsg.bodyval = 0;
10696
10697 /* Send message to SME */
10698 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10699 {
10700 /* free the mem and return */
10701 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10702 }
10703
10704 break;
10705 }
10706#endif // WLAN_WAKEUP_EVENTS
10707
10708 case WDI_TX_PER_HIT_IND:
10709 {
10710 vos_msg_t vosMsg;
10711 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10712 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10713 /* VOS message wrapper */
10714 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10715 vosMsg.bodyptr = NULL;
10716 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010717 /* Send message to SME */
10718 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10719 {
10720 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10721 }
10722 break;
10723 }
10724
10725 default:
10726 {
10727 /* TODO error */
10728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10729 "Received UNKNOWN Indication from WDI ");
10730 }
10731 }
10732 return ;
10733}
10734
Jeff Johnson295189b2012-06-20 16:38:30 -070010735/*
10736 * BA related processing in WDA.
10737 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010738void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10739 void* pUserData)
10740{
10741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10742 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 if(NULL == pWdaParams)
10744 {
10745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010746 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010747 VOS_ASSERT(0) ;
10748 return ;
10749 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 vos_mem_free(pWdaParams->wdaMsgParam) ;
10752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10753 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010755 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010756 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10757 {
10758 tANI_U8 i = 0 ;
10759 tBaActivityInd *baActivityInd = NULL ;
10760 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10761 tANI_U8 allocSize = sizeof(tBaActivityInd)
10762 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10763 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10764 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010765 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010766 if(NULL == baActivityInd)
10767 {
10768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010769 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010770 VOS_ASSERT(0) ;
10771 return;
10772 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010773 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10774 sizeof(tSirMacAddr)) ;
10775 baActivityInd->baCandidateCnt = baCandidateCount ;
10776
10777 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10778 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10779
10780 for(i = 0 ; i < baCandidateCount ; i++)
10781 {
10782 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010783 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10784 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010785 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10786 {
10787 baCandidate->baInfo[tid].fBaEnable =
10788 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10789 baCandidate->baInfo[tid].startingSeqNum =
10790 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10791 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010792 wdiBaCandidate++ ;
10793 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010794 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010795 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10796 }
10797 else
10798 {
10799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10800 "BA Trigger RSP with Failure received ");
10801 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010802 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010803}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010804
10805
10806/*
10807 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
10808 * during MCC
10809 */
10810void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
10811{
10812 wpt_uint32 enabled;
10813 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
10814 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
10815 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
10816
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053010817 if (NULL == pMac )
10818 {
10819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10820 "%s: Invoked with invalid MAC context ", __func__ );
10821 VOS_ASSERT(0);
10822 return;
10823 }
10824
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010825 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10826 != eSIR_SUCCESS)
10827 {
10828 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10829 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10830 return;
10831 }
10832
10833 if(!enabled)
10834 {
10835 return;
10836 }
10837
10838 if(NULL == pWDA)
10839 {
10840 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10841 "%s:WDA context is NULL", __func__);
10842 VOS_ASSERT(0);
10843 return;
10844 }
10845
10846 if(activate)
10847 {
10848 if( VOS_STATUS_SUCCESS !=
10849 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10850 {
10851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10852 "Traffic Stats Timer Start Failed ");
10853 return;
10854 }
10855 WDI_DS_ActivateTrafficStats();
10856 }
10857 else
10858 {
10859 WDI_DS_DeactivateTrafficStats();
10860 WDI_DS_ClearTrafficStats();
10861
10862 if( VOS_STATUS_SUCCESS !=
10863 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10864 {
10865 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10866 "Traffic Stats Timer Stop Failed ");
10867 return;
10868 }
10869 }
10870}
10871
10872/*
10873 * Traffic Stats Timer handler
10874 */
10875void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
10876{
10877 WDI_Status wdiStatus;
10878 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
10879 WDI_TrafficStatsIndType trafficStatsIndParams;
10880 wpt_uint32 length, enabled;
10881 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10882
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053010883 if (NULL == pMac )
10884 {
10885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10886 "%s: Invoked with invalid MAC context ", __func__ );
10887 VOS_ASSERT(0);
10888 return;
10889 }
10890
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010891 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10892 != eSIR_SUCCESS)
10893 {
10894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10895 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10896 return;
10897 }
10898
10899 if(!enabled)
10900 {
10901 WDI_DS_DeactivateTrafficStats();
10902 return;
10903 }
10904
10905 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
10906
10907 if(pWdiTrafficStats != NULL)
10908 {
10909 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
10910 trafficStatsIndParams.length = length;
10911 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080010912 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010913 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10914 trafficStatsIndParams.pUserData = pWDA;
10915
10916 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
10917
10918 if(WDI_STATUS_PENDING == wdiStatus)
10919 {
10920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10921 "Pending received for %s:%d ",__func__,__LINE__ );
10922 }
10923 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10924 {
10925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10926 "Failure in %s:%d ",__func__,__LINE__ );
10927 }
10928
10929 WDI_DS_ClearTrafficStats();
10930 }
10931 else
10932 {
10933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10934 "pWdiTrafficStats is Null");
10935 }
10936
10937 if( VOS_STATUS_SUCCESS !=
10938 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10939 {
10940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10941 "Traffic Stats Timer Start Failed ");
10942 return;
10943 }
10944}
10945
Jeff Johnson295189b2012-06-20 16:38:30 -070010946/*
10947 * BA Activity check timer handler
10948 */
10949void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10950{
10951 tANI_U8 curSta = 0 ;
10952 tANI_U8 tid = 0 ;
10953 tANI_U8 size = 0 ;
10954 tANI_U8 baCandidateCount = 0 ;
10955 tANI_U8 newBaCandidate = 0 ;
10956 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10957
10958 if(NULL == pWDA)
10959 {
10960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010961 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010962 VOS_ASSERT(0);
10963 return ;
10964 }
10965 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10966 {
10967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10968 "Inconsistent STA entries in WDA");
10969 VOS_ASSERT(0) ;
10970 }
10971 /* walk through all STA entries and find out TX packet count */
10972 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10973 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080010974#ifdef WLAN_SOFTAP_VSTA_FEATURE
10975 // We can only do BA on "hard" STAs.
10976 if (!(IS_HWSTA_IDX(curSta)))
10977 {
10978 continue;
10979 }
10980#endif //WLAN_SOFTAP_VSTA_FEATURE
10981 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10982 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010983 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010984 tANI_U32 txPktCount = 0 ;
10985 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010987 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10988 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010989 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10990 curSta, tid, &txPktCount)))
10991 {
10992#if 0
10993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10994 "************* %d:%d, %d ",curSta, txPktCount,
10995 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10996#endif
10997 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010998 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010999 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
11000 curSta, tid)))
11001 {
11002 /* get prepare for sending message to HAL */
11003 //baCandidate[baCandidateCount].staIdx = curSta ;
11004 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
11005 newBaCandidate = WDA_ENABLE_BA ;
11006 }
11007 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
11008 }
11009 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 /* fill the entry for all the sta with given TID's */
11011 if(WDA_ENABLE_BA == newBaCandidate)
11012 {
11013 /* move to next BA candidate */
11014 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
11015 size += sizeof(WDI_TriggerBAReqCandidateType) ;
11016 baCandidateCount++ ;
11017 newBaCandidate = WDA_DISABLE_BA ;
11018 }
11019 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011020 /* prepare and send message to hal */
11021 if( 0 < baCandidateCount)
11022 {
11023 WDI_Status status = WDI_STATUS_SUCCESS ;
11024 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
11025 tWDA_ReqParams *pWdaParams =
11026 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011027 if(NULL == pWdaParams)
11028 {
11029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 VOS_ASSERT(0) ;
11032 return;
11033 }
11034 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
11035 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
11036 if(NULL == wdiTriggerBaReq)
11037 {
11038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011040 VOS_ASSERT(0) ;
11041 vos_mem_free(pWdaParams);
11042 return;
11043 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011044 do
11045 {
11046 WDI_TriggerBAReqinfoType *triggerBaInfo =
11047 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
11048 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
11049 /* TEMP_FIX: Need to see if WDI need check for assoc session for
11050 * for each request */
11051 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
11052 triggerBaInfo->ucBASessionID = 0;
11053 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
11054 } while(0) ;
11055 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
11056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011057 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 pWdaParams->pWdaContext = pWDA;
11059 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
11060 pWdaParams->wdaMsgParam = NULL;
11061 status = WDI_TriggerBAReq(wdiTriggerBaReq,
11062 WDA_TriggerBaReqCallback, pWdaParams) ;
11063 if(IS_WDI_STATUS_FAILURE(status))
11064 {
11065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11066 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
11067 vos_mem_free(pWdaParams->wdaMsgParam) ;
11068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11069 vos_mem_free(pWdaParams) ;
11070 }
11071 }
11072 else
11073 {
11074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11075 "There is no TID for initiating BA");
11076 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011077 if( VOS_STATUS_SUCCESS !=
11078 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11079 {
11080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11081 "BA Activity Timer Stop Failed ");
11082 return ;
11083 }
11084 if( VOS_STATUS_SUCCESS !=
11085 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11086 {
11087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11088 "BA Activity Timer Start Failed ");
11089 return;
11090 }
11091 return ;
11092}
Jeff Johnson295189b2012-06-20 16:38:30 -070011093/*
11094 * WDA common routine to create timer used by WDA.
11095 */
11096static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
11097{
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11099 tANI_U32 val = 0 ;
11100 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11101
11102 if(NULL == pMac)
11103 {
11104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011105 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011106 VOS_ASSERT(0);
11107 return VOS_STATUS_E_FAILURE;
11108 }
11109 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
11110 != eSIR_SUCCESS)
11111 {
11112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11113 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
11114 return VOS_STATUS_E_FAILURE;
11115 }
11116 val = SYS_MS_TO_TICKS(val) ;
11117
11118 /* BA activity check timer */
11119 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
11120 "BA Activity Check timer", WDA_TimerHandler,
11121 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
11122 if(status != TX_SUCCESS)
11123 {
11124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11125 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011126 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011127 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 /* Tx Complete Timeout timer */
11130 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
11131 "Tx Complete Check timer", WDA_TimerHandler,
11132 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011133 if(status != TX_SUCCESS)
11134 {
11135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11136 "Unable to create Tx Complete Timeout timer");
11137 /* Destroy timer of BA activity check timer */
11138 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11139 if(status != TX_SUCCESS)
11140 {
11141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11142 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011143 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011144 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011145 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011146 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011147
11148 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
11149
11150 /* Traffic Stats timer */
11151 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
11152 "Traffic Stats timer", WDA_TimerHandler,
11153 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
11154 if(status != TX_SUCCESS)
11155 {
11156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11157 "Unable to create traffic stats timer");
11158 /* Destroy timer of BA activity check timer */
11159 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11160 if(status != TX_SUCCESS)
11161 {
11162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11163 "Unable to Destroy BA activity timer");
11164 }
11165 /* Destroy timer of tx complete timer */
11166 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
11167 if(status != TX_SUCCESS)
11168 {
11169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11170 "Unable to Tx complete timer");
11171 }
11172 return VOS_STATUS_E_FAILURE ;
11173 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011174 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011175}
Jeff Johnson295189b2012-06-20 16:38:30 -070011176/*
11177 * WDA common routine to destroy timer used by WDA.
11178 */
11179static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
11180{
11181 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011182 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
11183 if(status != TX_SUCCESS)
11184 {
11185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11186 "Unable to Destroy Tx Complete Timeout timer");
11187 return eSIR_FAILURE ;
11188 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011189 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11190 if(status != TX_SUCCESS)
11191 {
11192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11193 "Unable to Destroy BA activity timer");
11194 return eSIR_FAILURE ;
11195 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011196 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
11197 if(status != TX_SUCCESS)
11198 {
11199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11200 "Unable to Destroy traffic stats timer");
11201 return eSIR_FAILURE ;
11202 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 return eSIR_SUCCESS ;
11204}
Jeff Johnson295189b2012-06-20 16:38:30 -070011205/*
11206 * WDA timer handler.
11207 */
11208void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
11209{
11210 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
11211 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 /*
11213 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
11214 */
11215 wdaMsg.type = timerInfo ;
11216 wdaMsg.bodyptr = NULL;
11217 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011218 /* post the message.. */
11219 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
11220 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
11221 {
11222 vosStatus = VOS_STATUS_E_BADMSG;
11223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011224}
Jeff Johnson295189b2012-06-20 16:38:30 -070011225/*
11226 * WDA Tx Complete timeout Indication.
11227 */
11228void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
11229{
11230 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011231 if( pWDA->pAckTxCbFunc )
11232 {
11233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11234 "TxComplete timer expired\n");
11235 pWDA->pAckTxCbFunc( pMac, 0);
11236 pWDA->pAckTxCbFunc = NULL;
11237 }
11238 else
11239 {
11240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11241 "There is no request pending for TxComplete and wait timer expired\n");
11242 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011243}
Jeff Johnson295189b2012-06-20 16:38:30 -070011244/*
11245 * WDA Set REG Domain to VOS NV
11246 */
11247eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
11248{
11249 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
11250 {
11251 return eHAL_STATUS_INVALID_PARAMETER;
11252 }
11253 return eHAL_STATUS_SUCCESS;
11254}
Jeff Johnson295189b2012-06-20 16:38:30 -070011255
Jeff Johnson295189b2012-06-20 16:38:30 -070011256#ifdef FEATURE_WLAN_SCAN_PNO
11257/*
11258 * FUNCTION: WDA_PNOScanReqCallback
11259 *
11260 */
11261void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
11262{
11263 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011265 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 if(NULL == pWdaParams)
11267 {
11268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011269 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011270 VOS_ASSERT(0) ;
11271 return ;
11272 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011273 if( pWdaParams != NULL )
11274 {
11275 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11276 {
11277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11278 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011279 if( pWdaParams->wdaMsgParam != NULL)
11280 {
11281 vos_mem_free(pWdaParams->wdaMsgParam);
11282 }
11283
11284 vos_mem_free(pWdaParams) ;
11285 }
11286
11287 return ;
11288}
Jeff Johnson295189b2012-06-20 16:38:30 -070011289/*
11290 * FUNCTION: WDA_UpdateScanParamsCallback
11291 *
11292 */
11293void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
11294{
11295 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011297 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 if(NULL == pWdaParams)
11299 {
11300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011301 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011302 VOS_ASSERT(0) ;
11303 return ;
11304 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011305 if( pWdaParams != NULL )
11306 {
11307 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11308 {
11309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11310 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011311 if( pWdaParams->wdaMsgParam != NULL)
11312 {
11313 vos_mem_free(pWdaParams->wdaMsgParam);
11314 }
11315 vos_mem_free(pWdaParams) ;
11316 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011317 return ;
11318}
Jeff Johnson295189b2012-06-20 16:38:30 -070011319/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11321 * Request to WDI to set Preferred Network List.Offload
11322 */
11323VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
11324 tSirPNOScanReq *pPNOScanReqParams)
11325{
Jeff Johnson43971f52012-07-17 12:26:56 -070011326 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011327 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
11328 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
11329 tWDA_ReqParams *pWdaParams ;
11330 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011332 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011333 if(NULL == pwdiPNOScanReqInfo)
11334 {
11335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011337 VOS_ASSERT(0);
11338 return VOS_STATUS_E_NOMEM;
11339 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011340 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11341 if(NULL == pWdaParams)
11342 {
11343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 VOS_ASSERT(0);
11346 vos_mem_free(pwdiPNOScanReqInfo);
11347 return VOS_STATUS_E_NOMEM;
11348 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011349 //
11350 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
11351 //
11352 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
11353 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070011354 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
11355 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
11356 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011357 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
11358 {
11359 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
11360 &pPNOScanReqParams->aNetworks[i],
11361 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
11362 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011363 /*Scan timer intervals*/
11364 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
11365 &pPNOScanReqParams->scanTimers,
11366 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070011367 /*Probe template for 2.4GHz band*/
11368 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
11369 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11370 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
11372 pPNOScanReqParams->p24GProbeTemplate,
11373 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 /*Probe template for 5GHz band*/
11375 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
11376 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11377 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011378 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
11379 pPNOScanReqParams->p5GProbeTemplate,
11380 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011381 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011382
Jeff Johnson295189b2012-06-20 16:38:30 -070011383 /* Store Params pass it to WDI */
11384 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
11385 pWdaParams->pWdaContext = pWDA;
11386 /* Store param pointer as passed in by caller */
11387 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
11389 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011390 if(IS_WDI_STATUS_FAILURE(status))
11391 {
11392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11393 "Failure in Set PNO REQ WDI API, free all the memory " );
11394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11395 vos_mem_free(pWdaParams->wdaMsgParam);
11396 pWdaParams->wdaWdiApiMsgParam = NULL;
11397 pWdaParams->wdaMsgParam = NULL;
11398 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 return CONVERT_WDI2VOS_STATUS(status) ;
11400}
Jeff Johnson295189b2012-06-20 16:38:30 -070011401/*
11402 * FUNCTION: WDA_RssiFilterCallback
11403 *
11404 */
11405void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
11406{
11407 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11408
11409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011410 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011411
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011412 if(NULL == pWdaParams)
11413 {
11414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11415 "%s: pWdaParams is NULL", __func__);
11416 VOS_ASSERT(0);
11417 return ;
11418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011419 vos_mem_free(pWdaParams->wdaMsgParam) ;
11420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11421 vos_mem_free(pWdaParams) ;
11422
11423 return ;
11424}
11425/*
11426 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11427 * Request to WDI to set Preferred Network List.Offload
11428 */
11429VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
11430 tSirSetRSSIFilterReq* pRssiFilterParams)
11431{
Jeff Johnson43971f52012-07-17 12:26:56 -070011432 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011433 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
11434 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
11435 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011437 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011438 if(NULL == pwdiSetRssiFilterReqInfo)
11439 {
11440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011441 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 VOS_ASSERT(0);
11443 return VOS_STATUS_E_NOMEM;
11444 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11446 if(NULL == pWdaParams)
11447 {
11448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011449 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011450 VOS_ASSERT(0);
11451 vos_mem_free(pwdiSetRssiFilterReqInfo);
11452 return VOS_STATUS_E_NOMEM;
11453 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011454 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
11455 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011456
Jeff Johnson295189b2012-06-20 16:38:30 -070011457 /* Store Params pass it to WDI */
11458 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
11459 pWdaParams->pWdaContext = pWDA;
11460 /* Store param pointer as passed in by caller */
11461 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011462 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
11463 (WDI_PNOScanCb)WDA_RssiFilterCallback,
11464 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 if(IS_WDI_STATUS_FAILURE(status))
11466 {
11467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11468 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
11469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11470 vos_mem_free(pWdaParams->wdaMsgParam);
11471 pWdaParams->wdaWdiApiMsgParam = NULL;
11472 pWdaParams->wdaMsgParam = NULL;
11473 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 return CONVERT_WDI2VOS_STATUS(status) ;
11475}
11476
Jeff Johnson295189b2012-06-20 16:38:30 -070011477/*
11478 * FUNCTION: WDA_ProcessUpdateScanParams
11479 * Request to WDI to update Scan Parameters
11480 */
11481VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
11482 tSirUpdateScanParams *pUpdateScanParams)
11483{
Jeff Johnson43971f52012-07-17 12:26:56 -070011484 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011485 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
11486 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
11487 sizeof(WDI_UpdateScanParamsInfoType)) ;
11488 tWDA_ReqParams *pWdaParams ;
11489 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011491 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011492 if(NULL == wdiUpdateScanParamsInfoType)
11493 {
11494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011496 VOS_ASSERT(0);
11497 return VOS_STATUS_E_NOMEM;
11498 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011499 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11500 if ( NULL == pWdaParams )
11501 {
11502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011503 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011504 VOS_ASSERT(0);
11505 vos_mem_free(wdiUpdateScanParamsInfoType);
11506 return VOS_STATUS_E_NOMEM;
11507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011508 //
11509 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11510 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11512 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11513 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11514 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11515 "sir struct %d wdi struct %d",
11516 pUpdateScanParams->b11dEnabled,
11517 pUpdateScanParams->b11dResolved,
11518 pUpdateScanParams->ucChannelCount,
11519 pUpdateScanParams->usPassiveMinChTime,
11520 pUpdateScanParams->usPassiveMaxChTime,
11521 pUpdateScanParams->usActiveMinChTime,
11522 pUpdateScanParams->usActiveMaxChTime,
11523 sizeof(tSirUpdateScanParams),
11524 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11525
Jeff Johnson295189b2012-06-20 16:38:30 -070011526 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11527 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011528 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11529 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011530 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11531 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011532 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11533 pUpdateScanParams->usActiveMaxChTime;
11534 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11535 pUpdateScanParams->usActiveMinChTime;
11536 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11537 pUpdateScanParams->usPassiveMaxChTime;
11538 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11539 pUpdateScanParams->usPassiveMinChTime;
11540
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011542 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11543 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011544
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 for ( i = 0; i <
11546 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11547 i++)
11548 {
11549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11550 "Update Scan Parameters channel: %d",
11551 pUpdateScanParams->aChannels[i]);
11552
11553 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11554 pUpdateScanParams->aChannels[i];
11555 }
11556
Jeff Johnson295189b2012-06-20 16:38:30 -070011557 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011558
Jeff Johnson295189b2012-06-20 16:38:30 -070011559 /* Store Params pass it to WDI */
11560 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11561 pWdaParams->pWdaContext = pWDA;
11562 /* Store param pointer as passed in by caller */
11563 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011564
Jeff Johnson295189b2012-06-20 16:38:30 -070011565
11566
11567 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11568 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11569 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011570 if(IS_WDI_STATUS_FAILURE(status))
11571 {
11572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11573 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11575 vos_mem_free(pWdaParams->wdaMsgParam);
11576 vos_mem_free(pWdaParams);
11577 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011578 return CONVERT_WDI2VOS_STATUS(status) ;
11579}
11580#endif // FEATURE_WLAN_SCAN_PNO
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080011581/*
11582 * FUNCTION: WDA_SetPowerParamsCallback
11583 *
11584 */
11585void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
11586{
11587 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11588
11589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11590 "<------ %s " ,__func__);
11591
11592 if(NULL == pWdaParams)
11593 {
11594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11595 "%s: pWdaParams received NULL", __func__);
11596 VOS_ASSERT(0);
11597 return;
11598 }
11599 if( pWdaParams != NULL )
11600 {
11601 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11602 {
11603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11604 }
11605 if( pWdaParams->wdaMsgParam != NULL)
11606 {
11607 vos_mem_free(pWdaParams->wdaMsgParam);
11608 }
11609 vos_mem_free(pWdaParams);
11610 }
11611 return;
11612}
11613
Jeff Johnson295189b2012-06-20 16:38:30 -070011614#ifdef WLAN_FEATURE_PACKET_FILTERING
11615/*
11616 * FUNCTION: WDA_8023MulticastListReqCallback
11617 *
11618 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011619void WDA_8023MulticastListReqCallback(
11620 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11621 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011622{
11623 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011625 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011626 if(NULL == pWdaParams)
11627 {
11628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011629 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011630 VOS_ASSERT(0) ;
11631 return ;
11632 }
11633
11634 vos_mem_free(pWdaParams->wdaMsgParam) ;
11635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11636 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011637 //print a msg, nothing else to do
11638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11639 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 return ;
11641}
Jeff Johnson295189b2012-06-20 16:38:30 -070011642/*
11643 * FUNCTION: WDA_Process8023MulticastListReq
11644 * Request to WDI to add 8023 Multicast List
11645 */
11646VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11647 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11648{
Jeff Johnson43971f52012-07-17 12:26:56 -070011649 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011650 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11651 tWDA_ReqParams *pWdaParams ;
11652 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011654 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011655 pwdiFltPktSetMcListReqParamsType =
11656 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11657 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11658 ) ;
11659 if(NULL == pwdiFltPktSetMcListReqParamsType)
11660 {
11661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011662 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011663 return VOS_STATUS_E_NOMEM;
11664 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011665 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11666 if(NULL == pWdaParams)
11667 {
11668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011669 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011670 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11671 return VOS_STATUS_E_NOMEM;
11672 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011673
Jeff Johnson295189b2012-06-20 16:38:30 -070011674 //
11675 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11676 //
11677 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011678 pRcvFltMcAddrList->ulMulticastAddrCnt;
11679
11680 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11681 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11682 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11683 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11684
Jeff Johnson295189b2012-06-20 16:38:30 -070011685 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11686 {
11687 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11688 &(pRcvFltMcAddrList->multicastAddr[i]),
11689 sizeof(tSirMacAddr));
11690 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011691 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011692
Jeff Johnson295189b2012-06-20 16:38:30 -070011693 /* Store Params pass it to WDI */
11694 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11695 pWdaParams->pWdaContext = pWDA;
11696 /* Store param pointer as passed in by caller */
11697 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011698 status = WDI_8023MulticastListReq(
11699 pwdiFltPktSetMcListReqParamsType,
11700 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11701 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011702 if(IS_WDI_STATUS_FAILURE(status))
11703 {
11704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11705 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11707 vos_mem_free(pWdaParams->wdaMsgParam);
11708 vos_mem_free(pWdaParams);
11709 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011710 return CONVERT_WDI2VOS_STATUS(status) ;
11711}
Jeff Johnson295189b2012-06-20 16:38:30 -070011712/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011713 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011714 *
11715 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011716void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011717 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11718 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011719{
11720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011722 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011723 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011724 if(NULL == pWdaParams)
11725 {
11726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011727 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011728 VOS_ASSERT(0) ;
11729 return ;
11730 }
11731
11732 vos_mem_free(pWdaParams->wdaMsgParam) ;
11733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11734 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011735 //print a msg, nothing else to do
11736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011737 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011738 return ;
11739}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011740
11741/*
11742 * FUNCTION: WDA_ReqCallback
11743 *
11744 */
11745void WDA_ReqCallback(WDI_Status wdiStatus,
11746 void* pUserData)
11747{
11748 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11749
11750 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11751 "<------ %s, wdiStatus: %d",
11752 __func__, wdiStatus);
11753
11754 if (NULL == pWdaParams)
11755 {
11756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11757 "%s: Invalid pWdaParams pointer", __func__);
11758 VOS_ASSERT(0);
11759 return;
11760 }
11761
11762 if (IS_WDI_STATUS_FAILURE(wdiStatus))
11763 {
11764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11765 vos_mem_free(pWdaParams->wdaMsgParam);
11766 vos_mem_free(pWdaParams);
11767 }
11768
11769 return;
11770}
11771
Jeff Johnson295189b2012-06-20 16:38:30 -070011772/*
11773 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11774 * Request to WDI to set Receive Filters
11775 */
11776VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11777 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11778{
Jeff Johnson43971f52012-07-17 12:26:56 -070011779 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011780 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11781 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11782 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11783 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11784 tWDA_ReqParams *pWdaParams ;
11785 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011787 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11789 {
11790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011791 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011792 VOS_ASSERT(0);
11793 return VOS_STATUS_E_NOMEM;
11794 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011795 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11796 if(NULL == pWdaParams)
11797 {
11798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011800 VOS_ASSERT(0);
11801 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11802 return VOS_STATUS_E_NOMEM;
11803 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011804 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11805 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11806 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11807 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011808 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11809 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11810
11811 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11812 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011813
11814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11815 "FID %d FT %d NParams %d CT %d",
11816 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11817 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11818 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11819 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011820 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11821 {
11822 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11823 &pRcvPktFilterCfg->paramsData[i],
11824 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11826 "Proto %d Comp Flag %d \n",
11827 pwdiSetRcvPktFilterReqParamsType->
11828 wdiPktFilterCfg.paramsData[i].protocolLayer,
11829 pwdiSetRcvPktFilterReqParamsType->
11830 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11832 "Data Offset %d Data Len %d\n",
11833 pwdiSetRcvPktFilterReqParamsType->
11834 wdiPktFilterCfg.paramsData[i].dataOffset,
11835 pwdiSetRcvPktFilterReqParamsType->
11836 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11838 "CData: %d:%d:%d:%d:%d:%d\n",
11839 pwdiSetRcvPktFilterReqParamsType->
11840 wdiPktFilterCfg.paramsData[i].compareData[0],
11841 pwdiSetRcvPktFilterReqParamsType->
11842 wdiPktFilterCfg.paramsData[i].compareData[1],
11843 pwdiSetRcvPktFilterReqParamsType->
11844 wdiPktFilterCfg.paramsData[i].compareData[2],
11845 pwdiSetRcvPktFilterReqParamsType->
11846 wdiPktFilterCfg.paramsData[i].compareData[3],
11847 pwdiSetRcvPktFilterReqParamsType->
11848 wdiPktFilterCfg.paramsData[i].compareData[4],
11849 pwdiSetRcvPktFilterReqParamsType->
11850 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11852 "MData: %d:%d:%d:%d:%d:%d\n",
11853 pwdiSetRcvPktFilterReqParamsType->
11854 wdiPktFilterCfg.paramsData[i].dataMask[0],
11855 pwdiSetRcvPktFilterReqParamsType->
11856 wdiPktFilterCfg.paramsData[i].dataMask[1],
11857 pwdiSetRcvPktFilterReqParamsType->
11858 wdiPktFilterCfg.paramsData[i].dataMask[2],
11859 pwdiSetRcvPktFilterReqParamsType->
11860 wdiPktFilterCfg.paramsData[i].dataMask[3],
11861 pwdiSetRcvPktFilterReqParamsType->
11862 wdiPktFilterCfg.paramsData[i].dataMask[4],
11863 pwdiSetRcvPktFilterReqParamsType->
11864 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011865 }
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011866 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReqCallback;
11867 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011868 /* Store Params pass it to WDI */
11869 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11870 pWdaParams->pWdaContext = pWDA;
11871 /* Store param pointer as passed in by caller */
11872 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011873 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080011874 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070011875 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011876 if(IS_WDI_STATUS_FAILURE(status))
11877 {
11878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11879 "Failure in SetFilter(),free all the memory,status %d ",status);
11880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11881 vos_mem_free(pWdaParams->wdaMsgParam);
11882 vos_mem_free(pWdaParams);
11883 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011884 return CONVERT_WDI2VOS_STATUS(status) ;
11885}
Jeff Johnson295189b2012-06-20 16:38:30 -070011886/*
11887 * FUNCTION: WDA_FilterMatchCountReqCallback
11888 *
11889 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011890void WDA_FilterMatchCountReqCallback(
11891 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11892 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011893{
11894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11895 tWDA_CbContext *pWDA;
11896 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11897 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11898 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11899 tANI_U8 i;
11900 vos_msg_t vosMsg;
11901
11902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011903 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011904 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11905
Jeff Johnsone7245742012-09-05 17:12:55 -070011906 if(NULL == pRcvFltPktMatchCntRsp)
11907 {
11908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011909 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011910 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011911 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011912 return ;
11913 }
11914
Jeff Johnson295189b2012-06-20 16:38:30 -070011915 if(NULL == pWdaParams)
11916 {
11917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011918 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011920 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011921 return ;
11922 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011923 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11924 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011925 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11926 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11927
11928 /* Message Header */
11929 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11930 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11931
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011932 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011933
11934 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11935 {
11936 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11937 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11938 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011939 /* VOS message wrapper */
11940 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11941 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11942 vosMsg.bodyval = 0;
11943 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11944 {
11945 /* free the mem and return */
11946 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11947 }
11948
11949 vos_mem_free(pWdaParams->wdaMsgParam) ;
11950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11951 vos_mem_free(pWdaParams) ;
11952}
Jeff Johnson295189b2012-06-20 16:38:30 -070011953/*
11954 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11955 * Request to WDI to get PC Filter Match Count
11956 */
11957VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11958{
Jeff Johnson43971f52012-07-17 12:26:56 -070011959 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011960 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11961 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11962 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011964 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011965 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11966 {
11967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011968 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011969 VOS_ASSERT(0);
11970 return VOS_STATUS_E_NOMEM;
11971 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011972 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11973 if(NULL == pWdaParams)
11974 {
11975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011976 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011977 VOS_ASSERT(0);
11978 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11979 return VOS_STATUS_E_NOMEM;
11980 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011981
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11983
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011984 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11985 pRcvFltPktMatchRsp->bssId,
11986 sizeof(wpt_macAddr));
11987
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 /* Store Params pass it to WDI */
11989 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11990 pWdaParams->pWdaContext = pWDA;
11991 /* Store param pointer as passed in by caller */
11992 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011993 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11994 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11995 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011996 if(IS_WDI_STATUS_FAILURE(status))
11997 {
11998 /* failure returned by WDI API */
11999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12000 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
12001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12002 vos_mem_free(pWdaParams) ;
12003 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
12004 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
12005 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012006 return CONVERT_WDI2VOS_STATUS(status) ;
12007}
Jeff Johnson295189b2012-06-20 16:38:30 -070012008/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012009 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012010 *
12011 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012012void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012013 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
12014 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012015{
12016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012018 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012019/* WDA_VOS_ASSERT(NULL != pWdaParams); */
12020 if(NULL == pWdaParams)
12021 {
12022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012023 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012024 VOS_ASSERT(0) ;
12025 return ;
12026 }
12027
12028 vos_mem_free(pWdaParams->wdaMsgParam) ;
12029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12030 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012031 //print a msg, nothing else to do
12032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012033 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 return ;
12035}
Jeff Johnson295189b2012-06-20 16:38:30 -070012036/*
12037 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
12038 * Request to WDI to clear Receive Filters
12039 */
12040VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
12041 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
12042{
Jeff Johnson43971f52012-07-17 12:26:56 -070012043 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012044 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
12045 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
12046 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012048 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012049 if(NULL == pwdiRcvFltPktClearReqParamsType)
12050 {
12051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012053 VOS_ASSERT(0);
12054 return VOS_STATUS_E_NOMEM;
12055 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12057 if(NULL == pWdaParams)
12058 {
12059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012061 VOS_ASSERT(0);
12062 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
12063 return VOS_STATUS_E_NOMEM;
12064 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012065 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
12066 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070012067 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
12068 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
12069 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
12070 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012071
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012072 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReqCallback;
12073 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012074 /* Store Params pass it to WDI */
12075 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
12076 pWdaParams->pWdaContext = pWDA;
12077 /* Store param pointer as passed in by caller */
12078 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070012079 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012080 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012081 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012082 if(IS_WDI_STATUS_FAILURE(status))
12083 {
12084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12085 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
12086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080012087 vos_mem_free(pWdaParams->wdaMsgParam);
12088 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012090 return CONVERT_WDI2VOS_STATUS(status) ;
12091}
12092#endif // WLAN_FEATURE_PACKET_FILTERING
12093
Jeff Johnson295189b2012-06-20 16:38:30 -070012094/*
12095 * FUNCTION: WDA_ProcessSetPowerParamsReq
12096 * Request to WDI to set power params
12097 */
12098VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
12099 tSirSetPowerParamsReq *pPowerParams)
12100{
Jeff Johnson43971f52012-07-17 12:26:56 -070012101 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
12103 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012104 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012106 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 if(NULL == pwdiSetPowerParamsReqInfo)
12108 {
12109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012111 VOS_ASSERT(0);
12112 return VOS_STATUS_E_NOMEM;
12113 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012114 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12115 if(NULL == pWdaParams)
12116 {
12117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012119 VOS_ASSERT(0);
12120 vos_mem_free(pwdiSetPowerParamsReqInfo);
12121 return VOS_STATUS_E_NOMEM;
12122 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012123
Jeff Johnson295189b2012-06-20 16:38:30 -070012124
12125 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
12126 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070012127 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
12128 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070012129 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
12130 pPowerParams->uListenInterval;
12131 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
12132 pPowerParams->uBcastMcastFilter;
12133 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
12134 pPowerParams->uEnableBET;
12135 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
12136 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070012137 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012138
Jeff Johnson295189b2012-06-20 16:38:30 -070012139 /* Store Params pass it to WDI */
12140 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
12141 pWdaParams->pWdaContext = pWDA;
12142 /* Store param pointer as passed in by caller */
12143 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012144 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
12145 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
12146 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012147 if(IS_WDI_STATUS_FAILURE(status))
12148 {
12149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12150 "Failure in Set power params REQ WDI API, free all the memory " );
12151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12152 vos_mem_free(pWdaParams->wdaMsgParam);
12153 pWdaParams->wdaWdiApiMsgParam = NULL;
12154 pWdaParams->wdaMsgParam = NULL;
12155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012156 return CONVERT_WDI2VOS_STATUS(status) ;
12157}
12158
12159/*
12160 * FUNCTION: WDA_SetTmLevelRspCallback
12161 * Set TM Level response
12162 */
12163void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
12164{
12165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12166
12167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012168 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012169
12170 if(NULL == pWdaParams)
12171 {
12172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012173 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012174 VOS_ASSERT(0) ;
12175 return ;
12176 }
12177
12178 /* Dose not need to send notification to upper layer
12179 * Just free allocated resources */
12180 if( pWdaParams != NULL )
12181 {
12182 if( pWdaParams->wdaWdiApiMsgParam != NULL )
12183 {
12184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12185 }
12186 vos_mem_free(pWdaParams->wdaMsgParam) ;
12187 vos_mem_free(pWdaParams) ;
12188 }
12189}
12190
12191/*
12192 * FUNCTION: WDA_ProcessSetTmLevelReq
12193 * Set TM Level request
12194 */
12195VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
12196 tAniSetTmLevelReq *setTmLevelReq)
12197{
12198 WDI_Status status = WDI_STATUS_SUCCESS ;
12199 tWDA_ReqParams *pWdaParams ;
12200 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
12201 (WDI_SetTmLevelReqType *)vos_mem_malloc(
12202 sizeof(WDI_SetTmLevelReqType)) ;
12203 if(NULL == wdiSetTmLevelReq)
12204 {
12205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012206 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012207 VOS_ASSERT(0);
12208 return VOS_STATUS_E_NOMEM;
12209 }
12210
12211 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12212 if(NULL == pWdaParams)
12213 {
12214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012215 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012216 VOS_ASSERT(0);
12217 vos_mem_free(wdiSetTmLevelReq);
12218 return VOS_STATUS_E_NOMEM;
12219 }
12220
12221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012222 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012223
12224 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
12225 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
12226
12227 pWdaParams->pWdaContext = pWDA;
12228 pWdaParams->wdaMsgParam = setTmLevelReq;
12229 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
12230
12231 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
12232 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
12233
12234 if(IS_WDI_STATUS_FAILURE(status))
12235 {
12236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080012237 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070012238 vos_mem_free(pWdaParams->wdaMsgParam) ;
12239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12240 vos_mem_free(pWdaParams) ;
12241 }
12242
12243 return CONVERT_WDI2VOS_STATUS(status) ;
12244}
12245
12246VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
12247 tpTxControlParams pTxCtrlParam)
12248{
12249 VOS_STATUS wdaStatus;
12250
12251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012252 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012253 if( pTxCtrlParam == NULL )
12254 {
12255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012256 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012257 return VOS_STATUS_E_FAILURE;
12258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012259 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
12260 {
12261 wdaStatus = WDA_SuspendDataTx(pWDA);
12262 }
12263 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
12264 {
12265 wdaStatus = WDA_ResumeDataTx(pWDA);
12266 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012267 return wdaStatus;
12268}
12269
12270 /* FUNCTION WDA_featureCapsExchange
12271 * WDA API to invoke capability exchange between host and FW.
12272 */
12273void WDA_featureCapsExchange(v_PVOID_t pVosContext)
12274{
12275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012276 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012277 WDI_featureCapsExchangeReq( NULL, pVosContext);
12278}
12279
Yathish9f22e662012-12-10 14:21:35 -080012280/* FUNCTION WDA_disableCapablityFeature
12281 * WDA API to diable Active mode offload in host.
12282 */
12283void WDA_disableCapablityFeature(tANI_U8 feature_index)
12284{
12285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12286 "%s:enter", __func__ );
12287 WDI_disableCapablityFeature(feature_index);
12288}
12289
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 /* FUNCTION WDA_getHostWlanFeatCaps
12291 * Wrapper for WDI API, that will return if the feature (enum value).passed
12292 * to this API is supported or not in Host
12293 * return value
12294 * 0 - implies feature is NOT Supported
12295 * any non zero value - implies feature is SUPPORTED
12296 */
12297tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
12298{
12299 return WDI_getHostWlanFeatCaps(featEnumValue);
12300}
12301
12302 /* FUNCTION WDA_getFwWlanFeatCaps
12303 * Wrapper for WDI API, that will return if the feature (enum value).passed
12304 * to this API is supported or not in FW
12305 * return value
12306 * 0 - implies feature is NOT Supported
12307 * any non zero value - implies feature is SUPPORTED
12308 */
12309tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
12310{
12311 return WDI_getFwWlanFeatCaps(featEnumValue);
12312}
12313
12314/*
12315 * FUNCTION: WDA_shutdown
12316 * Shutdown WDA/WDI without handshaking with Riva.
12317 * Synchronous function.
12318 */
12319VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
12320{
12321 WDI_Status wdiStatus;
12322 //tANI_U8 eventIdx = 0;
12323 VOS_STATUS status = VOS_STATUS_SUCCESS;
12324 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012325 if (NULL == pWDA)
12326 {
12327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012328 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012329 VOS_ASSERT(0);
12330 return VOS_STATUS_E_FAILURE;
12331 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012332 /* FTM mode stay START_STATE */
12333 if( (WDA_READY_STATE != pWDA->wdaState) &&
12334 (WDA_INIT_STATE != pWDA->wdaState) &&
12335 (WDA_START_STATE != pWDA->wdaState) )
12336 {
12337 VOS_ASSERT(0);
12338 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012339
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012340 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
12341 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070012342 {
12343 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012344 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012345 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012346
Jeff Johnson295189b2012-06-20 16:38:30 -070012347 /* call WDI shutdown */
12348 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070012349 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
12350 {
12351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12352 "error in WDA Stop" );
12353 status = VOS_STATUS_E_FAILURE;
12354 }
12355 /* WDI stop is synchrnous, shutdown is complete when it returns */
12356 pWDA->wdaState = WDA_STOP_STATE;
12357
Jeff Johnson295189b2012-06-20 16:38:30 -070012358 /* shutdown should perform the stop & close actions. */
12359 /* Destroy the event */
12360 status = vos_event_destroy(&pWDA->txFrameEvent);
12361 if(!VOS_IS_STATUS_SUCCESS(status))
12362 {
12363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12364 "VOS Event destroy failed - status = %d\n", status);
12365 status = VOS_STATUS_E_FAILURE;
12366 }
12367 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
12368 if(!VOS_IS_STATUS_SUCCESS(status))
12369 {
12370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12371 "VOS Event destroy failed - status = %d\n", status);
12372 status = VOS_STATUS_E_FAILURE;
12373 }
12374 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
12375 if(!VOS_IS_STATUS_SUCCESS(status))
12376 {
12377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12378 "VOS Event destroy failed - status = %d\n", status);
12379 status = VOS_STATUS_E_FAILURE;
12380 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012381 /* free WDA context */
12382 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
12383 if ( !VOS_IS_STATUS_SUCCESS(status) )
12384 {
12385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12386 "error in WDA close " );
12387 status = VOS_STATUS_E_FAILURE;
12388 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012389 return status;
12390}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012391
Jeff Johnsone7245742012-09-05 17:12:55 -070012392/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012393 * FUNCTION: WDA_setNeedShutdown
12394 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070012395 */
12396
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012397void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070012398{
12399 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012400 if(pWDA == NULL)
12401 {
12402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12403 "Could not get the WDA Context pointer" );
12404 return;
12405 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012406 pWDA->needShutdown = TRUE;
12407}
12408/*
12409 * FUNCTION: WDA_needShutdown
12410 * WDA needs a shutdown
12411 */
12412
12413v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
12414{
12415 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012416 if(pWDA == NULL)
12417 {
12418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12419 "Could not get the WDA Context pointer" );
12420 return 0;
12421 }
12422 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070012423}
12424
Mohit Khanna4a70d262012-09-11 16:30:12 -070012425#ifdef WLAN_FEATURE_11AC
12426/*
12427 * FUNCTION: WDA_SetBeaconFilterReqCallback
12428 *
12429 */
12430void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
12431{
12432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012434 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012435 if(NULL == pWdaParams)
12436 {
12437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012438 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012439 VOS_ASSERT(0) ;
12440 return ;
12441 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012442
Mohit Khanna4a70d262012-09-11 16:30:12 -070012443 vos_mem_free(pWdaParams->wdaMsgParam) ;
12444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12445 vos_mem_free(pWdaParams) ;
12446 /*
12447 * No respone required for SetBeaconFilter req so just free the request
12448 * param here
12449 */
12450
12451 return ;
12452}
12453
12454VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
12455 tUpdateVHTOpMode *pData)
12456{
12457 WDI_Status status = WDI_STATUS_SUCCESS ;
12458 tWDA_ReqParams *pWdaParams ;
12459 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
12460 sizeof(WDI_UpdateVHTOpMode)) ;
12461 if(NULL == wdiTemp)
12462 {
12463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012464 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012465 VOS_ASSERT(0);
12466 return VOS_STATUS_E_NOMEM;
12467 }
12468 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12469 if(NULL == pWdaParams)
12470 {
12471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012472 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012473 VOS_ASSERT(0);
12474 vos_mem_free(wdiTemp);
12475 return VOS_STATUS_E_NOMEM;
12476 }
12477
12478 wdiTemp->opMode = pData->opMode;
12479 wdiTemp->staId = pData->staId;
12480
12481 pWdaParams->pWdaContext = pWDA;
12482 /* Store Req pointer, as this will be used for response */
12483 pWdaParams->wdaMsgParam = (void *)pData;
12484 /* store Params pass it to WDI */
12485 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
12486
12487 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
12488
12489 if(IS_WDI_STATUS_FAILURE(status))
12490 {
12491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12492 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
12493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12494 vos_mem_free(pWdaParams->wdaMsgParam);
12495 vos_mem_free(pWdaParams);
12496 }
12497 return CONVERT_WDI2VOS_STATUS(status) ;
12498}
12499#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012500
12501/*==========================================================================
12502 FUNCTION WDA_TransportChannelDebug
12503
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070012504 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012505 Display Transport Channel debugging information
12506 User may request to display DXE channel snapshot
12507 Or if host driver detects any abnormal stcuk may display
12508
12509 PARAMETERS
schang6295e542013-03-12 15:31:23 -070012510 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080012511 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012512 enableStallDetect : Enable stall detect feature
12513 This feature will take effect to data performance
12514 Not integrate till fully verification
12515
12516 RETURN VALUE
12517 NONE
12518
12519===========================================================================*/
12520void WDA_TransportChannelDebug
12521(
schang6295e542013-03-12 15:31:23 -070012522 tpAniSirGlobal pMac,
12523 v_BOOL_t displaySnapshot,
12524 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012525)
12526{
schang6295e542013-03-12 15:31:23 -070012527 if (NULL != pMac)
12528 {
12529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12530 "HAL BMU DUMP Request" );
12531 /* 17 is BMU dump opcode */
12532 WDA_HALDumpCmdReq(pMac, 17, 0, 0, 0, 0, NULL);
12533 }
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012534 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012535 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012536}