blob: d991e7717500705936971908daf42765102b1042 [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
Jeff Johnson295189b2012-06-20 16:38:30 -07001459 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001460#ifdef WLAN_DEBUG
1461 {
1462 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001463 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1464 "****** Dumping CFG TLV ***** ");
1465 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1466 {
1467 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1468 "%02x %02x %02x %02x %02x %02x %02x %02x",
1469 tlvStructStart[i],
1470 tlvStructStart[i+1],
1471 tlvStructStart[i+2],
1472 tlvStructStart[i+3],
1473 tlvStructStart[i+4],
1474 tlvStructStart[i+5],
1475 tlvStructStart[i+6],
1476 tlvStructStart[i+7]);
1477 }
1478 /* Dump the bytes in the last line*/
1479 for (; i < wdiStartParams->usConfigBufferLen; i++)
1480 {
1481 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1482 "%02x ",tlvStructStart[i]);
1483 }
1484 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1485 "**************************** ");
1486 }
1487#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001488 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001489handle_failure:
1490 vos_mem_free(configParam);
1491 return VOS_STATUS_E_FAILURE;
1492}
Jeff Johnson295189b2012-06-20 16:38:30 -07001493/*
1494 * FUNCTION: WDA_wdiCompleteCB
1495 * call the voss call back function
1496 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001497void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001498{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001499 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1500 tWDA_CbContext *wdaContext;
1501
1502 if(NULL == pWdaParams)
1503 {
1504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001505 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001506 VOS_ASSERT(0) ;
1507 return ;
1508 }
1509
1510 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1511
Jeff Johnson295189b2012-06-20 16:38:30 -07001512 if (NULL == wdaContext)
1513 {
1514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001515 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001516 return ;
1517 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001518
Jeff Johnson295189b2012-06-20 16:38:30 -07001519 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001520 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001521 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001523 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001524 vos_mem_free(pWdaParams);
1525
Jeff Johnson295189b2012-06-20 16:38:30 -07001526 if(WDI_STATUS_SUCCESS != status)
1527 {
1528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1529 "WDI stop callback returned failure" );
1530 VOS_ASSERT(0) ;
1531 }
1532 else
1533 {
1534 wdaContext->wdaState = WDA_STOP_STATE;
1535 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001536
Jeff Johnson295189b2012-06-20 16:38:30 -07001537 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001538 vos_WDAComplete_cback(wdaContext->pVosContext);
1539
Jeff Johnson295189b2012-06-20 16:38:30 -07001540 return ;
1541}
Jeff Johnson295189b2012-06-20 16:38:30 -07001542/*
1543 * FUNCTION: WDA_stop
1544 * call WDI_stop
1545 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001546VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1547{
1548 WDI_Status wdiStatus;
1549 VOS_STATUS status = VOS_STATUS_SUCCESS;
1550 WDI_StopReqParamsType *wdiStopReq;
1551 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001552 tWDA_ReqParams *pWdaParams ;
1553
Jeff Johnson295189b2012-06-20 16:38:30 -07001554 if (NULL == pWDA)
1555 {
1556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001557 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001558 VOS_ASSERT(0);
1559 return VOS_STATUS_E_FAILURE;
1560 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001561 if (pWDA->wdiFailed == true)
1562 {
1563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001564 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001565 return VOS_STATUS_E_ALREADY;
1566 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001567
Jeff Johnson295189b2012-06-20 16:38:30 -07001568 /* FTM mode stay START_STATE */
1569 if( (WDA_READY_STATE != pWDA->wdaState) &&
1570 (WDA_INIT_STATE != pWDA->wdaState) &&
1571 (WDA_START_STATE != pWDA->wdaState) )
1572 {
1573 VOS_ASSERT(0);
1574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001575 wdiStopReq = (WDI_StopReqParamsType *)
1576 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1577 if(NULL == wdiStopReq)
1578 {
1579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001581 VOS_ASSERT(0);
1582 return VOS_STATUS_E_NOMEM;
1583 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001584
Jeff Johnson295189b2012-06-20 16:38:30 -07001585 wdiStopReq->wdiStopReason = reason;
1586 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001587
1588 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1589 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001590 {
1591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001593 VOS_ASSERT(0);
1594 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001595 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001596 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001597
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001598 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1599 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001600 {
1601 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001602 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001603 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001604
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001605 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1606 pWdaParams->wdaMsgParam = NULL;
1607 pWdaParams->pWdaContext = pWDA;
1608
Jeff Johnson295189b2012-06-20 16:38:30 -07001609 /* call WDI stop */
1610 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001611 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1612
Jeff Johnson295189b2012-06-20 16:38:30 -07001613 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1614 {
1615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1616 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1618 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001619 status = VOS_STATUS_E_FAILURE;
1620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001621 return status;
1622}
Jeff Johnson295189b2012-06-20 16:38:30 -07001623/*
1624 * FUNCTION: WDA_close
1625 * call WDI_close and free the WDA context
1626 */
1627VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1628{
Jeff Johnson43971f52012-07-17 12:26:56 -07001629 VOS_STATUS status = VOS_STATUS_SUCCESS;
1630 WDI_Status wstatus;
1631 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001632 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001633 if (NULL == wdaContext)
1634 {
1635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001636 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001637 return VOS_STATUS_E_FAILURE;
1638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001639 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1640 (WDA_STOP_STATE != wdaContext->wdaState))
1641 {
1642 VOS_ASSERT(0);
1643 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001644 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001645 wstatus = WDI_Close();
1646 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001647 {
1648 status = VOS_STATUS_E_FAILURE;
1649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001650 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001651 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001652 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1653 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001654 {
1655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1656 "WDI Sync Event destroy failed - status = %d\n", status);
1657 status = VOS_STATUS_E_FAILURE;
1658 }
1659
Jeff Johnson43971f52012-07-17 12:26:56 -07001660 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001661 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001662 {
1663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1664 "VOS Event destroy failed - status = %d\n", status);
1665 status = VOS_STATUS_E_FAILURE;
1666 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001667 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001668 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 "VOS Event destroy failed - status = %d\n", status);
1672 status = VOS_STATUS_E_FAILURE;
1673 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001674 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001675 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001676 {
1677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1678 "VOS Event destroy failed - status = %d\n", status);
1679 status = VOS_STATUS_E_FAILURE;
1680 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001681 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001682 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
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 "error in WDA close " );
1687 status = VOS_STATUS_E_FAILURE;
1688 }
1689 return status;
1690}
Jeff Johnson295189b2012-06-20 16:38:30 -07001691/*
1692 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1693 * returns 1 if the compiled version is greater than or equal to the input version
1694 */
1695
1696uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1697{
1698 VOS_STATUS status = VOS_STATUS_SUCCESS;
1699 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1700 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001701 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001702 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1703 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1704 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1705 (compiledVersion.revision >= revision)))
1706 return 1;
1707 else
1708 return 0;
1709}
Jeff Johnson295189b2012-06-20 16:38:30 -07001710/*
1711 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1712 * returns 1 if the compiled version is greater than or equal to the input version
1713 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001714uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1715{
1716 VOS_STATUS status = VOS_STATUS_SUCCESS;
1717 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1718 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001719 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001720 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1721 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1722 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1723 (reportedVersion.revision >= revision)))
1724 return 1;
1725 else
1726 return 0;
1727}
Jeff Johnson295189b2012-06-20 16:38:30 -07001728/*
1729 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1730 * Returns the version of the WCNSS WLAN API with which the HOST
1731 * device driver was compiled
1732 */
1733VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1734 tSirVersionType *pVersion)
1735{
1736 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001737 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001738 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001739 if ((NULL == pvosGCtx) || (NULL == pVersion))
1740 {
1741 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001742 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001743 VOS_ASSERT(0);
1744 return VOS_STATUS_E_FAILURE;
1745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001746 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1747 if (NULL == pWDA )
1748 {
1749 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001750 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001751 VOS_ASSERT(0);
1752 return VOS_STATUS_E_FAILURE;
1753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001754 *pVersion = pWDA->wcnssWlanCompiledVersion;
1755 return VOS_STATUS_SUCCESS;
1756}
Jeff Johnson295189b2012-06-20 16:38:30 -07001757/*
1758 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1759 * Returns the version of the WCNSS WLAN API with which the WCNSS
1760 * device driver was compiled
1761 */
1762VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1763 tSirVersionType *pVersion)
1764{
1765 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001767 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001768 if ((NULL == pvosGCtx) || (NULL == pVersion))
1769 {
1770 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001771 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001772 VOS_ASSERT(0);
1773 return VOS_STATUS_E_FAILURE;
1774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001775 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1776 if (NULL == pWDA )
1777 {
1778 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001779 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001780 VOS_ASSERT(0);
1781 return VOS_STATUS_E_FAILURE;
1782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001783 *pVersion = pWDA->wcnssWlanReportedVersion;
1784 return VOS_STATUS_SUCCESS;
1785}
Jeff Johnson295189b2012-06-20 16:38:30 -07001786/*
1787 * FUNCTION: WDA_GetWcnssSoftwareVersion
1788 * Returns the WCNSS Software version string
1789 */
1790VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1791 tANI_U8 *pVersion,
1792 tANI_U32 versionBufferSize)
1793{
1794 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001796 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001797 if ((NULL == pvosGCtx) || (NULL == pVersion))
1798 {
1799 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001800 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001801 VOS_ASSERT(0);
1802 return VOS_STATUS_E_FAILURE;
1803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001804 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1805 if (NULL == pWDA )
1806 {
1807 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001808 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001809 VOS_ASSERT(0);
1810 return VOS_STATUS_E_FAILURE;
1811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001812 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1813 return VOS_STATUS_SUCCESS;
1814}
Jeff Johnson295189b2012-06-20 16:38:30 -07001815/*
1816 * FUNCTION: WDA_GetWcnssHardwareVersion
1817 * Returns the WCNSS Hardware version string
1818 */
1819VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1820 tANI_U8 *pVersion,
1821 tANI_U32 versionBufferSize)
1822{
1823 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001825 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001826 if ((NULL == pvosGCtx) || (NULL == pVersion))
1827 {
1828 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001829 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001830 VOS_ASSERT(0);
1831 return VOS_STATUS_E_FAILURE;
1832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001833 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1834 if (NULL == pWDA )
1835 {
1836 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001837 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001838 VOS_ASSERT(0);
1839 return VOS_STATUS_E_FAILURE;
1840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001841 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1842 return VOS_STATUS_SUCCESS;
1843}
Jeff Johnson295189b2012-06-20 16:38:30 -07001844/*
1845 * FUNCTION: WDA_WniCfgDnld
1846 * Trigger CFG Download
1847 */
1848VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1849{
1850 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001851 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001852 v_VOID_t *pFileImage = NULL;
1853 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001854 v_VOID_t *pCfgBinary = NULL;
1855 v_SIZE_t cbCfgBinarySize = 0;
1856
1857 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001858 if (NULL == pMac )
1859 {
1860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001861 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001862 VOS_ASSERT(0);
1863 return VOS_STATUS_E_FAILURE;
1864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001865 /* get the number of bytes in the CFG Binary... */
1866 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1867 &cbFileImageSize );
1868 if ( VOS_STATUS_E_NOMEM != vosStatus )
1869 {
1870 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1871 "Error obtaining binary size" );
1872 goto fail;
1873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001874 // malloc a buffer to read in the Configuration binary file.
1875 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001876 if ( NULL == pFileImage )
1877 {
1878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1879 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1880 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001881 vosStatus = VOS_STATUS_E_NOMEM;
1882 goto fail;
1883 }
1884
1885 /* Get the entire CFG file image... */
1886 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1887 &cbFileImageSize );
1888 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1889 {
1890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1891 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1892 cbFileImageSize );
1893 goto fail;
1894 }
1895
1896 /*
1897 * Validate the binary image. This function will return a pointer
1898 * and length where the CFG binary is located within the binary image file.
1899 */
1900 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1901 &pCfgBinary, &cbCfgBinarySize );
1902 if ( VOS_FALSE == bStatus )
1903 {
1904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1905 "Error: Cannot find STA CFG in binary image file" );
1906 vosStatus = VOS_STATUS_E_FAILURE;
1907 goto fail;
1908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001909 /*
1910 * TODO: call the config download function
1911 * for now calling the existing cfg download API
1912 */
1913 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001914 if( pFileImage != NULL )
1915 {
1916 vos_mem_free( pFileImage );
1917 }
1918 return vosStatus;
1919
1920fail:
1921 if(pCfgBinary != NULL)
1922 vos_mem_free( pFileImage );
1923
1924 return vosStatus;
1925}
Jeff Johnson295189b2012-06-20 16:38:30 -07001926/* -----------------------------------------------------------------
1927 * WDI interface
1928 * -----------------------------------------------------------------
1929 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001930/*
1931 * FUNCTION: WDA_suspendDataTxCallback
1932 * call back function called from TL after suspend Transmission
1933 */
1934VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1935 v_U8_t* ucSTAId,
1936 VOS_STATUS vosStatus)
1937{
1938 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001940 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001941 if (NULL == pWDA )
1942 {
1943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001944 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001945 VOS_ASSERT(0);
1946 return VOS_STATUS_E_FAILURE;
1947 }
1948 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1949 {
1950 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1951 }
1952 else
1953 {
1954 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 /* Trigger the event to bring the WDA TL suspend function to come
1957 * out of wait*/
1958 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1959 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1960 {
1961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1962 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001964 /* If TL suspended had timedout before this callback was called, resume back
1965 * TL.*/
1966 if (pWDA->txSuspendTimedOut)
1967 {
1968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1969 "Late TLSuspendCallback, resuming TL back again\n");
1970 WDA_ResumeDataTx(pWDA);
1971 pWDA->txSuspendTimedOut = FALSE;
1972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001973 return VOS_STATUS_SUCCESS;
1974}
Jeff Johnson295189b2012-06-20 16:38:30 -07001975/*
1976 * FUNCTION: WDA_suspendDataTx
1977 * Update TL to suspend the data Transmission
1978 */
1979VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1980{
1981 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1982 tANI_U8 eventIdx = 0;
1983 tANI_U8 ucSTAId = 0;
1984
1985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001986 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001987 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001988 if (pWDA->txSuspendTimedOut)
1989 {
1990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1991 "TL suspend timedout previously, CB not called yet\n");
1992 return status;
1993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001994 /* Reset the event to be not signalled */
1995 status = vos_event_reset(&pWDA->suspendDataTxEvent);
1996 if(!VOS_IS_STATUS_SUCCESS(status))
1997 {
1998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1999 "VOS Event reset failed - status = %d\n",status);
2000 return VOS_STATUS_E_FAILURE;
2001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002002 /*Indicate TL to suspend transmission for all Sta Id */
2003 ucSTAId = WLAN_ALL_STA;
2004 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
2005 WDA_SuspendDataTxCallback);
2006 if(status != VOS_STATUS_SUCCESS)
2007 {
2008 return status;
2009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002010 /* Wait for the event to be set by the TL, to get the response of
2011 * suspending the TX queues, this event should be set by the Callback
2012 * function called by TL*/
2013 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2014 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2015 if(!VOS_IS_STATUS_SUCCESS(status))
2016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2018 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002019 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 /* Set this flag to true when TL suspend times out, so that when TL
2021 * suspend eventually happens and calls the callback, TL can be resumed
2022 * right away by looking at this flag when true.*/
2023 pWDA->txSuspendTimedOut = TRUE;
2024 }
2025 else
2026 {
2027 pWDA->txSuspendTimedOut = FALSE;
2028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002029 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2030 {
2031 status = VOS_STATUS_SUCCESS;
2032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002033 return status;
2034}
Jeff Johnson295189b2012-06-20 16:38:30 -07002035/*
2036 * FUNCTION: WDA_resumeDataTx
2037 * Update TL to resume the data Transmission
2038 */
2039VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2040{
2041 VOS_STATUS status = VOS_STATUS_SUCCESS;
2042 tANI_U8 ucSTAId = 0;
2043
2044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002045 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 ucSTAId = WLAN_ALL_STA;
2047 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
2048 return status;
2049}
Jeff Johnson295189b2012-06-20 16:38:30 -07002050/*
2051 * FUNCTION: WDA_InitScanReqCallback
2052 * Trigger Init SCAN callback
2053 */
2054void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2055{
2056 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2057 tWDA_CbContext *pWDA;
2058 tInitScanParams *pWDA_ScanParam ;
2059 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002061 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002062 if(NULL == pWdaParams)
2063 {
2064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002065 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002066 VOS_ASSERT(0) ;
2067 return ;
2068 }
2069 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2070 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002071 if(NULL == pWDA_ScanParam)
2072 {
2073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002074 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002075 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2077 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002078 return ;
2079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002080 if(WDI_STATUS_SUCCESS != wdiStatus)
2081 {
2082 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002083 if(VOS_STATUS_SUCCESS != status)
2084 {
2085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002086 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002087 }
2088 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002089 /* free WDI command buffer */
2090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002091 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002092
Jeff Johnson295189b2012-06-20 16:38:30 -07002093
2094 /* assign status to scan params */
2095 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 /* send SCAN RSP message back to PE */
2097 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002098 return ;
2099}
2100
2101/*
2102 * FUNCTION: WDA_ProcessInitScanReq
2103 * Trigger Init SCAN in DAL
2104 */
2105VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2106 tInitScanParams *initScanParams)
2107{
2108 WDI_Status status = WDI_STATUS_SUCCESS ;
2109 WDI_InitScanReqParamsType *wdiInitScanParam =
2110 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2111 sizeof(WDI_InitScanReqParamsType)) ;
2112 tWDA_ReqParams *pWdaParams;
2113 tANI_U8 i = 0;
2114
2115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002116 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002117 if(NULL == wdiInitScanParam)
2118 {
2119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002120 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002121 VOS_ASSERT(0);
2122 return VOS_STATUS_E_NOMEM;
2123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002124 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2125 if(NULL == pWdaParams)
2126 {
2127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002128 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 VOS_ASSERT(0);
2130 vos_mem_free(wdiInitScanParam);
2131 return VOS_STATUS_E_NOMEM;
2132 }
2133
2134 /* Copy init Scan params to WDI structure */
2135 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2136 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2137 sizeof(tSirMacAddr)) ;
2138 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2139 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2140 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
2141#ifdef WLAN_FEATURE_P2P
2142 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2143 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
2144#else
2145 wdiInitScanParam->wdiReqInfo.bUseNOA = 0;
2146 wdiInitScanParam->wdiReqInfo.scanDuration = 0;
2147#endif
2148 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2149 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002150 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2151 {
2152 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2153 initScanParams->scanEntry.bssIdx[i] ;
2154 }
2155
2156 /* if Frame length, copy macMgmtHdr or WDI structure */
2157 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2158 {
2159 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2160 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2161 }
2162 wdiInitScanParam->wdiReqStatusCB = NULL ;
2163
Jeff Johnson295189b2012-06-20 16:38:30 -07002164 /* Store Init Req pointer, as this will be used for response */
2165 pWdaParams->pWdaContext = pWDA;
2166 pWdaParams->wdaMsgParam = initScanParams;
2167 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 /* first try to suspend TX */
2169 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002170 if(WDI_STATUS_SUCCESS != status)
2171 {
2172 goto handleWdiFailure;
2173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002174 /* call DAL API to pass init scan request to DAL */
2175 status = WDI_InitScanReq(wdiInitScanParam,
2176 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002177 if(IS_WDI_STATUS_FAILURE(status))
2178 {
2179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2180 "error in WDA Init Scan, Resume Tx " );
2181 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 VOS_ASSERT(0) ;
2183
2184 goto handleWdiFailure;
2185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002186 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002187handleWdiFailure:
2188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2189 "Failure in WDI Api, free all the memory " );
2190 /* free WDI command buffer */
2191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2192 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002193 /* send Failure to PE */
2194 initScanParams->status = eSIR_FAILURE ;
2195 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 return CONVERT_WDI2VOS_STATUS(status) ;
2197}
2198
Jeff Johnson295189b2012-06-20 16:38:30 -07002199/*
2200 * FUNCTION: WDA_StartScanReqCallback
2201 * send Start SCAN RSP back to PE
2202 */
2203void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2204 void* pUserData)
2205{
2206 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2207 tWDA_CbContext *pWDA;
2208 tStartScanParams *pWDA_ScanParam;
2209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002210 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002211 if(NULL == pWdaParams)
2212 {
2213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002214 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002215 VOS_ASSERT(0) ;
2216 return ;
2217 }
2218 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2219 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 if(NULL == pWDA_ScanParam)
2221 {
2222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002223 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002225 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002226 return ;
2227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2229 {
2230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002231 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002233 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002234 return ;
2235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2237 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002238
Jeff Johnson295189b2012-06-20 16:38:30 -07002239
2240 /* assign status to scan params */
2241 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(pScanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 /* send SCAN RSP message back to PE */
2243 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002244 return ;
2245}
2246
Jeff Johnson295189b2012-06-20 16:38:30 -07002247/*
2248 * FUNCTION: WDA_ProcessStartScanReq
2249 * Trigger start SCAN in WDI
2250 */
2251VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2252 tStartScanParams *startScanParams)
2253{
2254 WDI_Status status = WDI_STATUS_SUCCESS;
2255 WDI_StartScanReqParamsType *wdiStartScanParams =
2256 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2257 sizeof(WDI_StartScanReqParamsType)) ;
2258 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002260 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002261 if(NULL == wdiStartScanParams)
2262 {
2263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002264 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 VOS_ASSERT(0);
2266 return VOS_STATUS_E_NOMEM;
2267 }
2268 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2269 if(NULL == pWdaParams)
2270 {
2271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002273 VOS_ASSERT(0);
2274 vos_mem_free(wdiStartScanParams);
2275 return VOS_STATUS_E_NOMEM;
2276 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 /* Copy init Scan params to WDI structure */
2278 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2279 wdiStartScanParams->wdiReqStatusCB = NULL ;
2280
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 /* Store Init Req pointer, as this will be used for response */
2282 /* store Params pass it to WDI */
2283 pWdaParams->pWdaContext = pWDA;
2284 pWdaParams->wdaMsgParam = startScanParams;
2285 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002286 /* call DAL API to pass init scan request to DAL */
2287 status = WDI_StartScanReq(wdiStartScanParams,
2288 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 /* failure returned by WDI API */
2290 if(IS_WDI_STATUS_FAILURE(status))
2291 {
2292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2293 "Failure in Start Scan WDI API, free all the memory "
2294 "It should be due to previous abort scan." );
2295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2296 vos_mem_free(pWdaParams) ;
2297 startScanParams->status = eSIR_FAILURE ;
2298 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 return CONVERT_WDI2VOS_STATUS(status) ;
2301}
Jeff Johnson295189b2012-06-20 16:38:30 -07002302/*
2303 * FUNCTION: WDA_EndScanReqCallback
2304 * END SCAN callback
2305 */
2306void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2307{
2308 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2309 tWDA_CbContext *pWDA;
2310 tEndScanParams *endScanParam;
2311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 if(NULL == pWdaParams)
2314 {
2315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002316 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 VOS_ASSERT(0) ;
2318 return ;
2319 }
2320 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2321 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 if(NULL == endScanParam)
2323 {
2324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002325 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2328 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 return ;
2330 }
2331
2332 /* Free WDI command buffer */
2333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2334 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002335 /* assign status to scan params */
2336 endScanParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002337 /* send response back to PE */
2338 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2339 return ;
2340}
2341
Jeff Johnson295189b2012-06-20 16:38:30 -07002342/*
2343 * FUNCTION: WDA_ProcessEndScanReq
2344 * Trigger END SCAN in WDI
2345 */
2346VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2347 tEndScanParams *endScanParams)
2348{
2349 WDI_Status status = WDI_STATUS_SUCCESS;
2350 WDI_EndScanReqParamsType *wdiEndScanParams =
2351 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2352 sizeof(WDI_EndScanReqParamsType)) ;
2353 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002355 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002356 if(NULL == wdiEndScanParams)
2357 {
2358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002360 VOS_ASSERT(0);
2361 return VOS_STATUS_E_NOMEM;
2362 }
2363 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2364 if(NULL == pWdaParams)
2365 {
2366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 VOS_ASSERT(0);
2369 vos_mem_free(wdiEndScanParams);
2370 return VOS_STATUS_E_NOMEM;
2371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 /* Copy init Scan params to WDI structure */
2373 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2374 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002375 /* Store Init Req pointer, as this will be used for response */
2376 /* store Params pass it to WDI */
2377 pWdaParams->pWdaContext = pWDA;
2378 pWdaParams->wdaMsgParam = endScanParams;
2379 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 /* call DAL API to pass init scan request to DAL */
2381 status = WDI_EndScanReq(wdiEndScanParams,
2382 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 if(IS_WDI_STATUS_FAILURE(status))
2384 {
2385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2386 "Failure in End Scan WDI API, free all the memory "
2387 "It should be due to previous abort scan." );
2388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2389 vos_mem_free(pWdaParams) ;
2390 endScanParams->status = eSIR_FAILURE ;
2391 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2392 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 return CONVERT_WDI2VOS_STATUS(status) ;
2394}
Jeff Johnson295189b2012-06-20 16:38:30 -07002395/*
2396 * FUNCTION: WDA_FinishScanReqCallback
2397 * Trigger Finish SCAN callback
2398 */
2399void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2400{
2401 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2402 tWDA_CbContext *pWDA;
2403 tFinishScanParams *finishScanParam;
2404 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002406 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002407 if(NULL == pWdaParams)
2408 {
2409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002410 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002411 VOS_ASSERT(0) ;
2412 return ;
2413 }
2414
2415 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2416 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 if(NULL == finishScanParam)
2418 {
2419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002420 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2423 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 return ;
2425 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2427 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 /*
2429 * Now Resume TX, if we reached here means, TX is already suspended, we
2430 * have to resume it unconditionaly
2431 */
2432 status = WDA_ResumeDataTx(pWDA) ;
2433
2434 if(VOS_STATUS_SUCCESS != status)
2435 {
2436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002437 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 finishScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2441 return ;
2442}
Jeff Johnson295189b2012-06-20 16:38:30 -07002443/*
2444 * FUNCTION: WDA_ProcessFinshScanReq
2445 * Trigger Finish SCAN in WDI
2446 */
2447VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2448 tFinishScanParams *finishScanParams)
2449{
2450 WDI_Status status = WDI_STATUS_SUCCESS;
2451 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2452 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2453 sizeof(WDI_FinishScanReqParamsType)) ;
2454 tWDA_ReqParams *pWdaParams ;
2455 tANI_U8 i = 0;
2456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 if(NULL == wdiFinishScanParams)
2459 {
2460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002462 VOS_ASSERT(0);
2463 return VOS_STATUS_E_NOMEM;
2464 }
2465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2466 if(NULL == pWdaParams)
2467 {
2468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 VOS_ASSERT(0);
2471 vos_mem_free(wdiFinishScanParams);
2472 return VOS_STATUS_E_NOMEM;
2473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 /* Copy init Scan params to WDI structure */
2475 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2476 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2477 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2479 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2480 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2481 finishScanParams->frameLength ;
2482 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2483 finishScanParams->currentOperChannel ;
2484 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2485 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2486 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002487 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2488 {
2489 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2490 finishScanParams->scanEntry.bssIdx[i] ;
2491 }
2492
2493
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 /* if Frame length, copy macMgmtHdr ro WDI structure */
2495 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2496 {
2497 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2498 &finishScanParams->macMgmtHdr,
2499 sizeof(WDI_MacMgmtHdr)) ;
2500 }
2501 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 /* Store Init Req pointer, as this will be used for response */
2503 /* store Params pass it to WDI */
2504 pWdaParams->pWdaContext = pWDA;
2505 pWdaParams->wdaMsgParam = finishScanParams;
2506 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 /* call DAL API to pass init scan request to DAL */
2508 status = WDI_FinishScanReq(wdiFinishScanParams,
2509 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002510
Jeff Johnson295189b2012-06-20 16:38:30 -07002511
2512 /*
2513 * WDI API returns failure..
2514 */
2515 if(IS_WDI_STATUS_FAILURE( status))
2516 {
2517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2518 "Failure in Finish Scan WDI API, free all the memory " );
2519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2520 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002521 finishScanParams->status = eSIR_FAILURE ;
2522 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 return CONVERT_WDI2VOS_STATUS(status) ;
2525}
Jeff Johnson295189b2012-06-20 16:38:30 -07002526/*---------------------------------------------------------------------
2527 * ASSOC API's
2528 *---------------------------------------------------------------------
2529 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002530/*
2531 * FUNCTION: WDA_JoinReqCallback
2532 * Trigger Init SCAN callback
2533 */
2534void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2535{
2536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2537 tWDA_CbContext *pWDA;
2538 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002540 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 if(NULL == pWdaParams)
2542 {
2543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002544 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 VOS_ASSERT(0) ;
2546 return ;
2547 }
2548 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2549 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2551 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 /* reset macBSSID */
2553 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002554 /* reset macSTASelf */
2555 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002556 joinReqParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 return ;
2559}
Jeff Johnson295189b2012-06-20 16:38:30 -07002560/*
2561 * FUNCTION: WDA_ProcessJoinReq
2562 * Trigger Join REQ in WDI
2563 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002564VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2565 tSwitchChannelParams* joinReqParam)
2566{
2567 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 WDI_JoinReqParamsType *wdiJoinReqParam =
2569 (WDI_JoinReqParamsType *)vos_mem_malloc(
2570 sizeof(WDI_JoinReqParamsType)) ;
2571 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002573 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002574 if(NULL == wdiJoinReqParam)
2575 {
2576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002579 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 return VOS_STATUS_E_NOMEM;
2581 }
2582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2583 if(NULL == pWdaParams)
2584 {
2585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 VOS_ASSERT(0);
2588 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002589 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 return VOS_STATUS_E_NOMEM;
2591 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002592
2593 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2594 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2595 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2596 {
2597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2598 "%s: received join request when BSSID or self-STA is NULL "
2599 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002600 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002601 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2602 VOS_ASSERT(0);
2603 vos_mem_free(wdiJoinReqParam);
2604 vos_mem_free(pWdaParams);
2605 joinReqParam->status = eSIR_FAILURE ;
2606 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2607 return VOS_STATUS_E_INVAL;
2608 }
2609
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 /* copy the BSSID for pWDA */
2611 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2612 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2614 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002615 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2616 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002617#ifdef WLAN_FEATURE_VOWIFI
2618 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2619 joinReqParam->maxTxPower ;
2620#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2622 joinReqParam->localPowerConstraint ;
2623#endif
2624 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2625 joinReqParam->secondaryChannelOffset ;
2626 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2627
2628 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 /* Store Init Req pointer, as this will be used for response */
2630 /* store Params pass it to WDI */
2631 pWdaParams->pWdaContext = pWDA;
2632 pWdaParams->wdaMsgParam = joinReqParam;
2633 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 status = WDI_JoinReq(wdiJoinReqParam,
2635 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 if(IS_WDI_STATUS_FAILURE(status))
2637 {
2638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2639 "Failure in Join WDI API, free all the memory " );
2640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2641 vos_mem_free(pWdaParams) ;
2642 joinReqParam->status = eSIR_FAILURE ;
2643 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 return CONVERT_WDI2VOS_STATUS(status) ;
2646}
Jeff Johnson295189b2012-06-20 16:38:30 -07002647/*
2648 * FUNCTION: WDA_SwitchChannelReqCallback
2649 * send Switch channel RSP back to PE
2650 */
2651void WDA_SwitchChannelReqCallback(
2652 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2653{
2654 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2655 tWDA_CbContext *pWDA;
2656 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002658 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002659 if(NULL == pWdaParams)
2660 {
2661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002662 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 VOS_ASSERT(0) ;
2664 return ;
2665 }
2666 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2667 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2668
2669#ifdef WLAN_FEATURE_VOWIFI
2670 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2671#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2673 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 pSwitchChanParams->status =
2675 CONVERT_WDI2SIR_STATUS(wdiSwitchChanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002676 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 return ;
2678}
Jeff Johnson295189b2012-06-20 16:38:30 -07002679/*
2680 * FUNCTION: WDA_ProcessChannelSwitchReq
2681 * Request to WDI to switch channel REQ params.
2682 */
2683VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2684 tSwitchChannelParams *pSwitchChanParams)
2685{
2686 WDI_Status status = WDI_STATUS_SUCCESS ;
2687 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2688 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2689 sizeof(WDI_SwitchChReqParamsType)) ;
2690 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002692 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 if(NULL == wdiSwitchChanParam)
2694 {
2695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002696 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 VOS_ASSERT(0);
2698 return VOS_STATUS_E_NOMEM;
2699 }
2700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2701 if(NULL == pWdaParams)
2702 {
2703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 VOS_ASSERT(0);
2706 vos_mem_free(wdiSwitchChanParam);
2707 return VOS_STATUS_E_NOMEM;
2708 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2710#ifndef WLAN_FEATURE_VOWIFI
2711 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2712 pSwitchChanParams->localPowerConstraint;
2713#endif
2714 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2715 pSwitchChanParams->secondaryChannelOffset;
2716 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 /* Store req pointer, as this will be used for response */
2718 /* store Params pass it to WDI */
2719 pWdaParams->pWdaContext = pWDA;
2720 pWdaParams->wdaMsgParam = pSwitchChanParams;
2721 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002722#ifdef WLAN_FEATURE_VOWIFI
2723 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2724 = pSwitchChanParams->maxTxPower;
2725 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2726 pSwitchChanParams ->selfStaMacAddr,
2727 sizeof(tSirMacAddr));
2728#endif
2729 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2730 pSwitchChanParams->bssId,
2731 sizeof(tSirMacAddr));
2732
2733 status = WDI_SwitchChReq(wdiSwitchChanParam,
2734 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 if(IS_WDI_STATUS_FAILURE(status))
2736 {
2737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2738 "Failure in process channel switch Req WDI API, free all the memory " );
2739 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2740 vos_mem_free(pWdaParams) ;
2741 pSwitchChanParams->status = eSIR_FAILURE ;
2742 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 return CONVERT_WDI2VOS_STATUS(status) ;
2745}
Jeff Johnson295189b2012-06-20 16:38:30 -07002746/*
2747 * FUNCTION: WDA_ConfigBssReqCallback
2748 * config BSS Req Callback, called by WDI
2749 */
2750void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2751 ,void* pUserData)
2752{
2753 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2754 tWDA_CbContext *pWDA;
2755 tAddBssParams *configBssReqParam;
2756 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002758 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 if(NULL == pWdaParams)
2760 {
2761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002762 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 VOS_ASSERT(0) ;
2764 return ;
2765 }
2766 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2767 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2768 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 configBssReqParam->status =
2770 CONVERT_WDI2SIR_STATUS(wdiConfigBssRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002771 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2772 {
2773 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2774 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2776 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2777 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2778
2779 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2780 {
2781 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2782 {
2783 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2784 staConfigBssParam->staType = STA_ENTRY_BSSID;
2785 }
2786 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2787 (staConfigBssParam->staType == STA_ENTRY_SELF))
2788 {
2789 /* This is the 1st add BSS Req for the BTAMP STA */
2790 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2791 staConfigBssParam->staType = STA_ENTRY_BSSID;
2792 }
2793 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2794 (staConfigBssParam->staType == STA_ENTRY_PEER))
2795 {
2796 /* This is the 2nd ADD BSS Request that is sent
2797 * on the BTAMP STA side. The Sta type is
2798 * set to STA_ENTRY_PEER here.*/
2799 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2800 }
2801 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2802 (staConfigBssParam->staType == STA_ENTRY_SELF))
2803 {
2804 /* statype is already set by PE.
2805 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2806 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2807 staConfigBssParam->staType = STA_ENTRY_BSSID;
2808 }
2809 else
2810 {
2811 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2812 staConfigBssParam->staType = STA_ENTRY_PEER;
2813 }
2814 }
2815 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2816 {
2817 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2818 staConfigBssParam->staType = STA_ENTRY_SELF;
2819 }
2820 else
2821 {
2822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2823 "Invalid operation mode specified");
2824 VOS_ASSERT(0);
2825 }
2826
2827 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002828 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2832 sizeof(tSirMacAddr));
2833 staConfigBssParam->txChannelWidthSet =
2834 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002835 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2836 staConfigBssParam->htCapable)
2837 {
2838 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2839 wdiConfigBssRsp->ucBSSIdx;
2840 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2841 WDA_VALID_STA_INDEX ;
2842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2844 wdiConfigBssRsp->ucBSSIdx,
2845 wdiConfigBssRsp->ucSTAIdx))
2846 {
2847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002848 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002849 VOS_ASSERT(0) ;
2850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002851 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2852 {
2853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002854 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 VOS_ASSERT(0) ;
2856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002857#ifdef WLAN_FEATURE_VOWIFI
2858 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2859#endif
2860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2862 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 return ;
2865}
Jeff Johnson295189b2012-06-20 16:38:30 -07002866/*
2867 * FUNCTION: WDA_UpdateEdcaParamsForAC
2868 * Update WDI EDCA params with PE edca params
2869 */
2870void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2871 WDI_EdcaParamRecord *wdiEdcaParam,
2872 tSirMacEdcaParamRecord *macEdcaParam)
2873{
2874 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2875 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2876 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2877 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2878 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2879 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2880}
Jeff Johnson295189b2012-06-20 16:38:30 -07002881/*
2882 * FUNCTION: WDA_ProcessConfigBssReq
2883 * Configure BSS before starting Assoc with AP
2884 */
2885VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2886 tAddBssParams* configBssReqParam)
2887{
2888 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002889 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2890 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2891 sizeof(WDI_ConfigBSSReqParamsType)) ;
2892 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002894 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002895 if(NULL == wdiConfigBssReqParam)
2896 {
2897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002898 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 VOS_ASSERT(0);
2900 return VOS_STATUS_E_NOMEM;
2901 }
2902 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2903 if(NULL == pWdaParams)
2904 {
2905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 VOS_ASSERT(0);
2908 vos_mem_free(wdiConfigBssReqParam);
2909 return VOS_STATUS_E_NOMEM;
2910 }
Kiran4a17ebe2013-01-31 10:43:43 -08002911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2912 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2915 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 /* Store Init Req pointer, as this will be used for response */
2917 /* store Params pass it to WDI */
2918 pWdaParams->pWdaContext = pWDA;
2919 pWdaParams->wdaMsgParam = configBssReqParam;
2920 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002921 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2922 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 if(IS_WDI_STATUS_FAILURE(status))
2924 {
2925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2926 "Failure in Config BSS WDI API, free all the memory " );
2927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2928 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 return CONVERT_WDI2VOS_STATUS(status) ;
2933}
Jeff Johnson295189b2012-06-20 16:38:30 -07002934#ifdef ENABLE_HAL_COMBINED_MESSAGES
2935/*
2936 * FUNCTION: WDA_PostAssocReqCallback
2937 * Post ASSOC req callback, send RSP back to PE
2938 */
2939void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2940 void* pUserData)
2941{
2942 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2943 tPostAssocParams *postAssocReqParam =
2944 (tPostAssocParams *)pWDA->wdaMsgParam ;
2945 /*STA context within the BSS Params*/
2946 tAddStaParams *staPostAssocParam =
2947 &postAssocReqParam->addBssParams.staContext ;
2948 /*STA Params for self STA*/
2949 tAddStaParams *selfStaPostAssocParam =
2950 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002952 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 postAssocReqParam->status =
2954 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002955 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2956 {
2957 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2958 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2959 sizeof(tSirMacAddr)) ;
2960 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2961 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2962 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2964 }
2965 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2966 pWDA->wdaWdiApiMsgParam = NULL;
2967 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 return ;
2970}
Jeff Johnson295189b2012-06-20 16:38:30 -07002971/*
2972 * FUNCTION: WDA_ProcessPostAssocReq
2973 * Trigger POST ASSOC processing in WDI
2974 */
2975VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2976 tPostAssocParams *postAssocReqParam)
2977{
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 WDI_Status status = WDI_STATUS_SUCCESS ;
2979
2980 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2981 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2982 sizeof(WDI_PostAssocReqParamsType)) ;
2983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002984 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002985
Jeff Johnson295189b2012-06-20 16:38:30 -07002986 if(NULL == wdiPostAssocReqParam)
2987 {
2988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002989 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002990 VOS_ASSERT(0);
2991 return VOS_STATUS_E_NOMEM;
2992 }
2993
2994 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
2995 {
2996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002997 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 VOS_ASSERT(0);
2999 return VOS_STATUS_E_FAILURE;
3000 }
3001
Jeff Johnson295189b2012-06-20 16:38:30 -07003002 /* update BSS params into WDI structure */
3003 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3004 &postAssocReqParam->addBssParams) ;
3005 /* update STA params into WDI structure */
3006 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3007 &postAssocReqParam->addStaParams) ;
3008
3009 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3010 postAssocReqParam->addBssParams.highPerformance;
3011 WDA_UpdateEdcaParamsForAC(pWDA,
3012 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3013 &postAssocReqParam->addBssParams.acbe);
3014 WDA_UpdateEdcaParamsForAC(pWDA,
3015 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3016 &postAssocReqParam->addBssParams.acbk);
3017 WDA_UpdateEdcaParamsForAC(pWDA,
3018 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3019 &postAssocReqParam->addBssParams.acvi);
3020 WDA_UpdateEdcaParamsForAC(pWDA,
3021 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3022 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 /* Store Init Req pointer, as this will be used for response */
3024 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 /* store Params pass it to WDI */
3026 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3028 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 if(IS_WDI_STATUS_FAILURE(status))
3030 {
3031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3032 "Failure in Post Assoc WDI API, free all the memory " );
3033 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3034 pWDA->wdaWdiApiMsgParam = NULL;
3035 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003036 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 return CONVERT_WDI2VOS_STATUS(status) ;
3040}
3041#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003042/*
3043 * FUNCTION: WDA_AddStaReqCallback
3044 * ADD STA req callback, send RSP back to PE
3045 */
3046void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3047 void* pUserData)
3048{
3049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3050 tWDA_CbContext *pWDA;
3051 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003053 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 if(NULL == pWdaParams)
3055 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 VOS_ASSERT(0) ;
3058 return ;
3059 }
3060 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3061 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 addStaReqParam->status =
3063 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3065 {
3066 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3067 /*TODO: UMAC structure doesn't have these fields*/
3068 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3069 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3070 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3071 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3072 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3073 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003074#ifdef FEATURE_WLAN_TDLS
3075 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3076 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3077#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003079#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 {
3081 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3082 wdiConfigStaRsp->ucBssIdx;
3083 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3084 WDA_VALID_STA_INDEX ;
3085 }
3086 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3087 {
3088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003089 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 VOS_ASSERT(0) ;
3091 return ;
3092 }
3093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3095 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 return ;
3098}
Jeff Johnson295189b2012-06-20 16:38:30 -07003099/*
3100 * FUNCTION: WDA_ConfigStaReq
3101 * Trigger Config STA processing in WDI
3102 */
3103VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3104 tAddStaParams *addStaReqParam)
3105{
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3108 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3109 sizeof(WDI_ConfigSTAReqParamsType)) ;
3110 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 if(NULL == wdiConfigStaReqParam)
3114 {
3115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003117 VOS_ASSERT(0);
3118 return VOS_STATUS_E_NOMEM;
3119 }
3120 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3121 if(NULL == pWdaParams)
3122 {
3123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 VOS_ASSERT(0);
3126 vos_mem_free(wdiConfigStaReqParam);
3127 return VOS_STATUS_E_NOMEM;
3128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 /* update STA params into WDI structure */
3131 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3132 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 /* Store Init Req pointer, as this will be used for response */
3134 /* store Params pass it to WDI */
3135 pWdaParams->pWdaContext = pWDA;
3136 pWdaParams->wdaMsgParam = addStaReqParam;
3137 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003138 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3139 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003140 if(IS_WDI_STATUS_FAILURE(status))
3141 {
3142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3143 "Failure in Config STA WDI API, free all the memory " );
3144 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3145 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003149 return CONVERT_WDI2VOS_STATUS(status) ;
3150}
Jeff Johnson295189b2012-06-20 16:38:30 -07003151/*
3152 * FUNCTION: WDA_DelBSSReqCallback
3153 * Dens DEL BSS RSP back to PE
3154 */
3155void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3156 void* pUserData)
3157{
3158 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3159 tWDA_CbContext *pWDA;
3160 tDeleteBssParams *delBssReqParam;
3161 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003163 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 if(NULL == pWdaParams)
3165 {
3166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003167 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 VOS_ASSERT(0) ;
3169 return ;
3170 }
3171 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3172 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3175 {
3176 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3177 sizeof(tSirMacAddr)) ;
3178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3180 {
3181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003182 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 VOS_ASSERT(0) ;
3184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3186 {
3187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003188 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 VOS_ASSERT(0) ;
3190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 if(WDI_DS_ClearStaIdxPerBssIdx(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: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 VOS_ASSERT(0) ;
3196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3198 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003199 /* reset the the system role*/
3200 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3201
3202 /* Reset the BA related information */
3203 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3204 {
3205 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3206 {
3207 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3208 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3209 /* Reset framesTxed counters here */
3210 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3211 {
3212 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3213 }
3214 }
3215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 return ;
3218}
3219
Jeff Johnson295189b2012-06-20 16:38:30 -07003220/*
3221 * FUNCTION: WDA_ProcessDelBssReq
3222 * Init DEL BSS req with WDI
3223 */
3224VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3225 tDeleteBssParams *delBssParam)
3226{
3227 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3229 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3230 sizeof(WDI_DelBSSReqParamsType)) ;
3231 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003233 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003234 if(NULL == wdiDelBssReqParam)
3235 {
3236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003237 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003238 VOS_ASSERT(0);
3239 return VOS_STATUS_E_NOMEM;
3240 }
3241 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3242 if(NULL == pWdaParams)
3243 {
3244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 VOS_ASSERT(0);
3247 vos_mem_free(wdiDelBssReqParam);
3248 return VOS_STATUS_E_NOMEM;
3249 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3251 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3252
3253 /* Store Init Req pointer, as this will be used for response */
3254 /* store Params pass it to WDI */
3255 pWdaParams->pWdaContext = pWDA;
3256 pWdaParams->wdaMsgParam = delBssParam;
3257 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 status = WDI_DelBSSReq(wdiDelBssReqParam,
3259 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 if(IS_WDI_STATUS_FAILURE(status))
3261 {
3262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3263 "Failure in Del BSS WDI API, free all the memory " );
3264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3265 vos_mem_free(pWdaParams) ;
3266 delBssParam->status = eSIR_FAILURE ;
3267 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 return CONVERT_WDI2VOS_STATUS(status) ;
3270}
Jeff Johnson295189b2012-06-20 16:38:30 -07003271/*
3272 * FUNCTION: WDA_DelSTAReqCallback
3273 * Dens DEL STA RSP back to PE
3274 */
3275void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3276 void* pUserData)
3277{
3278 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3279 tWDA_CbContext *pWDA;
3280 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003282 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 if(NULL == pWdaParams)
3284 {
3285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003286 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 VOS_ASSERT(0) ;
3288 return ;
3289 }
3290 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3291 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3294 {
3295 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3296 {
3297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003298 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 VOS_ASSERT(0) ;
3300 }
3301 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3302 }
3303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3304 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 /*Reset the BA information corresponding to this STAIdx */
3306 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3307 WDA_INVALID_STA_INDEX;
3308 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3309
3310 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003311 return ;
3312}
Jeff Johnson295189b2012-06-20 16:38:30 -07003313/*
3314 * FUNCTION: WDA_ProcessDelStaReq
3315 * Init DEL STA req with WDI
3316 */
3317VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3318 tDeleteStaParams *delStaParam)
3319{
3320 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3322 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3323 sizeof(WDI_DelSTAReqParamsType)) ;
3324 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003326 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 if(NULL == wdiDelStaReqParam)
3328 {
3329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003330 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003331 VOS_ASSERT(0);
3332 return VOS_STATUS_E_NOMEM;
3333 }
3334 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3335 if(NULL == pWdaParams)
3336 {
3337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003338 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 VOS_ASSERT(0);
3340 vos_mem_free(wdiDelStaReqParam);
3341 return VOS_STATUS_E_NOMEM;
3342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3344 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003345 /* Store Init Req pointer, as this will be used for response */
3346 /* store Params pass it to WDI */
3347 pWdaParams->pWdaContext = pWDA;
3348 pWdaParams->wdaMsgParam = delStaParam;
3349 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 status = WDI_DelSTAReq(wdiDelStaReqParam,
3351 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003352 if(IS_WDI_STATUS_FAILURE(status))
3353 {
3354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3355 "Failure in Del STA WDI API, free all the memory status = %d",
3356 status );
3357 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3358 vos_mem_free(pWdaParams) ;
3359 delStaParam->status = eSIR_FAILURE ;
3360 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 return CONVERT_WDI2VOS_STATUS(status) ;
3363}
Jeff Johnson295189b2012-06-20 16:38:30 -07003364void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3365{
3366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3367 tWDA_CbContext *pWDA;
3368 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003370 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003371 if(NULL == pWdaParams)
3372 {
3373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003374 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 VOS_ASSERT(0) ;
3376 return ;
3377 }
3378 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3379 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3381 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3383 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3384 pwdiAddSTASelfRsp->macSelfSta,
3385 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 return ;
3388}
Jeff Johnson295189b2012-06-20 16:38:30 -07003389/*
3390 * FUNCTION: WDA_ProcessAddStaSelfReq
3391 *
3392 */
3393VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3394{
3395 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003396 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3398 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3399 sizeof(WDI_AddSTASelfReqParamsType)) ;
3400 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003402 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 if( NULL == wdiAddStaSelfReq )
3404 {
3405 VOS_ASSERT( 0 );
3406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003407 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 return( VOS_STATUS_E_NOMEM );
3409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 if( NULL == pWdaParams )
3412 {
3413 VOS_ASSERT( 0 );
3414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003415 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 vos_mem_free(wdiAddStaSelfReq) ;
3417 return( VOS_STATUS_E_NOMEM );
3418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3421 /* Store Init Req pointer, as this will be used for response */
3422 /* store Params pass it to WDI */
3423 pWdaParams->pWdaContext = pWDA;
3424 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3425 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003426 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003427
Jeff Johnson43971f52012-07-17 12:26:56 -07003428 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003429 {
3430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3431 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003432 wstatus );
3433 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3435 vos_mem_free(pWdaParams) ;
3436 pAddStaSelfReq->status = eSIR_FAILURE ;
3437 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3438 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003439 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003440}
Jeff Johnson295189b2012-06-20 16:38:30 -07003441/*
3442 * FUNCTION: WDA_DelSTASelfRespCallback
3443 *
3444 */
3445void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3446 wdiDelStaSelfRspParams , void* pUserData)
3447{
3448 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3449 tWDA_CbContext *pWDA;
3450 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003452 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 if (NULL == pWdaParams)
3454 {
3455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003456 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 VOS_ASSERT(0);
3458 return;
3459 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3461 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003462 delStaSelfParams->status =
3463 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3464
3465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3466 vos_mem_free(pWdaParams) ;
3467
3468 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 return ;
3470}
Jeff Johnson295189b2012-06-20 16:38:30 -07003471/*
3472 * FUNCTION: WDA_DelSTASelfReqCallback
3473 *
3474 */
3475void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3476 void* pUserData)
3477{
3478 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3479 tWDA_CbContext *pWDA;
3480 tDelStaSelfParams *delStaSelfParams;
3481
3482 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3483 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003484 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003485
3486 if (NULL == pWdaParams)
3487 {
3488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003489 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 VOS_ASSERT(0);
3491 return;
3492 }
3493
3494 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3495 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3496
3497 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3498
3499 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3500 {
3501 VOS_ASSERT(0);
3502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3503 vos_mem_free(pWdaParams) ;
3504 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3505 }
3506
3507 return ;
3508}
3509
3510/*
3511 * FUNCTION: WDA_DelSTASelfReq
3512 * Trigger Config STA processing in WDI
3513 */
3514VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3515 tDelStaSelfParams* pDelStaSelfReqParam)
3516{
3517 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003518 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003519 tWDA_ReqParams *pWdaParams = NULL;
3520 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3521 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3522 sizeof(WDI_DelSTASelfReqParamsType)) ;
3523
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003525 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003526 if( NULL == wdiDelStaSelfReq )
3527 {
3528 VOS_ASSERT( 0 );
3529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003530 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 return( VOS_STATUS_E_NOMEM );
3532 }
3533
3534 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3535 if( NULL == pWdaParams )
3536 {
3537 VOS_ASSERT( 0 );
3538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003539 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003540 vos_mem_free(wdiDelStaSelfReq) ;
3541 return( VOS_STATUS_E_NOMEM );
3542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 pWdaParams->pWdaContext = pWDA;
3544 /* Store param pointer as passed in by caller */
3545 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3546 /* store Params pass it to WDI */
3547 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003548 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3549 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3550
3551 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3552 wdiDelStaSelfReq->pUserData = pWdaParams;
3553
Jeff Johnson43971f52012-07-17 12:26:56 -07003554 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3556
Jeff Johnson43971f52012-07-17 12:26:56 -07003557 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 {
3559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3560 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3561 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003562 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3564 vos_mem_free(pWdaParams) ;
3565 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3566 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3567 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003568 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003569}
3570
Jeff Johnson295189b2012-06-20 16:38:30 -07003571/*
3572 * FUNCTION: WDA_SendMsg
3573 * Send Message back to PE
3574 */
3575void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3576 void *pBodyptr, tANI_U32 bodyVal)
3577{
3578 tSirMsgQ msg = {0} ;
3579 tANI_U32 status = VOS_STATUS_SUCCESS ;
3580 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 msg.type = msgType;
3582 msg.bodyval = bodyVal;
3583 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003585 if (VOS_STATUS_SUCCESS != status)
3586 {
3587 if(NULL != pBodyptr)
3588 {
3589 vos_mem_free(pBodyptr);
3590 }
3591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003592 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 VOS_ASSERT(0) ;
3594 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 return ;
3596}
Jeff Johnson295189b2012-06-20 16:38:30 -07003597/*
3598 * FUNCTION: WDA_UpdateBSSParams
3599 * Translated WDA/PE BSS info into WDI BSS info..
3600 */
3601void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3602 WDI_ConfigBSSReqInfoType *wdiBssParams,
3603 tAddBssParams *wdaBssParams)
3604{
3605 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 /* copy bssReq Params to WDI structure */
3607 vos_mem_copy(wdiBssParams->macBSSID,
3608 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3609 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3610 sizeof(tSirMacAddr)) ;
3611 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3612 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3613 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 wdiBssParams->ucShortSlotTimeSupported =
3615 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3617 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3618 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3619 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3620 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3621
3622 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3623 wdiBssParams->ucTXOPProtectionFullSupport =
3624 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3626 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003628 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3629 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3630 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3631 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3632
3633 /* copy SSID into WDI structure */
3634 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3635 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3636 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3638 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003639 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640#ifdef WLAN_FEATURE_VOWIFI
3641 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3642#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003645#ifdef WLAN_FEATURE_VOWIFI_11R
3646 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 if(wdiBssParams->bExtSetStaKeyParamValid)
3648 {
3649 /* copy set STA key params to WDI structure */
3650 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3651 wdaBssParams->extSetStaKeyParam.staIdx;
3652 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3653 wdaBssParams->extSetStaKeyParam.encType;
3654 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3655 wdaBssParams->extSetStaKeyParam.wepType;
3656 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3657 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3659 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003660 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3662 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3663 {
3664 WDA_GetWepKeysFromCfg( pWDA,
3665 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3666 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3667 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3668 }
3669 else
3670 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3672 keyIndex++)
3673 {
3674 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3675 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3676 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3677 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3678 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3679 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003680 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3681 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3682 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3683 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3684 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3685 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3686 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3687 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003689 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3690 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 }
3692 }
3693 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3694 }
3695 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3696 {
3697 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3698 sizeof(wdaBssParams->extSetStaKeyParam) );
3699 }
3700#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003701#ifdef WLAN_FEATURE_11AC
3702 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3703 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3704#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003705
3706 return ;
3707}
Jeff Johnson295189b2012-06-20 16:38:30 -07003708/*
3709 * FUNCTION: WDA_UpdateSTAParams
3710 * Translated WDA/PE BSS info into WDI BSS info..
3711 */
3712void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3713 WDI_ConfigStaReqInfoType *wdiStaParams,
3714 tAddStaParams *wdaStaParams)
3715{
3716 tANI_U8 i = 0;
3717 /* Update STA params */
3718 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3719 sizeof(tSirMacAddr)) ;
3720 wdiStaParams->usAssocId = wdaStaParams->assocId;
3721 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3722
3723 wdiStaParams->ucShortPreambleSupported =
3724 wdaStaParams->shortPreambleSupported;
3725 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3726 sizeof(tSirMacAddr)) ;
3727 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3728
3729 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3730
3731 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3732 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3733 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3734 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3735 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3736 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3737 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3738
3739 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3740 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 wdiStaParams->wdiSupportedRates.opRateMode =
3742 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003743 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3744 {
3745 wdiStaParams->wdiSupportedRates.llbRates[i] =
3746 wdaStaParams->supportedRates.llbRates[i];
3747 }
3748 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3749 {
3750 wdiStaParams->wdiSupportedRates.llaRates[i] =
3751 wdaStaParams->supportedRates.llaRates[i];
3752 }
3753 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3754 {
3755 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3756 wdaStaParams->supportedRates.aniLegacyRates[i];
3757 }
3758 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3759 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003760#ifdef WLAN_FEATURE_11AC
3761 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3762 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3763 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3764 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3765#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3767 {
3768 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3769 wdaStaParams->supportedRates.supportedMCSSet[i];
3770 }
3771 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3772 wdaStaParams->supportedRates.rxHighestDataRate;
3773
3774 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3775
3776 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3777
3778 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3779 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3780 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3781
3782 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3783 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3784 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3785 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3786#ifdef WLAN_FEATURE_P2P
3787 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3788#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003789#ifdef WLAN_FEATURE_11AC
3790 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3791 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003792 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003793#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003794 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3795 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 return ;
3797}
Jeff Johnson295189b2012-06-20 16:38:30 -07003798/*
3799 * -------------------------------------------------------------------------
3800 * CFG update to WDI
3801 * -------------------------------------------------------------------------
3802 */
3803
3804 /*
3805 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3806 * Convert the WNI CFG ID to HAL CFG ID
3807 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003808static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003809{
3810 switch(wniCfgId)
3811 {
3812 case WNI_CFG_STA_ID:
3813 return QWLAN_HAL_CFG_STA_ID;
3814 case WNI_CFG_CURRENT_TX_ANTENNA:
3815 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3816 case WNI_CFG_CURRENT_RX_ANTENNA:
3817 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3818 case WNI_CFG_LOW_GAIN_OVERRIDE:
3819 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3820 case WNI_CFG_POWER_STATE_PER_CHAIN:
3821 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3822 case WNI_CFG_CAL_PERIOD:
3823 return QWLAN_HAL_CFG_CAL_PERIOD;
3824 case WNI_CFG_CAL_CONTROL:
3825 return QWLAN_HAL_CFG_CAL_CONTROL;
3826 case WNI_CFG_PROXIMITY:
3827 return QWLAN_HAL_CFG_PROXIMITY;
3828 case WNI_CFG_NETWORK_DENSITY:
3829 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3830 case WNI_CFG_MAX_MEDIUM_TIME:
3831 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3832 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3833 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3834 case WNI_CFG_RTS_THRESHOLD:
3835 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3836 case WNI_CFG_SHORT_RETRY_LIMIT:
3837 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3838 case WNI_CFG_LONG_RETRY_LIMIT:
3839 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3840 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3841 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3842 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3843 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3844 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3845 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3846 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3847 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3848 case WNI_CFG_FIXED_RATE:
3849 return QWLAN_HAL_CFG_FIXED_RATE;
3850 case WNI_CFG_RETRYRATE_POLICY:
3851 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3852 case WNI_CFG_RETRYRATE_SECONDARY:
3853 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3854 case WNI_CFG_RETRYRATE_TERTIARY:
3855 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3856 case WNI_CFG_FORCE_POLICY_PROTECTION:
3857 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3858 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3859 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3860 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3861 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3862 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3863 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3864 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3865 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3866 case WNI_CFG_MAX_BA_SESSIONS:
3867 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3868 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3869 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3870 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3871 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3872 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3873 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3874 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3875 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3876 case WNI_CFG_STATS_PERIOD:
3877 return QWLAN_HAL_CFG_STATS_PERIOD;
3878 case WNI_CFG_CFP_MAX_DURATION:
3879 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3880#if 0 /*This is not part of CFG*/
3881 case WNI_CFG_FRAME_TRANS_ENABLED:
3882 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3883#endif
3884 case WNI_CFG_DTIM_PERIOD:
3885 return QWLAN_HAL_CFG_DTIM_PERIOD;
3886 case WNI_CFG_EDCA_WME_ACBK:
3887 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3888 case WNI_CFG_EDCA_WME_ACBE:
3889 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3890 case WNI_CFG_EDCA_WME_ACVI:
3891 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3892 case WNI_CFG_EDCA_WME_ACVO:
3893 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3894#if 0
3895 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3896 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3897 case WNI_CFG_TELE_BCN_TRANS_LI:
3898 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3899 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3900 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3901 case WNI_CFG_TELE_BCN_MAX_LI:
3902 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3903 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3904 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3905#endif
3906 case WNI_CFG_ENABLE_CLOSE_LOOP:
3907 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003908 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3909 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 default:
3911 {
3912 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3913 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3914 wniCfgId);
3915 return VOS_STATUS_E_INVAL;
3916 }
3917 }
3918}
Jeff Johnson295189b2012-06-20 16:38:30 -07003919/*
3920 * FUNCTION: WDA_UpdateCfgCallback
3921 *
3922 */
3923void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3924{
3925 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3926 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3927 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003929 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 /*
3931 * currently there is no response message is expected between PE and
3932 * WDA, Failure return from WDI is a ASSERT condition
3933 */
3934 if(WDI_STATUS_SUCCESS != wdiStatus)
3935 {
3936 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003937 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003938 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3939 }
3940
3941 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3942 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3943 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003944 return ;
3945}
Jeff Johnson295189b2012-06-20 16:38:30 -07003946/*
3947 * FUNCTION: WDA_UpdateCfg
3948 *
3949 */
3950VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3951{
3952
3953 WDI_Status status = WDI_STATUS_SUCCESS ;
3954 tANI_U32 val =0;
3955 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3956 tHalCfg *configData;
3957 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3958 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003960 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 if (NULL == pMac )
3962 {
3963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003964 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 return VOS_STATUS_E_FAILURE;
3966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003967 if(WDA_START_STATE != pWDA->wdaState)
3968 {
3969 return VOS_STATUS_E_FAILURE;
3970 }
3971
3972 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3973 {
3974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003975 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 VOS_ASSERT(0);
3977 return VOS_STATUS_E_FAILURE;
3978 }
3979
3980 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3981 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003982 if(NULL == wdiCfgReqParam)
3983 {
3984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003985 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003986 VOS_ASSERT(0);
3987 return VOS_STATUS_E_NOMEM;
3988 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
3990 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 if(NULL == wdiCfgReqParam->pConfigBuffer)
3992 {
3993 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003994 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 vos_mem_free(wdiCfgReqParam);
3996 VOS_ASSERT(0);
3997 return VOS_STATUS_E_NOMEM;
3998 }
3999
4000 /*convert the WNI CFG Id to HAL CFG Id*/
4001 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4002 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4003
4004 /*TODO: revisit this for handling string parameters */
4005 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4006 &val) != eSIR_SUCCESS)
4007 {
4008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4009 "Failed to cfg get id %d\n", cfgParam->bodyval);
4010 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4011 vos_mem_free(wdiCfgReqParam);
4012 return eSIR_FAILURE;
4013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4015 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4016 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4017 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4018 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4019
4020 /* store Params pass it to WDI */
4021 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004022#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4023 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4024 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 if(IS_WDI_STATUS_FAILURE(status))
4026 {
4027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4028 "Failure in Update CFG WDI API, free all the memory " );
4029 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4030 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4031 pWDA->wdaWdiCfgApiMsgParam = NULL;
4032 /* Failure is not expected */
4033 VOS_ASSERT(0) ;
4034 }
4035#else
4036 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4037 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4038 pWDA->wdaWdiCfgApiMsgParam = NULL;
4039#endif
4040 return CONVERT_WDI2VOS_STATUS(status) ;
4041}
4042
Jeff Johnson295189b2012-06-20 16:38:30 -07004043VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4044 v_U8_t *pDefaultKeyId,
4045 v_U8_t *pNumKeys,
4046 WDI_KeysType *pWdiKeys )
4047{
4048 v_U32_t i, j, defKeyId = 0;
4049 v_U32_t val = SIR_MAC_KEY_LENGTH;
4050 VOS_STATUS status = WDI_STATUS_SUCCESS;
4051 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 if (NULL == pMac )
4053 {
4054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004055 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004056 return VOS_STATUS_E_FAILURE;
4057 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4059 &defKeyId ))
4060 {
4061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4062 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4063 }
4064
4065 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004066 /* Need to extract ALL of the configured WEP Keys */
4067 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4068 {
4069 val = SIR_MAC_KEY_LENGTH;
4070 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4071 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4072 pWdiKeys[j].key,
4073 &val ))
4074 {
4075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4076 "WEP Key index [%d] may not configured in CFG\n",i);
4077 }
4078 else
4079 {
4080 pWdiKeys[j].keyId = (tANI_U8) i;
4081 /*
4082 * Actually, a DC (Don't Care) because
4083 * this is determined (and set) by PE/MLME
4084 */
4085 pWdiKeys[j].unicast = 0;
4086 /*
4087 * Another DC (Don't Care)
4088 */
4089 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4090 /* Another DC (Don't Care). Unused for WEP */
4091 pWdiKeys[j].paeRole = 0;
4092 /* Determined from wlan_cfgGetStr() above.*/
4093 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 j++;
4095 *pNumKeys = (tANI_U8) j;
4096 }
4097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004098 return status;
4099}
Jeff Johnson295189b2012-06-20 16:38:30 -07004100/*
4101 * FUNCTION: WDA_SetBssKeyReqCallback
4102 * send SET BSS key RSP back to PE
4103 */
4104void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4105{
4106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4107 tWDA_CbContext *pWDA;
4108 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004111 if(NULL == pWdaParams)
4112 {
4113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004115 VOS_ASSERT(0) ;
4116 return ;
4117 }
4118 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4119 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4121 vos_mem_free(pWdaParams) ;
4122 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 return ;
4125}
Jeff Johnson295189b2012-06-20 16:38:30 -07004126/*
4127 * FUNCTION: WDA_ProcessSetBssKeyReq
4128 * Request to WDI for programming the BSS key( key for
4129 * broadcast/multicast frames Encryption)
4130 */
4131VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4132 tSetBssKeyParams *setBssKeyParams )
4133{
4134 WDI_Status status = WDI_STATUS_SUCCESS ;
4135 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4136 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4137 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4138 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004139 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004141 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004142 if(NULL == wdiSetBssKeyParam)
4143 {
4144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 VOS_ASSERT(0);
4147 return VOS_STATUS_E_NOMEM;
4148 }
4149 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4150 if(NULL == pWdaParams)
4151 {
4152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004153 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004154 VOS_ASSERT(0);
4155 vos_mem_free(wdiSetBssKeyParam);
4156 return VOS_STATUS_E_NOMEM;
4157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 /* copy set BSS params to WDI structure */
4160 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4161 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4162 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004163 if(setBssKeyParams->encType != eSIR_ED_NONE)
4164 {
4165 if( setBssKeyParams->numKeys == 0 &&
4166 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4167 setBssKeyParams->encType == eSIR_ED_WEP104))
4168 {
4169 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004170 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4171 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4172 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4173 }
4174 else
4175 {
4176 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4177 {
4178 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4179 setBssKeyParams->key[keyIndex].keyId;
4180 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4181 setBssKeyParams->key[keyIndex].unicast;
4182 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4183 setBssKeyParams->key[keyIndex].keyDirection;
4184 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4185 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4186 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4187 setBssKeyParams->key[keyIndex].paeRole;
4188 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4189 setBssKeyParams->key[keyIndex].keyLength;
4190 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4191 setBssKeyParams->key[keyIndex].key,
4192 SIR_MAC_MAX_KEY_LENGTH);
4193 }
4194 }
4195 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004196 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4197 setBssKeyParams->singleTidRc;
4198 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004199 /* Store set key pointer, as this will be used for response */
4200 /* store Params pass it to WDI */
4201 pWdaParams->pWdaContext = pWDA;
4202 pWdaParams->wdaMsgParam = setBssKeyParams;
4203 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4205 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4206
4207 if(IS_WDI_STATUS_FAILURE(status))
4208 {
4209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4210 "Failure in Set BSS Key Req WDI API, free all the memory " );
4211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4212 vos_mem_free(pWdaParams) ;
4213 setBssKeyParams->status = eSIR_FAILURE ;
4214 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 return CONVERT_WDI2VOS_STATUS(status) ;
4217}
Jeff Johnson295189b2012-06-20 16:38:30 -07004218/*
4219 * FUNCTION: WDA_RemoveBssKeyReqCallback
4220 * send SET BSS key RSP back to PE
4221 */
4222void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4223{
4224 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4225 tWDA_CbContext *pWDA;
4226 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004228 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004229 if(NULL == pWdaParams)
4230 {
4231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004232 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004233 VOS_ASSERT(0) ;
4234 return ;
4235 }
4236 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4237 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4239 vos_mem_free(pWdaParams) ;
4240
4241 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004243 return ;
4244}
Jeff Johnson295189b2012-06-20 16:38:30 -07004245/*
4246 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4247 * Request to WDI to remove the BSS key( key for broadcast/multicast
4248 * frames Encryption)
4249 */
4250VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4251 tRemoveBssKeyParams *removeBssKeyParams )
4252{
4253 WDI_Status status = WDI_STATUS_SUCCESS ;
4254 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4255 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4256 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4257 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004259 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 if(NULL == wdiRemoveBssKeyParam)
4261 {
4262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004264 VOS_ASSERT(0);
4265 return VOS_STATUS_E_NOMEM;
4266 }
4267 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4268 if(NULL == pWdaParams)
4269 {
4270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004271 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 VOS_ASSERT(0);
4273 vos_mem_free(wdiRemoveBssKeyParam);
4274 return VOS_STATUS_E_NOMEM;
4275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 /* copy Remove BSS key params to WDI structure*/
4277 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4278 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4279 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4280 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4281 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 /* Store remove key pointer, as this will be used for response */
4283 /* store Params pass it to WDI */
4284 pWdaParams->pWdaContext = pWDA;
4285 pWdaParams->wdaMsgParam = removeBssKeyParams;
4286 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4288 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004289 if(IS_WDI_STATUS_FAILURE(status))
4290 {
4291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4292 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4293 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4294 vos_mem_free(pWdaParams) ;
4295 removeBssKeyParams->status = eSIR_FAILURE ;
4296 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4297 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 return CONVERT_WDI2VOS_STATUS(status) ;
4299}
Jeff Johnson295189b2012-06-20 16:38:30 -07004300/*
4301 * FUNCTION: WDA_SetBssKeyReqCallback
4302 * send SET BSS key RSP back to PE
4303 */
4304void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4305{
4306 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4307 tWDA_CbContext *pWDA;
4308 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004310 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 if(NULL == pWdaParams)
4312 {
4313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004314 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004315 VOS_ASSERT(0) ;
4316 return ;
4317 }
4318 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4319 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4321 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004322 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 return ;
4325}
Jeff Johnson295189b2012-06-20 16:38:30 -07004326/*
4327 * FUNCTION: WDA_ProcessSetStaKeyReq
4328 * Request to WDI for programming the STA key( key for Unicast frames
4329 * Encryption)
4330 */
4331VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4332 tSetStaKeyParams *setStaKeyParams )
4333{
4334 WDI_Status status = WDI_STATUS_SUCCESS ;
4335 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4336 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4337 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4338 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004339 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004341 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 if(NULL == wdiSetStaKeyParam)
4343 {
4344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004345 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004346 VOS_ASSERT(0);
4347 return VOS_STATUS_E_NOMEM;
4348 }
4349 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4350 if(NULL == pWdaParams)
4351 {
4352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004353 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 VOS_ASSERT(0);
4355 vos_mem_free(wdiSetStaKeyParam);
4356 return VOS_STATUS_E_NOMEM;
4357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 /* copy set STA key params to WDI structure */
4361 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4362 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4363 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4364 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 if(setStaKeyParams->encType != eSIR_ED_NONE)
4366 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004367 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004368 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4369 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4370 {
4371 WDA_GetWepKeysFromCfg( pWDA,
4372 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4373 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4374 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4375 }
4376 else
4377 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4379 keyIndex++)
4380 {
4381 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4382 setStaKeyParams->key[keyIndex].keyId;
4383 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4384 setStaKeyParams->key[keyIndex].unicast;
4385 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4386 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4388 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4389 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4390 setStaKeyParams->key[keyIndex].paeRole;
4391 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4392 setStaKeyParams->key[keyIndex].keyLength;
4393 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4394 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4395 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4396 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4397 {
4398 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4399 }
4400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4402 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 }
4404 }
4405 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4406 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004407 /* Store set key pointer, as this will be used for response */
4408 /* store Params pass it to WDI */
4409 pWdaParams->pWdaContext = pWDA;
4410 pWdaParams->wdaMsgParam = setStaKeyParams;
4411 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4413 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 if(IS_WDI_STATUS_FAILURE(status))
4415 {
4416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4417 "Failure in set STA Key Req WDI API, free all the memory " );
4418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4419 vos_mem_free(pWdaParams) ;
4420 setStaKeyParams->status = eSIR_FAILURE ;
4421 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 return CONVERT_WDI2VOS_STATUS(status) ;
4424}
Jeff Johnson295189b2012-06-20 16:38:30 -07004425/*
4426 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4427 * send SET Bcast STA key RSP back to PE
4428 */
4429void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4430{
4431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4432 tWDA_CbContext *pWDA;
4433 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004435 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 if(NULL == pWdaParams)
4437 {
4438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004439 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 VOS_ASSERT(0) ;
4441 return ;
4442 }
4443 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4444 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4446 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004449 return ;
4450}
4451
Jeff Johnson295189b2012-06-20 16:38:30 -07004452/*
4453 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4454 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4455 * Encryption)
4456 */
4457VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4458 tSetStaKeyParams *setStaKeyParams )
4459{
4460 WDI_Status status = WDI_STATUS_SUCCESS ;
4461 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4462 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4463 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4464 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004465 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004467 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004468 if(NULL == wdiSetStaKeyParam)
4469 {
4470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004472 VOS_ASSERT(0);
4473 return VOS_STATUS_E_NOMEM;
4474 }
4475 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4476 if(NULL == pWdaParams)
4477 {
4478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004479 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 VOS_ASSERT(0);
4481 vos_mem_free(wdiSetStaKeyParam);
4482 return VOS_STATUS_E_NOMEM;
4483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004484 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 /* copy set STA key params to WDI structure */
4487 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4488 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4489 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4490 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004491 if(setStaKeyParams->encType != eSIR_ED_NONE)
4492 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004493 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4494 keyIndex++)
4495 {
4496 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4497 setStaKeyParams->key[keyIndex].keyId;
4498 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4499 setStaKeyParams->key[keyIndex].unicast;
4500 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4501 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4503 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4504 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4505 setStaKeyParams->key[keyIndex].paeRole;
4506 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4507 setStaKeyParams->key[keyIndex].keyLength;
4508 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4509 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4510 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4512 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004513 }
4514 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 /* Store set key pointer, as this will be used for response */
4516 /* store Params pass it to WDI */
4517 pWdaParams->pWdaContext = pWDA;
4518 pWdaParams->wdaMsgParam = setStaKeyParams;
4519 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4521 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 if(IS_WDI_STATUS_FAILURE(status))
4523 {
4524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4525 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4527 vos_mem_free(pWdaParams) ;
4528 setStaKeyParams->status = eSIR_FAILURE ;
4529 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 return CONVERT_WDI2VOS_STATUS(status) ;
4532}
Jeff Johnson295189b2012-06-20 16:38:30 -07004533/*
4534 * FUNCTION: WDA_RemoveStaKeyReqCallback
4535 * send SET BSS key RSP back to PE
4536 */
4537void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4538{
4539 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4540 tWDA_CbContext *pWDA;
4541 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004543 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004544 if(NULL == pWdaParams)
4545 {
4546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004547 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 VOS_ASSERT(0) ;
4549 return ;
4550 }
4551 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4552 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4554 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 return ;
4558}
4559
Jeff Johnson295189b2012-06-20 16:38:30 -07004560/*
4561 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4562 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4563 */
4564VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4565 tRemoveStaKeyParams *removeStaKeyParams )
4566{
4567 WDI_Status status = WDI_STATUS_SUCCESS ;
4568 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4569 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4570 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4571 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004573 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004574 if(NULL == wdiRemoveStaKeyParam)
4575 {
4576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 VOS_ASSERT(0);
4579 return VOS_STATUS_E_NOMEM;
4580 }
4581 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4582 if(NULL == pWdaParams)
4583 {
4584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 VOS_ASSERT(0);
4587 vos_mem_free(wdiRemoveStaKeyParam);
4588 return VOS_STATUS_E_NOMEM;
4589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 /* copy remove STA key params to WDI structure*/
4591 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4592 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4593 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4594 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4595 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 /* Store remove key pointer, as this will be used for response */
4597 /* store Params pass it to WDI */
4598 pWdaParams->pWdaContext = pWDA;
4599 pWdaParams->wdaMsgParam = removeStaKeyParams;
4600 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004601 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4602 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 if(IS_WDI_STATUS_FAILURE(status))
4604 {
4605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4606 "Failure in remove STA Key Req WDI API, free all the memory " );
4607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4608 vos_mem_free(pWdaParams) ;
4609 removeStaKeyParams->status = eSIR_FAILURE ;
4610 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 return CONVERT_WDI2VOS_STATUS(status) ;
4613}
Jeff Johnson295189b2012-06-20 16:38:30 -07004614/*
4615 * FUNCTION: WDA_IsHandleSetLinkStateReq
4616 * Update the WDA state and return the status to handle this message or not
4617 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004618WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4619 tWDA_CbContext *pWDA,
4620 tLinkStateParams *linkStateParams)
4621{
4622 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 switch(linkStateParams->state)
4624 {
4625 case eSIR_LINK_PREASSOC_STATE:
4626 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4627 /*
4628 * set the WDA state to PRE ASSOC
4629 * copy the BSSID into pWDA to use it in join request and return,
4630 * No need to handle these messages.
4631 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004632 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4633 {
4634 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004635 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004636 }
4637 else
4638 {
4639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004640 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004641 VOS_ASSERT(0);
4642 }
4643
4644 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4645 {
4646 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004648 }
4649 else
4650 {
4651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004652 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004653 VOS_ASSERT(0);
4654 }
4655
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4657 *channel and after ) so reset the WDA state to ready when the second
4658 * time UMAC issue the link state with PREASSOC
4659 */
4660 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4661 {
4662 /* RESET WDA state back to WDA_READY_STATE */
4663 pWDA->wdaState = WDA_READY_STATE;
4664 }
4665 else
4666 {
4667 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4668 }
4669 //populate linkState info in WDACbCtxt
4670 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004672 default:
4673 if(pWDA->wdaState != WDA_READY_STATE)
4674 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004675 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4676 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4677 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4678 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4679 *the ASSERT in WDA_Stop during module unload.*/
4680 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4681 {
4682 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004683 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004684 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004685 else
4686 {
4687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004688 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004689 status = WDA_IGNORE_SET_LINK_STATE;
4690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 }
4692 break;
4693 }
4694
4695 return status;
4696}
Jeff Johnson295189b2012-06-20 16:38:30 -07004697/*
4698 * FUNCTION: WDA_SetLinkStateCallback
4699 * call back function for set link state from WDI
4700 */
4701void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4702{
4703 tWDA_CbContext *pWDA;
4704 tLinkStateParams *linkStateParams;
4705 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004707 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 if(NULL == pWdaParams)
4709 {
4710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004711 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004712 VOS_ASSERT(0) ;
4713 return ;
4714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 /*
4718 * In STA mode start the BA activity check timer after association
4719 * and in AP mode start BA activity check timer after BSS start */
4720 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4721 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4722 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4723 {
4724 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 /*
4728 * No respone required for WDA_SET_LINK_STATE so free the request
4729 * param here
4730 */
4731 if( pWdaParams != NULL )
4732 {
4733 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4734 {
4735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4736 }
4737 vos_mem_free(pWdaParams);
4738 }
4739 return ;
4740}
Jeff Johnson295189b2012-06-20 16:38:30 -07004741/*
4742 * FUNCTION: WDA_ProcessSetLinkState
4743 * Request to WDI to set the link status.
4744 */
4745VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4746 tLinkStateParams *linkStateParams)
4747{
4748 WDI_Status status = WDI_STATUS_SUCCESS ;
4749 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4750 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4751 sizeof(WDI_SetLinkReqParamsType)) ;
4752 tWDA_ReqParams *pWdaParams ;
4753 tpAniSirGlobal pMac;
4754 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4755
4756 if(NULL == pMac)
4757 {
4758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004759 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004761 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 return VOS_STATUS_E_FAILURE;
4763 }
4764
4765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004766 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004767 if(NULL == wdiSetLinkStateParam)
4768 {
4769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004770 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 VOS_ASSERT(0);
4772 return VOS_STATUS_E_NOMEM;
4773 }
4774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4775 if(NULL == pWdaParams)
4776 {
4777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 VOS_ASSERT(0);
4780 vos_mem_free(wdiSetLinkStateParam);
4781 return VOS_STATUS_E_NOMEM;
4782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 if(WDA_IGNORE_SET_LINK_STATE ==
4784 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4785 {
4786 status = WDI_STATUS_E_FAILURE;
4787 }
4788 else
4789 {
4790 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4791 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4793 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4795 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 pWdaParams->pWdaContext = pWDA;
4797 /* Store remove key pointer, as this will be used for response */
4798 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 /* store Params pass it to WDI */
4800 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4801 /* Stop Timer only other than GO role and concurrent session */
4802 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4803 && !vos_concurrent_sessions_running() &&
4804 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4805 {
4806 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4809 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 if(IS_WDI_STATUS_FAILURE(status))
4811 {
4812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4813 "Failure in set link state Req WDI API, free all the memory " );
4814 }
4815 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 if(IS_WDI_STATUS_FAILURE(status))
4817 {
4818 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004819 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 vos_mem_free(pWdaParams);
4821 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 return CONVERT_WDI2VOS_STATUS(status) ;
4823}
Jeff Johnson295189b2012-06-20 16:38:30 -07004824/*
4825 * FUNCTION: WDA_GetStatsReqParamsCallback
4826 * send the response to PE with Stats received from WDI
4827 */
4828void WDA_GetStatsReqParamsCallback(
4829 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4830 void* pUserData)
4831{
4832 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4833 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4834
4835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004836 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 pGetPEStatsRspParams =
4838 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4839 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4840
4841 if(NULL == pGetPEStatsRspParams)
4842 {
4843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004845 VOS_ASSERT(0);
4846 return;
4847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004848 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4849 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4850 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4851 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4852 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4853
4854 //Fill the Session Id Properly in PE
4855 pGetPEStatsRspParams->sessionId = 0;
4856 pGetPEStatsRspParams->rc =
4857 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4858 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4859 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004860 vos_mem_copy( pGetPEStatsRspParams + 1,
4861 wdiGetStatsRsp + 1,
4862 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 /* send response to UMAC*/
4864 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4865
4866 return;
4867}
4868
Jeff Johnson295189b2012-06-20 16:38:30 -07004869/*
4870 * FUNCTION: WDA_ProcessGetStatsReq
4871 * Request to WDI to get the statistics
4872 */
4873VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4874 tAniGetPEStatsReq *pGetStatsParams)
4875{
4876 WDI_Status status = WDI_STATUS_SUCCESS ;
4877 WDI_GetStatsReqParamsType wdiGetStatsParam;
4878 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004880 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004881 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4882 pGetStatsParams->staId;
4883 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4884 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 status = WDI_GetStatsReq(&wdiGetStatsParam,
4887 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 if(IS_WDI_STATUS_FAILURE(status))
4889 {
4890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4891 "Failure in Get Stats Req WDI API, free all the memory " );
4892 pGetPEStatsRspParams =
4893 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4894 if(NULL == pGetPEStatsRspParams)
4895 {
4896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004898 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004899 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 return VOS_STATUS_E_NOMEM;
4901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004902 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4903 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4904 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4905 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4906 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4907 (void *)pGetPEStatsRspParams, 0) ;
4908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 /* Free the request message */
4910 vos_mem_free(pGetStatsParams);
4911 return CONVERT_WDI2VOS_STATUS(status);
4912}
Jeff Johnson295189b2012-06-20 16:38:30 -07004913/*
4914 * FUNCTION: WDA_UpdateEDCAParamCallback
4915 * call back function for Update EDCA params from WDI
4916 */
4917void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4918{
4919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4920 tEdcaParams *pEdcaParams;
4921
4922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004923 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 if(NULL == pWdaParams)
4925 {
4926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004927 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 VOS_ASSERT(0) ;
4929 return ;
4930 }
4931 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4933 vos_mem_free(pWdaParams);
4934 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004935 return ;
4936}
Jeff Johnson295189b2012-06-20 16:38:30 -07004937/*
4938 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4939 * Request to WDI to Update the EDCA params.
4940 */
4941VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
4942 tEdcaParams *pEdcaParams)
4943{
4944 WDI_Status status = WDI_STATUS_SUCCESS ;
4945 WDI_UpdateEDCAParamsType *wdiEdcaParam =
4946 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
4947 sizeof(WDI_UpdateEDCAParamsType)) ;
4948 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004950 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 if(NULL == wdiEdcaParam)
4952 {
4953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004954 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004956 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 return VOS_STATUS_E_NOMEM;
4958 }
4959 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4960 if(NULL == pWdaParams)
4961 {
4962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004963 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 VOS_ASSERT(0);
4965 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004966 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 return VOS_STATUS_E_NOMEM;
4968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004969 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
4970 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
4971 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
4972 &pEdcaParams->acbe);
4973 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
4974 &pEdcaParams->acbk);
4975 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
4976 &pEdcaParams->acvi);
4977 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
4978 &pEdcaParams->acvo);
4979 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 pWdaParams->pWdaContext = pWDA;
4981 /* Store remove key pointer, as this will be used for response */
4982 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004983 /* store Params pass it to WDI */
4984 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004985 status = WDI_UpdateEDCAParams(wdiEdcaParam,
4986 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 if(IS_WDI_STATUS_FAILURE(status))
4988 {
4989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4990 "Failure in Update EDCA Params WDI API, free all the memory " );
4991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4992 vos_mem_free(pWdaParams);
4993 vos_mem_free(pEdcaParams);
4994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 return CONVERT_WDI2VOS_STATUS(status) ;
4996}
Jeff Johnson295189b2012-06-20 16:38:30 -07004997/*
4998 * FUNCTION: WDA_AddBAReqCallback
4999 * send ADD BA RSP back to PE
5000 */
5001void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5002 void* pUserData)
5003{
5004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5005 tWDA_CbContext *pWDA;
5006 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005008 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 if(NULL == pWdaParams)
5010 {
5011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005012 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 VOS_ASSERT(0) ;
5014 return ;
5015 }
5016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5017 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5019 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005020 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 return ;
5023}
5024
Jeff Johnson295189b2012-06-20 16:38:30 -07005025/*
5026 * FUNCTION: WDA_ProcessAddBAReq
5027 * Request to WDI to Update the ADDBA REQ params.
5028 */
5029VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5030 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5031{
Jeff Johnson43971f52012-07-17 12:26:56 -07005032 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005033 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5034 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5035 sizeof(WDI_AddBAReqParamsType)) ;
5036 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005038 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 if(NULL == wdiAddBAReqParam)
5040 {
5041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005042 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005043 VOS_ASSERT(0);
5044 return VOS_STATUS_E_NOMEM;
5045 }
5046 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5047 if(NULL == pWdaParams)
5048 {
5049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 VOS_ASSERT(0);
5052 vos_mem_free(wdiAddBAReqParam);
5053 return VOS_STATUS_E_NOMEM;
5054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005055 do
5056 {
5057 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 wdiAddBaInfo->ucSTAIdx = staIdx ;
5059 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5060 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 } while(0) ;
5062 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 pWdaParams->pWdaContext = pWDA;
5064 /* store Params pass it to WDI */
5065 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5066 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005067 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5068 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005069
Jeff Johnson43971f52012-07-17 12:26:56 -07005070 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 {
5072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005073 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5074 status = CONVERT_WDI2VOS_STATUS(wstatus);
5075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 vos_mem_free(pWdaParams);
5077 pAddBAReqParams->status = eSIR_FAILURE;
5078 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5079 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005080 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005081}
Jeff Johnson295189b2012-06-20 16:38:30 -07005082/*
5083 * FUNCTION: WDA_AddBASessionReqCallback
5084 * send ADD BA SESSION RSP back to PE/(or TL)
5085 */
5086void WDA_AddBASessionReqCallback(
5087 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5088{
5089 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5090 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5091 tWDA_CbContext *pWDA;
5092 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005094 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005095 if(NULL == pWdaParams)
5096 {
5097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005098 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 VOS_ASSERT(0) ;
5100 return ;
5101 }
5102 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5103 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005104 if( NULL == pAddBAReqParams )
5105 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005107 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005108 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5110 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 return ;
5112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5114 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 /*
5116 * if WDA in update TL state, update TL with BA session parama and send
5117 * another request to HAL(/WDI) (ADD_BA_REQ)
5118 */
5119
5120 if((VOS_STATUS_SUCCESS ==
5121 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5122 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5123 {
5124 /* Update TL with BA info received from HAL/WDI */
5125 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5126 wdiAddBaSession->usBaSessionID,
5127 wdiAddBaSession->ucSTAIdx,
5128 wdiAddBaSession->ucBaTID,
5129 wdiAddBaSession->ucBaBufferSize,
5130 wdiAddBaSession->ucWinSize,
5131 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5133 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5134 }
5135 else
5136 {
5137 pAddBAReqParams->status =
5138 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5139
5140 /* Setting Flag to indicate that Set BA is success */
5141 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5142 {
5143 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5144 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5145 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 /*Reset the WDA state to READY */
5150 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 return ;
5152}
5153
Jeff Johnson295189b2012-06-20 16:38:30 -07005154/*
5155 * FUNCTION: WDA_ProcessAddBASessionReq
5156 * Request to WDI to Update the ADDBA REQ params.
5157 */
5158VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5159 tAddBAParams *pAddBAReqParams)
5160{
5161 WDI_Status status = WDI_STATUS_SUCCESS ;
5162 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5163 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5164 sizeof(WDI_AddBASessionReqParamsType)) ;
5165 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005167 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 if(NULL == wdiAddBASessionReqParam)
5169 {
5170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005171 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 VOS_ASSERT(0);
5173 return VOS_STATUS_E_NOMEM;
5174 }
5175 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5176 if(NULL == pWdaParams)
5177 {
5178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 VOS_ASSERT(0);
5181 vos_mem_free(wdiAddBASessionReqParam);
5182 return VOS_STATUS_E_NOMEM;
5183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005184 /*
5185 * Populate ADD BA parameters and pass these paarmeters to WDI.
5186 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5187 * the state to track if these is BA recipient case or BA initiator
5188 * case.
5189 */
5190 do
5191 {
5192 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5193 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5194 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5195 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5196 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5197 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5198 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5201 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5202 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5203 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5204 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005205 /* check the BA direction and update state accordingly */
5206 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5207 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5208 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5209
5210 }while(0) ;
5211 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 pWdaParams->pWdaContext = pWDA;
5213 /* Store ADD BA pointer, as this will be used for response */
5214 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5215 /* store Params pass it to WDI */
5216 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005217 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5218 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 if(IS_WDI_STATUS_FAILURE(status))
5220 {
5221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5222 "Failure in ADD BA Session REQ Params WDI API, free all the memory " );
5223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5224 vos_mem_free(pWdaParams->wdaMsgParam);
5225 vos_mem_free(pWdaParams);
5226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005228}
Jeff Johnson295189b2012-06-20 16:38:30 -07005229/*
5230 * FUNCTION: WDA_DelBANotifyTL
5231 * send DEL BA IND to TL
5232 */
5233void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5234 tDelBAParams *pDelBAReqParams)
5235{
5236 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5237 //tSirMsgQ msg;
5238 vos_msg_t vosMsg;
5239 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005240 if(NULL == pDelBAInd)
5241 {
5242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005243 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 VOS_ASSERT(0) ;
5245 return;
5246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5248 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5249 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5250 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005251
Jeff Johnson295189b2012-06-20 16:38:30 -07005252
5253 vosMsg.type = WDA_DELETEBA_IND;
5254 vosMsg.bodyptr = pDelBAInd;
5255 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5256 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5257 {
5258 vosStatus = VOS_STATUS_E_BADMSG;
5259 }
5260}
Jeff Johnson295189b2012-06-20 16:38:30 -07005261/*
5262 * FUNCTION: WDA_DelBAReqCallback
5263 * send DEL BA RSP back to PE
5264 */
5265void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5266{
5267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5268 tWDA_CbContext *pWDA;
5269 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005271 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 if(NULL == pWdaParams)
5273 {
5274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005275 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005276 VOS_ASSERT(0) ;
5277 return ;
5278 }
5279 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5280 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 /* Notify TL about DEL BA in case of recipinet */
5282 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5283 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5284 {
5285 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005287 /*
5288 * No respone required for WDA_DELBA_IND so just free the request
5289 * param here
5290 */
5291 vos_mem_free(pDelBAReqParams);
5292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5293 vos_mem_free(pWdaParams);
5294 return ;
5295}
5296
Jeff Johnson295189b2012-06-20 16:38:30 -07005297/*
5298 * FUNCTION: WDA_ProcessDelBAReq
5299 * Request to WDI to Update the DELBA REQ params.
5300 */
5301VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5302 tDelBAParams *pDelBAReqParams)
5303{
5304 WDI_Status status = WDI_STATUS_SUCCESS ;
5305 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5306 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5307 sizeof(WDI_DelBAReqParamsType)) ;
5308 tWDA_ReqParams *pWdaParams ;
5309 tANI_U16 staIdx = 0;
5310 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005312 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 if(NULL == wdiDelBAReqParam)
5314 {
5315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005316 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005317 VOS_ASSERT(0);
5318 return VOS_STATUS_E_NOMEM;
5319 }
5320 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5321 if(NULL == pWdaParams)
5322 {
5323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005324 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 VOS_ASSERT(0);
5326 vos_mem_free(wdiDelBAReqParam);
5327 return VOS_STATUS_E_NOMEM;
5328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5330 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5331 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5332 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005333 pWdaParams->pWdaContext = pWDA;
5334 /* Store DEL BA pointer, as this will be used for response */
5335 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 /* store Params pass it to WDI */
5337 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005338 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5339 * maintained in WDA, so that WDA can retry for another BA session
5340 */
5341 staIdx = pDelBAReqParams->staIdx;
5342 tid = pDelBAReqParams->baTID;
5343 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 status = WDI_DelBAReq(wdiDelBAReqParam,
5345 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005346 if(IS_WDI_STATUS_FAILURE(status))
5347 {
5348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5349 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5351 vos_mem_free(pWdaParams->wdaMsgParam);
5352 vos_mem_free(pWdaParams);
5353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005354 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005355}
Jeff Johnson295189b2012-06-20 16:38:30 -07005356/*
5357 * FUNCTION: WDA_AddTSReqCallback
5358 * send ADD TS RSP back to PE
5359 */
5360void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5361{
5362 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5363 tWDA_CbContext *pWDA;
5364 tAddTsParams *pAddTsReqParams;
5365
5366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005367 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 if(NULL == pWdaParams)
5369 {
5370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005371 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 VOS_ASSERT(0) ;
5373 return ;
5374 }
5375 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5376 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5378 vos_mem_free(pWdaParams);
5379
5380 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005381 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005382 return ;
5383}
5384
Jeff Johnson295189b2012-06-20 16:38:30 -07005385/*
5386 * FUNCTION: WDA_ProcessAddTSReq
5387 * Request to WDI to Update the ADD TS REQ params.
5388 */
5389VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5390 tAddTsParams *pAddTsReqParams)
5391{
5392 WDI_Status status = WDI_STATUS_SUCCESS ;
5393 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5394 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5395 sizeof(WDI_AddTSReqParamsType)) ;
5396 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005398 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 if(NULL == wdiAddTSReqParam)
5400 {
5401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 VOS_ASSERT(0);
5404 return VOS_STATUS_E_NOMEM;
5405 }
5406 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5407 if(NULL == pWdaParams)
5408 {
5409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 VOS_ASSERT(0);
5412 vos_mem_free(wdiAddTSReqParam);
5413 return VOS_STATUS_E_NOMEM;
5414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5416 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 //TS IE
5418 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5419 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5420 pAddTsReqParams->tspec.length;
5421
5422 //TS IE : TS INFO : TRAFFIC
5423 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5424 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5425 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5426 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5427 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5428 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5429 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5430 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5431 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5432 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5433 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5434 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5435 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5436 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5437 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5438 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5439
5440 //TS IE : TS INFO : SCHEDULE
5441 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5442 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5443 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5444 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 //TS IE
5446 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5447 pAddTsReqParams->tspec.nomMsduSz;
5448 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5449 pAddTsReqParams->tspec.maxMsduSz;
5450 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5451 pAddTsReqParams->tspec.minSvcInterval;
5452 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5453 pAddTsReqParams->tspec.maxSvcInterval;
5454 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5455 pAddTsReqParams->tspec.inactInterval;
5456 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5457 pAddTsReqParams->tspec.suspendInterval;
5458 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5459 pAddTsReqParams->tspec.svcStartTime;
5460 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5461 pAddTsReqParams->tspec.minDataRate;
5462 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5463 pAddTsReqParams->tspec.meanDataRate;
5464 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5465 pAddTsReqParams->tspec.peakDataRate;
5466 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5467 pAddTsReqParams->tspec.maxBurstSz;
5468 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5469 pAddTsReqParams->tspec.delayBound;
5470 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5471 pAddTsReqParams->tspec.minPhyRate;
5472 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5473 pAddTsReqParams->tspec.surplusBw;
5474 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5475 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 /* TODO: tAddTsParams doesn't have the following fields */
5477#if 0
5478 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5479 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5480 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5481 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5482#endif
5483 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5484
5485 pWdaParams->pWdaContext = pWDA;
5486 /* Store ADD TS pointer, as this will be used for response */
5487 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 /* store Params pass it to WDI */
5489 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 status = WDI_AddTSReq(wdiAddTSReqParam,
5491 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 if(IS_WDI_STATUS_FAILURE(status))
5493 {
5494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5495 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5497 vos_mem_free(pWdaParams);
5498 pAddTsReqParams->status = eSIR_FAILURE ;
5499 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005502}
5503
Jeff Johnson295189b2012-06-20 16:38:30 -07005504/*
5505 * FUNCTION: WDA_DelTSReqCallback
5506 * send DEL TS RSP back to PE
5507 */
5508void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5509{
5510 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005512 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5514 vos_mem_free(pWdaParams->wdaMsgParam) ;
5515 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005516 /*
5517 * No respone required for WDA_DEL_TS_REQ so just free the request
5518 * param here
5519 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 return ;
5521}
5522
Jeff Johnson295189b2012-06-20 16:38:30 -07005523/*
5524 * FUNCTION: WDA_ProcessDelTSReq
5525 * Request to WDI to Update the DELTS REQ params.
5526 */
5527VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5528 tDelTsParams *pDelTSReqParams)
5529{
5530 WDI_Status status = WDI_STATUS_SUCCESS ;
5531 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5532 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5533 sizeof(WDI_DelTSReqParamsType)) ;
5534 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005536 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 if(NULL == wdiDelTSReqParam)
5538 {
5539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 VOS_ASSERT(0);
5542 return VOS_STATUS_E_NOMEM;
5543 }
5544 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5545 if(NULL == pWdaParams)
5546 {
5547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005548 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 VOS_ASSERT(0);
5550 vos_mem_free(wdiDelTSReqParam);
5551 return VOS_STATUS_E_NOMEM;
5552 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5554 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5555 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5556 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5557 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 pWdaParams->pWdaContext = pWDA;
5559 /* Store DEL TS pointer, as this will be used for response */
5560 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005561 /* store Params pass it to WDI */
5562 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 status = WDI_DelTSReq(wdiDelTSReqParam,
5564 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 if(IS_WDI_STATUS_FAILURE(status))
5566 {
5567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5568 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5570 vos_mem_free(pWdaParams->wdaMsgParam);
5571 vos_mem_free(pWdaParams);
5572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005574}
Jeff Johnson295189b2012-06-20 16:38:30 -07005575/*
5576 * FUNCTION: WDA_UpdateBeaconParamsCallback
5577 * Free the memory. No need to send any response to PE in this case
5578 */
5579void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5580{
5581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005583 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005584 if(NULL == pWdaParams)
5585 {
5586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005587 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005588 VOS_ASSERT(0) ;
5589 return ;
5590 }
5591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5592 vos_mem_free(pWdaParams->wdaMsgParam) ;
5593 vos_mem_free(pWdaParams);
5594 /*
5595 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5596 * param here
5597 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 return ;
5599}
Jeff Johnson295189b2012-06-20 16:38:30 -07005600/*
5601 * FUNCTION: WDA_ProcessUpdateBeaconParams
5602 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5603 */
5604VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5605 tUpdateBeaconParams *pUpdateBeaconParams)
5606{
5607 WDI_Status status = WDI_STATUS_SUCCESS ;
5608 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5609 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5610 sizeof(WDI_UpdateBeaconParamsType)) ;
5611 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005613 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 if(NULL == wdiUpdateBeaconParams)
5615 {
5616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005618 VOS_ASSERT(0);
5619 return VOS_STATUS_E_NOMEM;
5620 }
5621 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5622 if(NULL == pWdaParams)
5623 {
5624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 VOS_ASSERT(0);
5627 vos_mem_free(wdiUpdateBeaconParams);
5628 return VOS_STATUS_E_NOMEM;
5629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5631 pUpdateBeaconParams->bssIdx;
5632 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5633 pUpdateBeaconParams->fShortPreamble;
5634 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5635 pUpdateBeaconParams->fShortSlotTime;
5636 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5637 pUpdateBeaconParams->beaconInterval;
5638 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5639 pUpdateBeaconParams->llaCoexist;
5640 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5641 pUpdateBeaconParams->llbCoexist;
5642 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5643 pUpdateBeaconParams->llgCoexist;
5644 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5645 pUpdateBeaconParams->ht20MhzCoexist;
5646 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5647 pUpdateBeaconParams->llnNonGFCoexist;
5648 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5649 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5650 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5651 pUpdateBeaconParams->fRIFSMode;
5652 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5653 pUpdateBeaconParams->paramChangeBitmap;
5654 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5655
5656 pWdaParams->pWdaContext = pWDA;
5657 /* Store UpdateBeacon Req pointer, as this will be used for response */
5658 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 /* store Params pass it to WDI */
5660 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005661 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5662 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5663 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005664 if(IS_WDI_STATUS_FAILURE(status))
5665 {
5666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5667 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5669 vos_mem_free(pWdaParams->wdaMsgParam);
5670 vos_mem_free(pWdaParams);
5671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005672 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005673}
Jeff Johnson295189b2012-06-20 16:38:30 -07005674#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005675/*
5676 * FUNCTION: WDA_TSMStatsReqCallback
5677 * send TSM Stats RSP back to PE
5678 */
5679void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5680{
5681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5682 tWDA_CbContext *pWDA = NULL;
5683 tTSMStats *pTsmRspParams = NULL;
5684
5685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005686 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 if(NULL == pWdaParams)
5688 {
5689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005690 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 VOS_ASSERT(0) ;
5692 return ;
5693 }
5694 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5695 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005696 if( NULL == pTsmRspParams )
5697 {
5698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005699 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 VOS_ASSERT( 0 );
5701 return ;
5702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5704 vos_mem_free(pWdaParams);
5705
5706 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5707 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5708 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5709 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5710 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5711 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5712 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5713 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5714 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5715 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005717 return ;
5718}
5719
5720
Jeff Johnson295189b2012-06-20 16:38:30 -07005721/*
5722 * FUNCTION: WDA_ProcessTsmStatsReq
5723 * Request to WDI to get the TSM Stats params.
5724 */
5725VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5726 tTSMStats *pTsmStats)
5727{
5728 WDI_Status status = WDI_STATUS_SUCCESS ;
5729 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5730 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005732 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005733 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5734 sizeof(WDI_TSMStatsReqParamsType));
5735 if(NULL == wdiTSMReqParam)
5736 {
5737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005738 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005739 VOS_ASSERT(0);
5740 return VOS_STATUS_E_NOMEM;
5741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5743 if(NULL == pWdaParams)
5744 {
5745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005746 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 VOS_ASSERT(0);
5748 vos_mem_free(wdiTSMReqParam);
5749 return VOS_STATUS_E_NOMEM;
5750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5752 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5753 pTsmStats->bssId,
5754 sizeof(wpt_macAddr));
5755 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5756
5757 pWdaParams->pWdaContext = pWDA;
5758 /* Store TSM Stats pointer, as this will be used for response */
5759 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005760 /* store Params pass it to WDI */
5761 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005762 status = WDI_TSMStatsReq(wdiTSMReqParam,
5763 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005764 if(IS_WDI_STATUS_FAILURE(status))
5765 {
5766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5767 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5769 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005770 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 return CONVERT_WDI2VOS_STATUS(status) ;
5773}
5774#endif
5775/*
5776 * FUNCTION: WDA_SendBeaconParamsCallback
5777 * No need to send any response to PE in this case
5778 */
5779void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5780{
5781
Jeff Johnson295189b2012-06-20 16:38:30 -07005782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005784 return ;
5785}
Jeff Johnson295189b2012-06-20 16:38:30 -07005786/*
5787 * FUNCTION: WDA_ProcessSendBeacon
5788 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5789 * start beacon trasmission
5790 */
5791VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5792 tSendbeaconParams *pSendbeaconParams)
5793{
5794 WDI_Status status = WDI_STATUS_SUCCESS ;
5795 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005797 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005798 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5799 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5800 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5801 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005802 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5803 pSendbeaconParams->timIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07005804#ifdef WLAN_FEATURE_P2P
5805 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5806 pSendbeaconParams->p2pIeOffset;
5807#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005808 /* Copy the beacon template to local buffer */
5809 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5810 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5811 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5812
Jeff Johnson295189b2012-06-20 16:38:30 -07005813 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5814 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 if(IS_WDI_STATUS_FAILURE(status))
5816 {
5817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5818 "Failure in SEND BEACON REQ Params WDI API" );
5819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005820 vos_mem_free(pSendbeaconParams);
5821 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005822}
Jeff Johnson295189b2012-06-20 16:38:30 -07005823/*
5824 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5825 * No need to send any response to PE in this case
5826 */
5827void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5828{
Jeff Johnson295189b2012-06-20 16:38:30 -07005829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005830 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 return ;
5832}
5833
Jeff Johnson295189b2012-06-20 16:38:30 -07005834/*
5835 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5836 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5837 * send probe response
5838 */
5839VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5840 tSendProbeRespParams *pSendProbeRspParams)
5841{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005842 WDI_Status status = WDI_STATUS_SUCCESS;
5843 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5844 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005846 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005847
5848 if (!wdiSendProbeRspParam)
5849 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5850
Jeff Johnson295189b2012-06-20 16:38:30 -07005851 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005852 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005853 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005854 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005855 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 /* Copy the Probe Response template to local buffer */
5857 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005858 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005859 pSendProbeRspParams->pProbeRespTemplate,
5860 pSendProbeRspParams->probeRespTemplateLen);
5861 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005862 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005863 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5864 WDI_PROBE_REQ_BITMAP_IE_LEN);
5865
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005866 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005867
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005868 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 if(IS_WDI_STATUS_FAILURE(status))
5871 {
5872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5873 "Failure in SEND Probe RSP Params WDI API" );
5874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005876 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005878}
Jeff Johnson295189b2012-06-20 16:38:30 -07005879#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5880/*
5881 * FUNCTION: WDA_SetMaxTxPowerCallBack
5882 * send the response to PE with power value received from WDI
5883 */
5884void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5885 void* pUserData)
5886{
5887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5888 tWDA_CbContext *pWDA = NULL;
5889 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5890
5891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005892 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 if(NULL == pWdaParams)
5894 {
5895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005896 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005897 VOS_ASSERT(0) ;
5898 return ;
5899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005900 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5901 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005902 if( NULL == pMaxTxPowerParams )
5903 {
5904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005905 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005906 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5908 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 return ;
5910 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005911
Jeff Johnson295189b2012-06-20 16:38:30 -07005912
5913 /*need to free memory for the pointers used in the
5914 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5916 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005918
Jeff Johnson295189b2012-06-20 16:38:30 -07005919
5920 /* send response to UMAC*/
5921 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5922
5923 return;
5924}
Jeff Johnson295189b2012-06-20 16:38:30 -07005925/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005926 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005927 * Request to WDI to send set Max Tx Power Request
5928 */
5929 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5930 tMaxTxPowerParams *MaxTxPowerParams)
5931{
5932 WDI_Status status = WDI_STATUS_SUCCESS;
5933 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5934 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005935
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005937 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005938
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
5940 sizeof(WDI_SetMaxTxPowerParamsType));
5941 if(NULL == wdiSetMaxTxPowerParams)
5942 {
5943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 VOS_ASSERT(0);
5946 return VOS_STATUS_E_NOMEM;
5947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5949 if(NULL == pWdaParams)
5950 {
5951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005952 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005953 vos_mem_free(wdiSetMaxTxPowerParams);
5954 VOS_ASSERT(0);
5955 return VOS_STATUS_E_NOMEM;
5956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 /* Copy.Max.Tx.Power Params to WDI structure */
5958 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
5959 MaxTxPowerParams->bssId,
5960 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
5962 MaxTxPowerParams->selfStaMacAddr,
5963 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005964 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
5965 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 pWdaParams->pWdaContext = pWDA;
5968 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005969 /* store Params pass it to WDI */
5970 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
5972 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005973 if(IS_WDI_STATUS_FAILURE(status))
5974 {
5975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5976 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
5977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5978 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005979 /* send response to UMAC*/
5980 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005981 }
5982 return CONVERT_WDI2VOS_STATUS(status);
5983
5984}
Jeff Johnson295189b2012-06-20 16:38:30 -07005985#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005986#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07005987/*
5988 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
5989 * Free the memory. No need to send any response to PE in this case
5990 */
5991void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
5992{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
5994
Jeff Johnson295189b2012-06-20 16:38:30 -07005995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005996 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005997
5998 if(NULL == pWdaParams)
5999 {
6000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006001 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006002 VOS_ASSERT(0) ;
6003 return ;
6004 }
6005
6006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6007 vos_mem_free(pWdaParams->wdaMsgParam) ;
6008 vos_mem_free(pWdaParams);
6009
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 /*
6011 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6012 * so just free the request param here
6013 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 return ;
6015}
6016
Jeff Johnson295189b2012-06-20 16:38:30 -07006017/*
6018 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6019 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6020 */
6021VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6022 tP2pPsParams *pP2pPsConfigParams)
6023{
6024 WDI_Status status = WDI_STATUS_SUCCESS ;
6025 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6026 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6027 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006028 tWDA_ReqParams *pWdaParams = NULL;
6029
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006031 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 if(NULL == wdiSetP2PGONOAReqParam)
6033 {
6034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006035 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 VOS_ASSERT(0);
6037 return VOS_STATUS_E_NOMEM;
6038 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006039
6040 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6041 if(NULL == pWdaParams)
6042 {
6043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006044 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006045 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006046 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006047 VOS_ASSERT(0);
6048 return VOS_STATUS_E_NOMEM;
6049 }
6050
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6052 pP2pPsConfigParams->opp_ps;
6053 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6054 pP2pPsConfigParams->ctWindow;
6055 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6056 pP2pPsConfigParams->count;
6057 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6058 pP2pPsConfigParams->duration;
6059 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6060 pP2pPsConfigParams->interval;
6061 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6062 pP2pPsConfigParams->single_noa_duration;
6063 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6064 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006065
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6067 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006068 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6069
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006071 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6072 pWdaParams->pWdaContext = pWDA;
6073
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006075 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6076
Jeff Johnson295189b2012-06-20 16:38:30 -07006077 if(IS_WDI_STATUS_FAILURE(status))
6078 {
6079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6080 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6082 vos_mem_free(pWdaParams->wdaMsgParam);
6083 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006084 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006085 return CONVERT_WDI2VOS_STATUS(status);
6086
Jeff Johnson295189b2012-06-20 16:38:30 -07006087}
6088#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006089#ifdef WLAN_FEATURE_VOWIFI_11R
6090/*
6091 * FUNCTION: WDA_AggrAddTSReqCallback
6092 * send ADD AGGREGATED TS RSP back to PE
6093 */
6094void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6095{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6097 tWDA_CbContext *pWDA;
6098 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006101 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006102 if(NULL == pWdaParams)
6103 {
6104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006105 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006106 VOS_ASSERT(0) ;
6107 return ;
6108 }
6109
6110 pWDA = pWdaParams->pWdaContext;
6111 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006112
6113 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6114 {
6115 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006118
6119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6120 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006121 return ;
6122}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006123/*
6124 * FUNCTION: WDA_ProcessAddTSReq
6125 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6126 */
6127VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6128 tAggrAddTsParams *pAggrAddTsReqParams)
6129{
6130 WDI_Status status = WDI_STATUS_SUCCESS ;
6131 int i;
6132 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006133 tWDA_ReqParams *pWdaParams = NULL;
6134
6135
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006137 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6139 sizeof(WDI_AggrAddTSReqParamsType)) ;
6140 if(NULL == wdiAggrAddTSReqParam)
6141 {
6142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 VOS_ASSERT(0);
6145 return VOS_STATUS_E_NOMEM;
6146 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006147
6148
6149 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6150 if(NULL == pWdaParams)
6151 {
6152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006153 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006154 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006155 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006156 VOS_ASSERT(0);
6157 return VOS_STATUS_E_NOMEM;
6158 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6160 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6161 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6163 {
6164 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6165 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6166 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6168 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6169 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6170 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6171 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6172 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6173 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6174 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6175 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6176 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6177 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6178 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6179 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6180 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6181 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6182 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6184 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6186 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6187 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6188 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6189 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6190 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6191 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6192 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6193 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6194 pAggrAddTsReqParams->tspec[i].inactInterval;
6195 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6196 pAggrAddTsReqParams->tspec[i].suspendInterval;
6197 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6198 pAggrAddTsReqParams->tspec[i].svcStartTime;
6199 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6200 pAggrAddTsReqParams->tspec[i].minDataRate;
6201 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6202 pAggrAddTsReqParams->tspec[i].meanDataRate;
6203 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6204 pAggrAddTsReqParams->tspec[i].peakDataRate;
6205 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6206 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6207 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6208 pAggrAddTsReqParams->tspec[i].delayBound;
6209 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6210 pAggrAddTsReqParams->tspec[i].minPhyRate;
6211 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6212 pAggrAddTsReqParams->tspec[i].surplusBw;
6213 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6214 pAggrAddTsReqParams->tspec[i].mediumTime;
6215 }
6216
6217 /* TODO: tAggrAddTsParams doesn't have the following fields */
6218#if 0
6219 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6220 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6221 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6222 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6223#endif
6224 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6225
6226 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006227 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006229 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6230
6231 pWdaParams->pWdaContext = pWDA;
6232
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006234 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6235
Jeff Johnson295189b2012-06-20 16:38:30 -07006236 if(IS_WDI_STATUS_FAILURE(status))
6237 {
6238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6239 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006240 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6241 vos_mem_free(pWdaParams);
6242
6243 /* send the failure response back to PE*/
6244 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6245 {
6246 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6247 }
6248
6249 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6250 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 return CONVERT_WDI2VOS_STATUS(status) ;
6253}
6254#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006255/*
6256 * FUNCTION: WDA_EnterImpsReqCallback
6257 * send Enter IMPS RSP back to PE
6258 */
6259void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6260{
6261 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006263 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006265 return ;
6266}
Jeff Johnson295189b2012-06-20 16:38:30 -07006267/*
6268 * FUNCTION: WDA_ProcessEnterImpsReq
6269 * Request to WDI to Enter IMPS power state.
6270 */
6271VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6272{
6273 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006275 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 if(IS_WDI_STATUS_FAILURE(status))
6278 {
6279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6280 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006281 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 return CONVERT_WDI2VOS_STATUS(status) ;
6284}
Jeff Johnson295189b2012-06-20 16:38:30 -07006285/*
6286 * FUNCTION: WDA_ExitImpsReqCallback
6287 * send Exit IMPS RSP back to PE
6288 */
6289void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6290{
6291 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006293 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006295 return ;
6296}
Jeff Johnson295189b2012-06-20 16:38:30 -07006297/*
6298 * FUNCTION: WDA_ProcessExitImpsReq
6299 * Request to WDI to Exit IMPS power state.
6300 */
6301VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6302{
6303 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 if(IS_WDI_STATUS_FAILURE(status))
6308 {
6309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6310 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006311 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006313 return CONVERT_WDI2VOS_STATUS(status) ;
6314}
Jeff Johnson295189b2012-06-20 16:38:30 -07006315/*
6316 * FUNCTION: WDA_EnterBmpsReqCallback
6317 * send Enter BMPS RSP back to PE
6318 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006319void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006320{
6321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6322 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006323 tEnterBmpsParams *pEnterBmpsRspParams;
6324
Jeff Johnson295189b2012-06-20 16:38:30 -07006325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006326 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 if(NULL == pWdaParams)
6328 {
6329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006330 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 VOS_ASSERT(0) ;
6332 return ;
6333 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006334
6335 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6336 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6337
6338 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6339 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6340
6341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006342 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006343 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6344
Jeff Johnson295189b2012-06-20 16:38:30 -07006345 return ;
6346}
Jeff Johnson295189b2012-06-20 16:38:30 -07006347/*
6348 * FUNCTION: WDA_ProcessEnterBmpsReq
6349 * Request to WDI to Enter BMPS power state.
6350 */
6351VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6352 tEnterBmpsParams *pEnterBmpsReqParams)
6353{
6354 WDI_Status status = WDI_STATUS_SUCCESS;
6355 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6356 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006358 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006359 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6360 {
6361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006362 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006363 VOS_ASSERT(0);
6364 return VOS_STATUS_E_FAILURE;
6365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6367 if (NULL == wdiEnterBmpsReqParams)
6368 {
6369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006371 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006372 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6373 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 return VOS_STATUS_E_NOMEM;
6375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6377 if (NULL == pWdaParams)
6378 {
6379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006380 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 VOS_ASSERT(0);
6382 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006383 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6384 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006385 return VOS_STATUS_E_NOMEM;
6386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6388 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6389 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6390 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006391 // For CCX and 11R Roaming
6392 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6393 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6394 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6395 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006396
Jeff Johnson295189b2012-06-20 16:38:30 -07006397 /* Store param pointer as passed in by caller */
6398 /* store Params pass it to WDI */
6399 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006400 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006401 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006402 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6403 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 if (IS_WDI_STATUS_FAILURE(status))
6405 {
6406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6407 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006409 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006411 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006413 return CONVERT_WDI2VOS_STATUS(status);
6414}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006415
6416
6417static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6418 WDI_Status wdiStatus,
6419 tExitBmpsParams *pExitBmpsReqParams)
6420{
6421 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6422
6423 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6424}
6425
6426
Jeff Johnson295189b2012-06-20 16:38:30 -07006427/*
6428 * FUNCTION: WDA_ExitBmpsReqCallback
6429 * send Exit BMPS RSP back to PE
6430 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006431void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006432{
6433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6434 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006435 tExitBmpsParams *pExitBmpsRspParams;
6436
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006438 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 if(NULL == pWdaParams)
6440 {
6441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006442 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 VOS_ASSERT(0) ;
6444 return ;
6445 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006446
6447 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6448 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6449
6450 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6451 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006452
Jeff Johnson295189b2012-06-20 16:38:30 -07006453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6454 vos_mem_free(pWdaParams) ;
6455
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006456 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 return ;
6458}
Jeff Johnson295189b2012-06-20 16:38:30 -07006459/*
6460 * FUNCTION: WDA_ProcessExitBmpsReq
6461 * Request to WDI to Exit BMPS power state.
6462 */
6463VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6464 tExitBmpsParams *pExitBmpsReqParams)
6465{
6466 WDI_Status status = WDI_STATUS_SUCCESS ;
6467 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6468 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6469 sizeof(WDI_ExitBmpsReqParamsType)) ;
6470 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006472 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006473 if(NULL == wdiExitBmpsReqParams)
6474 {
6475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006476 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006477 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006478 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006479 return VOS_STATUS_E_NOMEM;
6480 }
6481 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6482 if(NULL == pWdaParams)
6483 {
6484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 VOS_ASSERT(0);
6487 vos_mem_free(wdiExitBmpsReqParams);
6488 return VOS_STATUS_E_NOMEM;
6489 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006490 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006491
6492 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6493
Jeff Johnson295189b2012-06-20 16:38:30 -07006494 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6495
6496 /* Store param pointer as passed in by caller */
6497 /* store Params pass it to WDI */
6498 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6499 pWdaParams->pWdaContext = pWDA;
6500 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006501 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6502 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006503 if(IS_WDI_STATUS_FAILURE(status))
6504 {
6505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6506 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6508 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006509 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006510 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006511 return CONVERT_WDI2VOS_STATUS(status) ;
6512}
Jeff Johnson295189b2012-06-20 16:38:30 -07006513/*
6514 * FUNCTION: WDA_EnterUapsdReqCallback
6515 * send Enter UAPSD RSP back to PE
6516 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006517void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006518{
6519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6520 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006521 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006523 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 if(NULL == pWdaParams)
6525 {
6526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006527 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006528 VOS_ASSERT(0) ;
6529 return ;
6530 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006531
6532 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6533 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6534
6535 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6536 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6537
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6539 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006540 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006541 return ;
6542}
Jeff Johnson295189b2012-06-20 16:38:30 -07006543/*
6544 * FUNCTION: WDA_ProcessEnterUapsdReq
6545 * Request to WDI to Enter UAPSD power state.
6546 */
6547VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6548 tUapsdParams *pEnterUapsdReqParams)
6549{
6550 WDI_Status status = WDI_STATUS_SUCCESS ;
6551 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6552 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6553 sizeof(WDI_EnterUapsdReqParamsType)) ;
6554 tWDA_ReqParams *pWdaParams ;
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 if(NULL == wdiEnterUapsdReqParams)
6558 {
6559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006560 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006561 VOS_ASSERT(0);
6562 return VOS_STATUS_E_NOMEM;
6563 }
6564 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6565 if(NULL == pWdaParams)
6566 {
6567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006568 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 VOS_ASSERT(0);
6570 vos_mem_free(wdiEnterUapsdReqParams);
6571 return VOS_STATUS_E_NOMEM;
6572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006573 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6574 pEnterUapsdReqParams->beDeliveryEnabled;
6575 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6576 pEnterUapsdReqParams->beTriggerEnabled;
6577 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6578 pEnterUapsdReqParams->bkDeliveryEnabled;
6579 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6580 pEnterUapsdReqParams->bkTriggerEnabled;
6581 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6582 pEnterUapsdReqParams->viDeliveryEnabled;
6583 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6584 pEnterUapsdReqParams->viTriggerEnabled;
6585 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6586 pEnterUapsdReqParams->voDeliveryEnabled;
6587 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6588 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006589 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006590
6591 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6592
Jeff Johnson295189b2012-06-20 16:38:30 -07006593 /* Store param pointer as passed in by caller */
6594 /* store Params pass it to WDI */
6595 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6596 pWdaParams->pWdaContext = pWDA;
6597 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006598 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6599 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006600 if(IS_WDI_STATUS_FAILURE(status))
6601 {
6602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6603 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6604 vos_mem_free(pWdaParams->wdaMsgParam) ;
6605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6606 vos_mem_free(pWdaParams) ;
6607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006608 return CONVERT_WDI2VOS_STATUS(status) ;
6609}
Jeff Johnson295189b2012-06-20 16:38:30 -07006610/*
6611 * FUNCTION: WDA_ExitUapsdReqCallback
6612 * send Exit UAPSD RSP back to PE
6613 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006614void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006615{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006616
6617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6618 tWDA_CbContext *pWDA;
6619 tExitUapsdParams *pExitUapsdRspParams;
6620
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006622 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006623 if(NULL == pWdaParams)
6624 {
6625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006626 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006627 VOS_ASSERT(0);
6628 return;
6629 }
6630
6631 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6632 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6633
6634 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6635 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6636
6637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6638 vos_mem_free(pWdaParams) ;
6639
6640 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006641 return ;
6642}
Jeff Johnson295189b2012-06-20 16:38:30 -07006643/*
6644 * FUNCTION: WDA_ProcessExitUapsdReq
6645 * Request to WDI to Exit UAPSD power state.
6646 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006647VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6648 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006649{
6650 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006651 tWDA_ReqParams *pWdaParams ;
6652 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6653 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6654 sizeof(WDI_ExitUapsdReqParamsType)) ;
6655
Jeff Johnson295189b2012-06-20 16:38:30 -07006656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006657 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006658
6659 if(NULL == wdiExitUapsdReqParams)
6660 {
6661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006662 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006663 VOS_ASSERT(0);
6664 return VOS_STATUS_E_NOMEM;
6665 }
6666 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6667 if(NULL == pWdaParams)
6668 {
6669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006670 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006671 VOS_ASSERT(0);
6672 vos_mem_free(wdiExitUapsdReqParams);
6673 return VOS_STATUS_E_NOMEM;
6674 }
6675
6676 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6677 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6678
6679 /* Store param pointer as passed in by caller */
6680 /* store Params pass it to WDI */
6681 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6682 pWdaParams->pWdaContext = pWDA;
6683 pWdaParams->wdaMsgParam = pExitUapsdParams;
6684
6685 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006686 if(IS_WDI_STATUS_FAILURE(status))
6687 {
6688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6689 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006690 vos_mem_free(pWdaParams->wdaMsgParam) ;
6691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6692 vos_mem_free(pWdaParams) ;
6693
Jeff Johnson295189b2012-06-20 16:38:30 -07006694 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006695 return CONVERT_WDI2VOS_STATUS(status) ;
6696}
6697
Jeff Johnson295189b2012-06-20 16:38:30 -07006698/*
6699 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6700 *
6701 */
6702void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6703{
6704 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006706 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 if(NULL == pWdaParams)
6708 {
6709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006710 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006711 VOS_ASSERT(0) ;
6712 return ;
6713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 if( pWdaParams != NULL )
6715 {
6716 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6717 {
6718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6719 }
6720 if( pWdaParams->wdaMsgParam != NULL )
6721 {
6722 vos_mem_free(pWdaParams->wdaMsgParam) ;
6723 }
6724 vos_mem_free(pWdaParams) ;
6725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 return ;
6727}
Jeff Johnson295189b2012-06-20 16:38:30 -07006728/*
6729 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6730 * Request to WDI to set the power save params at start.
6731 */
6732VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6733 tSirPowerSaveCfg *pPowerSaveCfg)
6734{
6735 WDI_Status status = WDI_STATUS_SUCCESS ;
6736 tHalCfg *tlvStruct = NULL ;
6737 tANI_U8 *tlvStructStart = NULL ;
6738 v_PVOID_t *configParam;
6739 tANI_U32 configParamSize;
6740 tANI_U32 *configDataValue;
6741 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6742 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006744 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006745 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6746 {
6747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006748 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006749 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006750 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 return VOS_STATUS_E_FAILURE;
6752 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6754 if (NULL == wdiPowerSaveCfg)
6755 {
6756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006759 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 return VOS_STATUS_E_NOMEM;
6761 }
6762 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6763 if(NULL == pWdaParams)
6764 {
6765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006767 VOS_ASSERT(0);
6768 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006769 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006770 return VOS_STATUS_E_NOMEM;
6771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6773 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 if(NULL == configParam)
6775 {
6776 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006777 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006778 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 vos_mem_free(pWdaParams);
6780 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006781 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 return VOS_STATUS_E_NOMEM;
6783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 vos_mem_set(configParam, configParamSize, 0);
6785 wdiPowerSaveCfg->pConfigBuffer = configParam;
6786 tlvStruct = (tHalCfg *)configParam;
6787 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6789 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6790 tlvStruct->length = sizeof(tANI_U32);
6791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6792 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6794 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006795 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
6796 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6797 tlvStruct->length = sizeof(tANI_U32);
6798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6799 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6801 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006802 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
6803 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6804 tlvStruct->length = sizeof(tANI_U32);
6805 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6806 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6808 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
6810 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6811 tlvStruct->length = sizeof(tANI_U32);
6812 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6813 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6815 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
6817 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6818 tlvStruct->length = sizeof(tANI_U32);
6819 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6820 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6822 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6824 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6825 tlvStruct->length = sizeof(tANI_U32);
6826 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6827 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006830 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6831 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6832 tlvStruct->length = sizeof(tANI_U32);
6833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6834 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6836 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
6838 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6839 tlvStruct->length = sizeof(tANI_U32);
6840 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6841 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6843 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6845 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6846 tlvStruct->length = sizeof(tANI_U32);
6847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6848 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6849 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6850 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006851 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6852 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6853 tlvStruct->length = sizeof(tANI_U32);
6854 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6855 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006856 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6857 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6859 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6860 tlvStruct->length = sizeof(tANI_U32);
6861 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6862 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6864 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006865 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 /* store Params pass it to WDI */
6868 pWdaParams->wdaMsgParam = configParam;
6869 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6870 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6872 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 if(IS_WDI_STATUS_FAILURE(status))
6874 {
6875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6876 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6877 vos_mem_free(pWdaParams->wdaMsgParam);
6878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6879 vos_mem_free(pWdaParams);
6880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 return CONVERT_WDI2VOS_STATUS(status);
6883}
Jeff Johnson295189b2012-06-20 16:38:30 -07006884/*
6885 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6886 *
6887 */
6888void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6889{
6890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006892 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6894 vos_mem_free(pWdaParams);
6895
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 return ;
6897}
Jeff Johnson295189b2012-06-20 16:38:30 -07006898/*
6899 * FUNCTION: WDA_SetUapsdAcParamsReq
6900 * Request to WDI to set the UAPSD params for an ac (sta mode).
6901 */
6902VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6903 tUapsdInfo *pUapsdInfo)
6904{
6905 WDI_Status status = WDI_STATUS_SUCCESS;
6906 tWDA_CbContext *pWDA = NULL ;
6907 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6908 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6909 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6910 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006912 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 if(NULL == wdiUapsdParams)
6914 {
6915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 VOS_ASSERT(0);
6918 return VOS_STATUS_E_NOMEM;
6919 }
6920 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6921 if(NULL == pWdaParams)
6922 {
6923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006924 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 VOS_ASSERT(0);
6926 vos_mem_free(wdiUapsdParams);
6927 return VOS_STATUS_E_NOMEM;
6928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6930 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6931 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6932 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6933 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6934 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 pWdaParams->pWdaContext = pWDA;
6938 /* Store param pointer as passed in by caller */
6939 pWdaParams->wdaMsgParam = pUapsdInfo;
6940 /* store Params pass it to WDI */
6941 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
6943 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
6944 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 if(IS_WDI_STATUS_FAILURE(status))
6946 {
6947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6948 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
6949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6950 vos_mem_free(pWdaParams);
6951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
6953 return VOS_STATUS_SUCCESS;
6954 else
6955 return VOS_STATUS_E_FAILURE;
6956
Jeff Johnson295189b2012-06-20 16:38:30 -07006957}
6958/*
6959 * FUNCTION: WDA_ClearUapsdAcParamsReq
6960 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
6961 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
6962 * and again enter the UPASD with the modified params. Hence the disable
6963 * function was kept empty.
6964 *
6965 */
6966VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
6967{
6968 /* do nothing */
6969 return VOS_STATUS_SUCCESS;
6970}
Jeff Johnson295189b2012-06-20 16:38:30 -07006971/*
6972 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
6973 *
6974 */
6975void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
6976{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6978
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006980 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006981
6982 if(NULL == pWdaParams)
6983 {
6984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006985 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006986 VOS_ASSERT(0) ;
6987 return ;
6988 }
6989
6990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6991 vos_mem_free(pWdaParams->wdaMsgParam);
6992 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006993
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 //print a msg, nothing else to do
6995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6996 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006997 return ;
6998}
Jeff Johnson295189b2012-06-20 16:38:30 -07006999/*
7000 * FUNCTION: WDA_UpdateUapsdParamsReq
7001 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7002 */
7003VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7004 tUpdateUapsdParams* pUpdateUapsdInfo)
7005{
7006 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007007 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7009 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7010 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007011 tWDA_ReqParams *pWdaParams = NULL;
7012
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007014 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007015 if(NULL == wdiUpdateUapsdParams)
7016 {
7017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007018 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 VOS_ASSERT(0);
7020 return VOS_STATUS_E_NOMEM;
7021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7023 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7024 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007025
7026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7027 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 {
7029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007032 vos_mem_free(pUpdateUapsdInfo);
7033 vos_mem_free(wdiUpdateUapsdParams);
7034 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007036 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007037 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007038 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007039 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7040 pWdaParams->pWdaContext = pWDA;
7041
Jeff Johnson43971f52012-07-17 12:26:56 -07007042 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007043 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7044 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007045
Jeff Johnson43971f52012-07-17 12:26:56 -07007046 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 {
7048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7049 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007050 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7052 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007053 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007054 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007055 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007056}
Jeff Johnson295189b2012-06-20 16:38:30 -07007057/*
7058 * FUNCTION: WDA_ConfigureRxpFilterCallback
7059 *
7060 */
7061void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7062{
7063 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 if(WDI_STATUS_SUCCESS != wdiStatus)
7067 {
7068 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007069 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007071 if(NULL == pWdaParams)
7072 {
7073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007074 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 VOS_ASSERT(0) ;
7076 return ;
7077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7079 vos_mem_free(pWdaParams->wdaMsgParam);
7080 vos_mem_free(pWdaParams);
7081 return ;
7082}
Jeff Johnson295189b2012-06-20 16:38:30 -07007083/*
7084 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7085 *
7086 */
7087VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7088 tSirWlanSetRxpFilters *pWlanSuspendParam)
7089{
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007091 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7093 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7094 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7095 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007097 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 if(NULL == wdiRxpFilterParams)
7099 {
7100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007101 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 VOS_ASSERT(0);
7103 vos_mem_free(pWlanSuspendParam);
7104 return VOS_STATUS_E_NOMEM;
7105 }
7106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7107 if(NULL == pWdaParams)
7108 {
7109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 VOS_ASSERT(0);
7112 vos_mem_free(wdiRxpFilterParams);
7113 vos_mem_free(pWlanSuspendParam);
7114 return VOS_STATUS_E_NOMEM;
7115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007116 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7117 pWlanSuspendParam->setMcstBcstFilter;
7118 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7119 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7120
7121 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007122 pWdaParams->pWdaContext = pWDA;
7123 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7124 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007125 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7127 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007128 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 {
7130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7131 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007132 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7134 vos_mem_free(pWdaParams->wdaMsgParam);
7135 vos_mem_free(pWdaParams);
7136 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007137 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007138}
Jeff Johnson295189b2012-06-20 16:38:30 -07007139/*
7140 * FUNCTION: WDA_WdiIndicationCallback
7141 *
7142 */
7143void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7144 void* pUserData)
7145{
7146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007147 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007148}
Jeff Johnson295189b2012-06-20 16:38:30 -07007149/*
7150 * FUNCTION: WDA_ProcessWlanSuspendInd
7151 *
7152 */
7153VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7154 tSirWlanSuspendParam *pWlanSuspendParam)
7155{
7156 WDI_Status wdiStatus;
7157 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007159 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7161 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7162 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7163 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7166 if(WDI_STATUS_PENDING == wdiStatus)
7167 {
7168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007169 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007170 }
7171 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7172 {
7173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007174 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 vos_mem_free(pWlanSuspendParam);
7177 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7178}
7179
Jeff Johnson295189b2012-06-20 16:38:30 -07007180/*
7181 * FUNCTION: WDA_ProcessWlanResumeCallback
7182 *
7183 */
7184void WDA_ProcessWlanResumeCallback(
7185 WDI_SuspendResumeRspParamsType *resumeRspParams,
7186 void* pUserData)
7187{
7188 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007190 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 if(NULL == pWdaParams)
7192 {
7193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007194 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 VOS_ASSERT(0) ;
7196 return ;
7197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7199 {
7200 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007201 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7204 vos_mem_free(pWdaParams->wdaMsgParam);
7205 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 return ;
7207}
Jeff Johnson295189b2012-06-20 16:38:30 -07007208/*
7209 * FUNCTION: WDA_ProcessWlanResumeReq
7210 *
7211 */
7212VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7213 tSirWlanResumeParam *pWlanResumeParam)
7214{
7215 WDI_Status wdiStatus;
7216 WDI_ResumeParamsType *wdiResumeParams =
7217 (WDI_ResumeParamsType *)vos_mem_malloc(
7218 sizeof(WDI_ResumeParamsType) ) ;
7219 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007221 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 if(NULL == wdiResumeParams)
7223 {
7224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007226 VOS_ASSERT(0);
7227 return VOS_STATUS_E_NOMEM;
7228 }
7229 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7230 if(NULL == pWdaParams)
7231 {
7232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007233 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007234 VOS_ASSERT(0);
7235 vos_mem_free(wdiResumeParams);
7236 return VOS_STATUS_E_NOMEM;
7237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007238 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7239 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 wdiResumeParams->wdiReqStatusCB = NULL;
7242 pWdaParams->wdaMsgParam = pWlanResumeParam;
7243 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7244 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007245 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7246 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7247 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007248 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7249 {
7250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7251 "Failure in Host Resume REQ WDI API, free all the memory " );
7252 VOS_ASSERT(0);
7253 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7254 vos_mem_free(pWdaParams->wdaMsgParam);
7255 vos_mem_free(pWdaParams);
7256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007257 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7258}
7259
Jeff Johnson295189b2012-06-20 16:38:30 -07007260/*
7261 * FUNCTION: WDA_SetBeaconFilterReqCallback
7262 *
7263 */
7264void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7265{
7266 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007268 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007269 if(NULL == pWdaParams)
7270 {
7271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007272 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007273 VOS_ASSERT(0) ;
7274 return ;
7275 }
7276
7277 vos_mem_free(pWdaParams->wdaMsgParam) ;
7278 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7279 vos_mem_free(pWdaParams) ;
7280 /*
7281 * No respone required for SetBeaconFilter req so just free the request
7282 * param here
7283 */
7284
Jeff Johnson295189b2012-06-20 16:38:30 -07007285 return ;
7286}
Jeff Johnson295189b2012-06-20 16:38:30 -07007287/*
7288 * FUNCTION: WDA_SetBeaconFilterReq
7289 * Request to WDI to send the beacon filtering related information.
7290 */
7291VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7292 tBeaconFilterMsg* pBeaconFilterInfo)
7293{
7294 WDI_Status status = WDI_STATUS_SUCCESS;
7295 tANI_U8 *dstPtr, *srcPtr;
7296 tANI_U8 filterLength;
7297 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7298 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7299 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7300 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007302 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007303 if(NULL == wdiBeaconFilterInfo)
7304 {
7305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007306 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007307 VOS_ASSERT(0);
7308 return VOS_STATUS_E_NOMEM;
7309 }
7310 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7311 if(NULL == pWdaParams)
7312 {
7313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007314 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007315 VOS_ASSERT(0);
7316 vos_mem_free(wdiBeaconFilterInfo);
7317 return VOS_STATUS_E_NOMEM;
7318 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7320 pBeaconFilterInfo->beaconInterval;
7321 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7322 pBeaconFilterInfo->capabilityInfo;
7323 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7324 pBeaconFilterInfo->capabilityMask;
7325 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007326
7327 //Fill the BssIdx
7328 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7329
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 //Fill structure with info contained in the beaconFilterTable
7331 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7332 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7333 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7334 if(WDI_BEACON_FILTER_LEN < filterLength)
7335 {
7336 filterLength = WDI_BEACON_FILTER_LEN;
7337 }
7338 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007339 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7340 /* Store param pointer as passed in by caller */
7341 /* store Params pass it to WDI */
7342 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7343 pWdaParams->pWdaContext = pWDA;
7344 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7345
Jeff Johnson295189b2012-06-20 16:38:30 -07007346 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7347 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007348 if(IS_WDI_STATUS_FAILURE(status))
7349 {
7350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7351 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7352 vos_mem_free(pWdaParams->wdaMsgParam) ;
7353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7354 vos_mem_free(pWdaParams) ;
7355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007356 return CONVERT_WDI2VOS_STATUS(status) ;
7357}
Jeff Johnson295189b2012-06-20 16:38:30 -07007358/*
7359 * FUNCTION: WDA_RemBeaconFilterReqCallback
7360 *
7361 */
7362void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7363{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007364 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7365
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007367 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007368
7369 if(NULL == pWdaParams)
7370 {
7371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007372 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007373 VOS_ASSERT(0) ;
7374 return ;
7375 }
7376
7377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7378 vos_mem_free(pWdaParams->wdaMsgParam);
7379 vos_mem_free(pWdaParams);
7380
Jeff Johnson295189b2012-06-20 16:38:30 -07007381 //print a msg, nothing else to do
7382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7383 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 return ;
7385}
Jeff Johnson295189b2012-06-20 16:38:30 -07007386 // TODO: PE does not have this feature for now implemented,
7387 // but the support for removing beacon filter exists between
7388 // HAL and FW. This function can be called whenever PE defines
7389 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007390/*
7391 * FUNCTION: WDA_RemBeaconFilterReq
7392 * Request to WDI to send the removal of beacon filtering related information.
7393 */
7394VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7395 tRemBeaconFilterMsg* pBeaconFilterInfo)
7396{
7397 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007398 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7400 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7401 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007402 tWDA_ReqParams *pWdaParams ;
7403
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007405 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007406 if(NULL == wdiBeaconFilterInfo)
7407 {
7408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007409 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 VOS_ASSERT(0);
7411 return VOS_STATUS_E_NOMEM;
7412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7414 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 //Fill structure with info contained in the ucRemIeId
7416 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7417 pBeaconFilterInfo->ucRemIeId,
7418 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7419 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007420
7421 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7422 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007423 {
7424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007425 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007427 vos_mem_free(wdiBeaconFilterInfo);
7428 vos_mem_free(pBeaconFilterInfo);
7429 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 }
7431
7432 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007433 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007434 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007435 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7436
7437 pWdaParams->pWdaContext = pWDA;
7438
Jeff Johnson43971f52012-07-17 12:26:56 -07007439 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007440 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007441 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 {
7443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7444 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007445 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7447 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007448 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007449 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007450 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007451}
Jeff Johnson295189b2012-06-20 16:38:30 -07007452/*
7453 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7454 *
7455 */
7456void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7457{
7458 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007460 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 if(NULL == pWdaParams)
7462 {
7463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007464 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 VOS_ASSERT(0) ;
7466 return ;
7467 }
7468
7469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7470 vos_mem_free(pWdaParams) ;
7471
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 return ;
7473}
Jeff Johnson295189b2012-06-20 16:38:30 -07007474/*
7475 * FUNCTION: WDA_SetRSSIThresholdsReq
7476 * Request to WDI to set the RSSI thresholds (sta mode).
7477 */
7478VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7479{
7480 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007481 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 tWDA_CbContext *pWDA = NULL ;
7483 v_PVOID_t pVosContext = NULL;
7484 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7485 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7486 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7487 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007489 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 if(NULL == wdiRSSIThresholdsInfo)
7491 {
7492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007494 VOS_ASSERT(0);
7495 return VOS_STATUS_E_NOMEM;
7496 }
7497 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7498 if(NULL == pWdaParams)
7499 {
7500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007501 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 VOS_ASSERT(0);
7503 vos_mem_free(wdiRSSIThresholdsInfo);
7504 return VOS_STATUS_E_NOMEM;
7505 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7508 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7509 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7511 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7512 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7514 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7515 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007516 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7518 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7519
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 /* Store param pointer as passed in by caller */
7521 /* store Params pass it to WDI */
7522 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7523 pWdaParams->pWdaContext = pWDA;
7524 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007525 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007527 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 {
7529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7530 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007531 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7533 vos_mem_free(pWdaParams) ;
7534 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007535 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007536
7537}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007538/*
7539 * FUNCTION: WDA_HostOffloadReqCallback
7540 *
7541 */
7542void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7543{
7544 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7545
7546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007547 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007548 if(NULL == pWdaParams)
7549 {
7550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007551 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007552 VOS_ASSERT(0) ;
7553 return ;
7554 }
7555
7556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7557 vos_mem_free(pWdaParams->wdaMsgParam);
7558 vos_mem_free(pWdaParams) ;
7559
7560 //print a msg, nothing else to do
7561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7562 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 return ;
7564}
Jeff Johnson295189b2012-06-20 16:38:30 -07007565/*
7566 * FUNCTION: WDA_ProcessHostOffloadReq
7567 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7568 * to broadcast traffic (sta mode).
7569 */
7570VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7571 tSirHostOffloadReq *pHostOffloadParams)
7572{
7573 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007574 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007575 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7576 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7577 sizeof(WDI_HostOffloadReqParamsType)) ;
7578 tWDA_ReqParams *pWdaParams ;
7579
7580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007581 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007582
7583 if(NULL == wdiHostOffloadInfo)
7584 {
7585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007587 VOS_ASSERT(0);
7588 return VOS_STATUS_E_NOMEM;
7589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7591 if(NULL == pWdaParams)
7592 {
7593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007594 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007595 VOS_ASSERT(0);
7596 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007597 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007598 return VOS_STATUS_E_NOMEM;
7599 }
7600
7601 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7602 pHostOffloadParams->offloadType;
7603 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7604 pHostOffloadParams->enableOrDisable;
7605
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007606 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7607 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7608
Jeff Johnson295189b2012-06-20 16:38:30 -07007609 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7610 {
7611 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7612 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7613 pHostOffloadParams->params.hostIpv4Addr,
7614 4);
7615 break;
7616 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7617 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7618 pHostOffloadParams->params.hostIpv6Addr,
7619 16);
7620 break;
7621 case SIR_IPV6_NS_OFFLOAD:
7622 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7623 pHostOffloadParams->params.hostIpv6Addr,
7624 16);
7625
7626#ifdef WLAN_NS_OFFLOAD
7627 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7628 {
7629 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7630 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7631 16);
7632 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7633 }
7634 else
7635 {
7636 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7637 }
7638
7639 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7640 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7641 16);
7642 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7643 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7644 6);
7645
7646 //Only two are supported so let's go through them without a loop
7647 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7648 {
7649 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7650 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7651 16);
7652 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7653 }
7654 else
7655 {
7656 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7657 }
7658
7659 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7660 {
7661 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7662 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7663 16);
7664 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7665 }
7666 else
7667 {
7668 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7669 }
7670 break;
7671#endif //WLAN_NS_OFFLOAD
7672 default:
7673 {
7674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7675 "No Handling for Offload Type %x in WDA "
7676 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7677 //WDA_VOS_ASSERT(0) ;
7678 }
7679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007680 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007681
Jeff Johnson295189b2012-06-20 16:38:30 -07007682 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007683 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007684 /* store Params pass it to WDI */
7685 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7686 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007687
Jeff Johnson295189b2012-06-20 16:38:30 -07007688
Jeff Johnson43971f52012-07-17 12:26:56 -07007689 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007690 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7691
Jeff Johnson43971f52012-07-17 12:26:56 -07007692 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 {
7694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7695 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007696 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7698 vos_mem_free(pWdaParams->wdaMsgParam);
7699 vos_mem_free(pWdaParams) ;
7700 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007701 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007702
7703}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007704/*
7705 * FUNCTION: WDA_KeepAliveReqCallback
7706 *
7707 */
7708void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7709{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007710 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7711
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007713 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007714
7715 if(NULL == pWdaParams)
7716 {
7717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007718 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007719 VOS_ASSERT(0) ;
7720 return ;
7721 }
7722
7723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7724 vos_mem_free(pWdaParams->wdaMsgParam);
7725 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007726
Jeff Johnson295189b2012-06-20 16:38:30 -07007727 //print a msg, nothing else to do
7728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7729 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007730 return ;
7731}
Jeff Johnson295189b2012-06-20 16:38:30 -07007732/*
7733 * FUNCTION: WDA_ProcessKeepAliveReq
7734 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7735 * wakeup due to broadcast traffic (sta mode).
7736 */
7737VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7738 tSirKeepAliveReq *pKeepAliveParams)
7739{
7740 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007741 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7743 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7744 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007745 tWDA_ReqParams *pWdaParams;
7746
Jeff Johnson295189b2012-06-20 16:38:30 -07007747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007748 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007749 if(NULL == wdiKeepAliveInfo)
7750 {
7751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007752 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007753 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007754 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007755 return VOS_STATUS_E_NOMEM;
7756 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007757
7758 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7759 if(NULL == pWdaParams)
7760 {
7761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007762 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007763 VOS_ASSERT(0);
7764 vos_mem_free(wdiKeepAliveInfo);
7765 vos_mem_free(pKeepAliveParams);
7766 return VOS_STATUS_E_NOMEM;
7767 }
7768
Jeff Johnson295189b2012-06-20 16:38:30 -07007769 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7770 pKeepAliveParams->packetType;
7771 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7772 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007773
7774 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7775 pKeepAliveParams->bssId,
7776 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007777
7778 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7779 {
7780 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7781 pKeepAliveParams->hostIpv4Addr,
7782 SIR_IPV4_ADDR_LEN);
7783 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7784 pKeepAliveParams->destIpv4Addr,
7785 SIR_IPV4_ADDR_LEN);
7786 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7787 pKeepAliveParams->destMacAddr,
7788 SIR_MAC_ADDR_LEN);
7789 }
7790 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7791 {
7792 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7793 SIR_IPV4_ADDR_LEN,
7794 0);
7795 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7796 SIR_IPV4_ADDR_LEN,
7797 0);
7798 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7799 SIR_MAC_ADDR_LEN,
7800 0);
7801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007803
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007805 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007807 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7808 pWdaParams->pWdaContext = pWDA;
7809
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7811 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7812 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7813 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7814 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7816 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7817 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7818 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7819 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7821 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7822 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7823 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7824 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7825 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7826 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7827 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7829 "TimePeriod %d PacketType %d",
7830 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7831 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007832 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007833 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7834
Jeff Johnson43971f52012-07-17 12:26:56 -07007835 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007836 {
7837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7838 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007839 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7841 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007842 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007844 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007845
7846}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007847/*
7848 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7849 *
7850 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007851void WDA_WowlAddBcPtrnReqCallback(
7852 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7853 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007854{
7855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007857 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007858 if(NULL == pWdaParams)
7859 {
7860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007861 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007862 VOS_ASSERT(0) ;
7863 return ;
7864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7866 vos_mem_free(pWdaParams->wdaMsgParam);
7867 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007868 return ;
7869}
Jeff Johnson295189b2012-06-20 16:38:30 -07007870/*
7871 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7872 * Request to WDI to add WOWL Bcast pattern
7873 */
7874VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7875 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7876{
7877 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007878 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7880 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7881 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7882 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007884 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 if(NULL == wdiWowlAddBcPtrnInfo)
7886 {
7887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007888 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007889 VOS_ASSERT(0);
7890 return VOS_STATUS_E_NOMEM;
7891 }
7892 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7893 if(NULL == pWdaParams)
7894 {
7895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 VOS_ASSERT(0);
7898 vos_mem_free(wdiWowlAddBcPtrnInfo);
7899 return VOS_STATUS_E_NOMEM;
7900 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007901 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7902 pWowlAddBcPtrnParams->ucPatternId;
7903 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7904 pWowlAddBcPtrnParams->ucPatternByteOffset;
7905 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7906 pWowlAddBcPtrnParams->ucPatternMaskSize;
7907 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7908 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7910 {
7911 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7912 pWowlAddBcPtrnParams->ucPattern,
7913 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7914 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7915 pWowlAddBcPtrnParams->ucPatternMask,
7916 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7917 }
7918 else
7919 {
7920 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7921 pWowlAddBcPtrnParams->ucPattern,
7922 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7923 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7924 pWowlAddBcPtrnParams->ucPatternMask,
7925 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7926
7927 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7928 pWowlAddBcPtrnParams->ucPatternExt,
7929 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7930 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7931 pWowlAddBcPtrnParams->ucPatternMaskExt,
7932 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7933 }
7934
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007935 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7936 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7937
Jeff Johnson295189b2012-06-20 16:38:30 -07007938 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007939 /* Store param pointer as passed in by caller */
7940 /* store Params pass it to WDI */
7941 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
7942 pWdaParams->pWdaContext = pWDA;
7943 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007944 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007946 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007947 {
7948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7949 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007950 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007951 vos_mem_free(pWdaParams->wdaMsgParam) ;
7952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7953 vos_mem_free(pWdaParams) ;
7954 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007955 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007956
7957}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007958/*
7959 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
7960 *
7961 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007962void WDA_WowlDelBcPtrnReqCallback(
7963 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
7964 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007965{
7966 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007968 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 if(NULL == pWdaParams)
7970 {
7971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007972 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 VOS_ASSERT(0) ;
7974 return ;
7975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7977 vos_mem_free(pWdaParams->wdaMsgParam);
7978 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 return ;
7980}
Jeff Johnson295189b2012-06-20 16:38:30 -07007981/*
7982 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
7983 * Request to WDI to delete WOWL Bcast pattern
7984 */
7985VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
7986 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
7987{
7988 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007989 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007990 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
7991 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
7992 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
7993 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007995 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 if(NULL == wdiWowlDelBcPtrnInfo)
7997 {
7998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007999 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 VOS_ASSERT(0);
8001 return VOS_STATUS_E_NOMEM;
8002 }
8003 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8004 if(NULL == pWdaParams)
8005 {
8006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 VOS_ASSERT(0);
8009 vos_mem_free(wdiWowlDelBcPtrnInfo);
8010 return VOS_STATUS_E_NOMEM;
8011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8013 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008014
8015 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8016 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8017
Jeff Johnson295189b2012-06-20 16:38:30 -07008018 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008019 /* Store param pointer as passed in by caller */
8020 /* store Params pass it to WDI */
8021 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8022 pWdaParams->pWdaContext = pWDA;
8023 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008024 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008025 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008026 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 {
8028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8029 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008030 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 vos_mem_free(pWdaParams->wdaMsgParam) ;
8032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8033 vos_mem_free(pWdaParams) ;
8034 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008035 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008036
8037}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008038/*
8039 * FUNCTION: WDA_WowlEnterReqCallback
8040 *
8041 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008042void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008043{
8044 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8045 tWDA_CbContext *pWDA;
8046 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008048 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008049 if(NULL == pWdaParams)
8050 {
8051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008052 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 VOS_ASSERT(0) ;
8054 return ;
8055 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008056 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8057 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8058
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008059 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8060
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8062 vos_mem_free(pWdaParams) ;
8063
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008064 pWowlEnterParams->status =
8065 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008066 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008067 return ;
8068}
Jeff Johnson295189b2012-06-20 16:38:30 -07008069/*
8070 * FUNCTION: WDA_ProcessWowlEnterReq
8071 * Request to WDI to enter WOWL
8072 */
8073VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8074 tSirHalWowlEnterParams *pWowlEnterParams)
8075{
8076 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008077 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008078 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8079 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8080 sizeof(WDI_WowlEnterReqParamsType)) ;
8081 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008083 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008084 if(NULL == wdiWowlEnterInfo)
8085 {
8086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008087 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 VOS_ASSERT(0);
8089 return VOS_STATUS_E_NOMEM;
8090 }
8091 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8092 if(NULL == pWdaParams)
8093 {
8094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008095 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008096 VOS_ASSERT(0);
8097 vos_mem_free(wdiWowlEnterInfo);
8098 return VOS_STATUS_E_NOMEM;
8099 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008100 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8101 pWowlEnterParams->magicPtrn,
8102 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8104 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008105 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8106 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8108 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008109 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8110 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008111 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8112 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008113 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8114 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008115 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8116 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8118 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008119#ifdef WLAN_WAKEUP_EVENTS
8120 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8121 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8122
8123 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8124 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8125
8126 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8127 pWowlEnterParams->ucWowNetScanOffloadMatch;
8128
8129 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8130 pWowlEnterParams->ucWowGTKRekeyError;
8131
8132 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8133 pWowlEnterParams->ucWoWBSSConnLoss;
8134#endif // WLAN_WAKEUP_EVENTS
8135
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008136 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8137 pWowlEnterParams->bssIdx;
8138
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008140 /* Store param pointer as passed in by caller */
8141 /* store Params pass it to WDI */
8142 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8143 pWdaParams->pWdaContext = pWDA;
8144 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008145 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008147 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008148 {
8149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8150 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008151 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008152 vos_mem_free(pWdaParams->wdaMsgParam) ;
8153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8154 vos_mem_free(pWdaParams) ;
8155 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008156 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008157
8158}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008159/*
8160 * FUNCTION: WDA_WowlExitReqCallback
8161 *
8162 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008163void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008164{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8166 tWDA_CbContext *pWDA;
8167 tSirHalWowlExitParams *pWowlExitParams;
8168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008169 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008170 if(NULL == pWdaParams)
8171 {
8172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008173 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008174 VOS_ASSERT(0) ;
8175 return ;
8176 }
8177 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8178 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8179
8180 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8181 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8182
8183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8184 vos_mem_free(pWdaParams) ;
8185
Jeff Johnson295189b2012-06-20 16:38:30 -07008186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008187 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008188 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008189 return ;
8190}
Jeff Johnson295189b2012-06-20 16:38:30 -07008191/*
8192 * FUNCTION: WDA_ProcessWowlExitReq
8193 * Request to WDI to add WOWL Bcast pattern
8194 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008195VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8196 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008197{
8198 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008199 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008200 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8201 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8202 sizeof(WDI_WowlExitReqParamsType)) ;
8203 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008205 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008206 if(NULL == wdiWowlExitInfo)
8207 {
8208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008209 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008210 VOS_ASSERT(0);
8211 return VOS_STATUS_E_NOMEM;
8212 }
8213 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8214 if(NULL == pWdaParams)
8215 {
8216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008217 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008218 VOS_ASSERT(0);
8219 vos_mem_free(wdiWowlExitInfo);
8220 return VOS_STATUS_E_NOMEM;
8221 }
8222
8223 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8224 pWowlExitParams->bssIdx;
8225
8226 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8227
8228 /* Store param pointer as passed in by caller */
8229 /* store Params pass it to WDI */
8230 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8231 pWdaParams->pWdaContext = pWDA;
8232 pWdaParams->wdaMsgParam = pWowlExitParams;
8233
8234 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8235 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008236
Jeff Johnson43971f52012-07-17 12:26:56 -07008237 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008238 {
8239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8240 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008241 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8243 vos_mem_free(pWdaParams->wdaMsgParam);
8244 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008245 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008246 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008247}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008248/*
8249 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8250 * Request to WDI to determine whether a given station is capable of
8251 * using HW-based frame translation
8252 */
8253v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8254 tANI_U8 staIdx)
8255{
8256 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8257}
Jeff Johnson295189b2012-06-20 16:38:30 -07008258/*
8259 * FUNCTION: WDA_NvDownloadReqCallback
8260 * send NV Download RSP back to PE
8261 */
8262void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8263 void* pUserData)
8264{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008265
8266 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8267 tWDA_CbContext *pWDA;
8268
Jeff Johnson295189b2012-06-20 16:38:30 -07008269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008270 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008271
8272 if(NULL == pWdaParams)
8273 {
8274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008275 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008276 VOS_ASSERT(0) ;
8277 return ;
8278 }
8279
8280 pWDA = pWdaParams->pWdaContext;
8281
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8284 vos_mem_free(pWdaParams);
8285
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 return ;
8288}
Jeff Johnson295189b2012-06-20 16:38:30 -07008289/*
8290 * FUNCTION: WDA_ProcessNvDownloadReq
8291 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8292 */
8293VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8294{
8295 /* Initialize the local Variables*/
8296 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8297 v_VOID_t *pNvBuffer=NULL;
8298 v_SIZE_t bufferSize = 0;
8299 WDI_Status status = WDI_STATUS_E_FAILURE;
8300 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008301 tWDA_ReqParams *pWdaParams ;
8302
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008304 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 if(NULL == pWDA)
8306 {
8307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008308 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008309 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 return VOS_STATUS_E_FAILURE;
8311 }
8312
8313 /* Get the NV structure base address and size from VOS */
8314 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008315 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8316 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 if(NULL == wdiNvDownloadReqParam)
8318 {
8319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008320 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008321 VOS_ASSERT(0);
8322 return VOS_STATUS_E_NOMEM;
8323 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 /* Copy Params to wdiNvDownloadReqParam*/
8325 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8326 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008327
8328 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8329 if(NULL == pWdaParams)
8330 {
8331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008332 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008333 VOS_ASSERT(0);
8334 vos_mem_free(wdiNvDownloadReqParam);
8335 return VOS_STATUS_E_NOMEM;
8336 }
8337
Jeff Johnson295189b2012-06-20 16:38:30 -07008338 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008339 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8340 pWdaParams->wdaMsgParam = NULL;
8341 pWdaParams->pWdaContext = pWDA;
8342
8343
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008345
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008347 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8348
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 if(IS_WDI_STATUS_FAILURE(status))
8350 {
8351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8352 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8354 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008356 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008357}
8358/*
8359 * FUNCTION: WDA_FlushAcReqCallback
8360 * send Flush AC RSP back to TL
8361 */
8362void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8363{
8364 vos_msg_t wdaMsg = {0} ;
8365 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8366 tFlushACReq *pFlushACReqParams;
8367 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008369 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 if(NULL == pWdaParams)
8371 {
8372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008373 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 VOS_ASSERT(0) ;
8375 return ;
8376 }
8377
8378 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8379 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8380 if(NULL == pFlushACRspParams)
8381 {
8382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008384 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008385 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008386 return ;
8387 }
8388 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8389 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8390 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8391 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8392 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8393 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008394 vos_mem_free(pWdaParams->wdaMsgParam) ;
8395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8396 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8398 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8399 // POST message to TL
8400 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8401
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 return ;
8403}
Jeff Johnson295189b2012-06-20 16:38:30 -07008404/*
8405 * FUNCTION: WDA_ProcessFlushAcReq
8406 * Request to WDI to Update the DELBA REQ params.
8407 */
8408VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8409 tFlushACReq *pFlushAcReqParams)
8410{
8411 WDI_Status status = WDI_STATUS_SUCCESS ;
8412 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8413 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8414 sizeof(WDI_FlushAcReqParamsType)) ;
8415 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 if(NULL == wdiFlushAcReqParam)
8417 {
8418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008419 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 VOS_ASSERT(0);
8421 return VOS_STATUS_E_NOMEM;
8422 }
8423 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8424 if(NULL == pWdaParams)
8425 {
8426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008428 VOS_ASSERT(0);
8429 vos_mem_free(wdiFlushAcReqParam);
8430 return VOS_STATUS_E_NOMEM;
8431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008433 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008434 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8435 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8436 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8437 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 /* Store Flush AC pointer, as this will be used for response */
8439 /* store Params pass it to WDI */
8440 pWdaParams->pWdaContext = pWDA;
8441 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8442 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008443 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8444 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 if(IS_WDI_STATUS_FAILURE(status))
8446 {
8447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8448 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8449 vos_mem_free(pWdaParams->wdaMsgParam) ;
8450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8451 vos_mem_free(pWdaParams) ;
8452 //TODO: respond to TL with failure
8453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008454 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008455}
Jeff Johnson295189b2012-06-20 16:38:30 -07008456/*
8457 * FUNCTION: WDA_BtAmpEventReqCallback
8458 *
8459 */
8460void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8461{
8462 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8463 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008464 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008465
8466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008467 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008468 if(NULL == pWdaParams)
8469 {
8470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008471 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008472 VOS_ASSERT(0) ;
8473 return ;
8474 }
8475 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8476 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8477 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8478 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8479 {
8480 pWDA->wdaAmpSessionOn = VOS_FALSE;
8481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 vos_mem_free(pWdaParams->wdaMsgParam) ;
8483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8484 vos_mem_free(pWdaParams) ;
8485 /*
8486 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8487 * param here
8488 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008489 return ;
8490}
8491
Jeff Johnson295189b2012-06-20 16:38:30 -07008492/*
8493 * FUNCTION: WDA_ProcessBtAmpEventReq
8494 * Request to WDI to Update with BT AMP events.
8495 */
8496VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8497 tSmeBtAmpEvent *pBtAmpEventParams)
8498{
8499 WDI_Status status = WDI_STATUS_SUCCESS ;
8500 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8501 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8502 sizeof(WDI_BtAmpEventParamsType)) ;
8503 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008505 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 if(NULL == wdiBtAmpEventParam)
8507 {
8508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008509 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008510 VOS_ASSERT(0);
8511 return VOS_STATUS_E_NOMEM;
8512 }
8513 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8514 if(NULL == pWdaParams)
8515 {
8516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008517 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008518 VOS_ASSERT(0);
8519 vos_mem_free(wdiBtAmpEventParam);
8520 return VOS_STATUS_E_NOMEM;
8521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008522 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8523 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008524 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 /* Store BT AMP event pointer, as this will be used for response */
8526 /* store Params pass it to WDI */
8527 pWdaParams->pWdaContext = pWDA;
8528 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8529 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008530 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8531 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008532 if(IS_WDI_STATUS_FAILURE(status))
8533 {
8534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8535 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8536 vos_mem_free(pWdaParams->wdaMsgParam) ;
8537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8538 vos_mem_free(pWdaParams) ;
8539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008540 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8541 {
8542 pWDA->wdaAmpSessionOn = VOS_TRUE;
8543 }
8544 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008545}
8546
Jeff Johnson295189b2012-06-20 16:38:30 -07008547/*
8548 * FUNCTION: WDA_FTMCommandReqCallback
8549 * Handle FTM CMD response came from HAL
8550 * Route responce to HDD FTM
8551 */
8552void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8553 void *usrData)
8554{
8555 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008556 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8557 {
8558 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008559 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008560 return;
8561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008562 /* Release Current FTM Command Request */
8563 vos_mem_free(pWDA->wdaFTMCmdReq);
8564 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 /* Post FTM Responce to HDD FTM */
8566 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 return;
8568}
Jeff Johnson295189b2012-06-20 16:38:30 -07008569/*
8570 * FUNCTION: WDA_ProcessFTMCommand
8571 * Send FTM command to WDI
8572 */
8573VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8574 tPttMsgbuffer *pPTTFtmCmd)
8575{
8576 WDI_Status status = WDI_STATUS_SUCCESS;
8577 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008578 ftmCMDReq = (WDI_FTMCommandReqType *)
8579 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8580 if(NULL == ftmCMDReq)
8581 {
8582 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8583 "WDA FTM Command buffer alloc fail");
8584 return VOS_STATUS_E_NOMEM;
8585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8587 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008589 /* Send command to WDI */
8590 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 return status;
8592}
Jeff Johnsone7245742012-09-05 17:12:55 -07008593#ifdef FEATURE_OEM_DATA_SUPPORT
8594/*
8595 * FUNCTION: WDA_StartOemDataReqCallback
8596 *
8597 */
8598void WDA_StartOemDataReqCallback(
8599 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8600 void* pUserData)
8601{
8602 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008603 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8604 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008605 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008606
Jeff Johnsone7245742012-09-05 17:12:55 -07008607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008608 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008609
8610 if(NULL == pWdaParams)
8611 {
8612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008613 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008614 VOS_ASSERT(0) ;
8615 return ;
8616 }
8617 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8618
Jeff Johnsone7245742012-09-05 17:12:55 -07008619 if(NULL == pWDA)
8620 {
8621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008622 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008623 VOS_ASSERT(0);
8624 return ;
8625 }
8626
8627 /*
8628 * Allocate memory for response params sent to PE
8629 */
8630 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8631
8632 // Check if memory is allocated for OemdataMeasRsp Params.
8633 if(NULL == pOemDataRspParams)
8634 {
8635 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8636 "OEM DATA WDA callback alloc fail");
8637 VOS_ASSERT(0) ;
8638 return;
8639 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008640
Jeff Johnsone7245742012-09-05 17:12:55 -07008641 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8643 vos_mem_free(pWdaParams->wdaMsgParam);
8644 vos_mem_free(pWdaParams) ;
8645
Jeff Johnsone7245742012-09-05 17:12:55 -07008646 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08008647 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07008648 * Also, here success always means that we have atleast one BSSID.
8649 */
8650 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8651
8652 //enable Tx
8653 status = WDA_ResumeDataTx(pWDA);
8654 if(status != VOS_STATUS_SUCCESS)
8655 {
8656 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8657 }
8658 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8659 return ;
8660}
8661/*
8662 * FUNCTION: WDA_ProcessStartOemDataReq
8663 * Send Start Oem Data Req to WDI
8664 */
8665VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8666 tStartOemDataReq *pOemDataReqParams)
8667{
8668 WDI_Status status = WDI_STATUS_SUCCESS;
8669 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008670 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008671
8672 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8673
8674 if(NULL == wdiOemDataReqParams)
8675 {
8676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008677 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008678 VOS_ASSERT(0);
8679 return VOS_STATUS_E_NOMEM;
8680 }
8681
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008682 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8683 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8684 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8685 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008686
8687 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8688
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008689 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8690 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008691 {
8692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008693 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008694 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008695 vos_mem_free(pOemDataReqParams);
8696 VOS_ASSERT(0);
8697 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008698 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008699
Bernald44a1ae2013-01-09 08:30:39 -08008700 pWdaParams->pWdaContext = (void*)pWDA;
8701 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
8702 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008703
8704 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8705 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008706
8707 if(IS_WDI_STATUS_FAILURE(status))
8708 {
8709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8710 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8712 vos_mem_free(pWdaParams->wdaMsgParam);
8713 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008714 }
8715 return CONVERT_WDI2VOS_STATUS(status) ;
8716}
8717#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008718/*
8719 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8720 *
8721 */
8722void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8723{
8724 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008726 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008727 if(NULL == pWdaParams)
8728 {
8729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008730 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 VOS_ASSERT(0) ;
8732 return ;
8733 }
8734
8735 if(NULL != pWdaParams->wdaMsgParam)
8736 {
8737 vos_mem_free(pWdaParams->wdaMsgParam);
8738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008739 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8740 {
8741 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8742 }
8743
8744 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008745 return ;
8746}
Jeff Johnson295189b2012-06-20 16:38:30 -07008747#ifdef WLAN_FEATURE_GTK_OFFLOAD
8748/*
8749 * FUNCTION: WDA_HostOffloadReqCallback
8750 *
8751 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008752void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8753 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008754{
8755 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8756
8757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008758 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008759
8760 VOS_ASSERT(NULL != pWdaParams);
8761
8762 vos_mem_free(pWdaParams->wdaMsgParam) ;
8763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8764 vos_mem_free(pWdaParams) ;
8765
8766 //print a msg, nothing else to do
8767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8768 "WDA_GTKOffloadReqCallback invoked " );
8769
8770 return ;
8771}
8772
8773/*
8774 * FUNCTION: WDA_ProcessGTKOffloadReq
8775 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8776 * to broadcast traffic (sta mode).
8777 */
8778VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8779 tpSirGtkOffloadParams pGtkOffloadParams)
8780{
8781 VOS_STATUS status = VOS_STATUS_SUCCESS;
8782 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8783 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8784 sizeof(WDI_GtkOffloadReqMsg)) ;
8785 tWDA_ReqParams *pWdaParams ;
8786
8787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008788 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008789
8790 if(NULL == wdiGtkOffloadReqMsg)
8791 {
8792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008793 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008794 VOS_ASSERT(0);
8795 return VOS_STATUS_E_NOMEM;
8796 }
8797
8798 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8799 if(NULL == pWdaParams)
8800 {
8801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008803 VOS_ASSERT(0);
8804 vos_mem_free(wdiGtkOffloadReqMsg);
8805 return VOS_STATUS_E_NOMEM;
8806 }
8807
8808 //
8809 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8810 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008811
8812 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8813 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8814
Jeff Johnson295189b2012-06-20 16:38:30 -07008815 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8816 // Copy KCK
8817 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8818 // Copy KEK
8819 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8820 // Copy KeyReplayCounter
8821 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8822 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8823
8824 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8825
8826 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8827 (NULL == pWDA->wdaWdiApiMsgParam));
8828
8829 /* Store Params pass it to WDI */
8830 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8831 pWdaParams->pWdaContext = pWDA;
8832 /* Store param pointer as passed in by caller */
8833 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8834
8835 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8836
8837 if(IS_WDI_STATUS_FAILURE(status))
8838 {
8839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8840 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8842 vos_mem_free(pWdaParams->wdaMsgParam);
8843 vos_mem_free(pWdaParams);
8844 }
8845
8846 return CONVERT_WDI2VOS_STATUS(status) ;
8847}
8848
8849/*
8850 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8851 *
8852 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008853void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8854 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008855{
8856 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8857 tWDA_CbContext *pWDA;
8858 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8859 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8860 tANI_U8 i;
8861 vos_msg_t vosMsg;
8862
8863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008864 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008865
8866 VOS_ASSERT(NULL != pWdaParams);
8867
8868 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8869 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8870
8871 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8872 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8873
8874 /* Message Header */
8875 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8876 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8877
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008878 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8879 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8880 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8881 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8882 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8883 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008884
8885 /* VOS message wrapper */
8886 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8887 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8888 vosMsg.bodyval = 0;
8889
8890 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8891 {
8892 /* free the mem and return */
8893 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8894 }
8895
8896 vos_mem_free(pWdaParams->wdaMsgParam) ;
8897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8898 vos_mem_free(pWdaParams) ;
8899}
8900#endif
8901
8902/*
8903 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8904 * Request to WDI to set Tx Per Tracking configurations
8905 */
8906VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8907{
8908 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008909 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008910 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8911 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8912 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8913 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008915 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008916 if(NULL == pwdiSetTxPerTrackingReqParams)
8917 {
8918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008919 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008920 vos_mem_free(pTxPerTrackingParams);
8921 VOS_ASSERT(0);
8922 return VOS_STATUS_E_NOMEM;
8923 }
8924 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8925 if(NULL == pWdaParams)
8926 {
8927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008929 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8930 vos_mem_free(pTxPerTrackingParams);
8931 VOS_ASSERT(0);
8932 return VOS_STATUS_E_NOMEM;
8933 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008934 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
8935 pTxPerTrackingParams->ucTxPerTrackingEnable;
8936 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
8937 pTxPerTrackingParams->ucTxPerTrackingPeriod;
8938 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
8939 pTxPerTrackingParams->ucTxPerTrackingRatio;
8940 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
8941 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07008942 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008943 /* Store param pointer as passed in by caller */
8944 /* store Params pass it to WDI
8945 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
8946 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
8947 pWdaParams->pWdaContext = pWDA;
8948 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008949 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07008950 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008951 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008952 {
8953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8954 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008955 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008956 vos_mem_free(pWdaParams->wdaMsgParam) ;
8957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8958 vos_mem_free(pWdaParams) ;
8959 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008960 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008961
8962}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008963/*
8964 * FUNCTION: WDA_HALDumpCmdCallback
8965 * Send the VOS complete .
8966 */
8967void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
8968 void* pUserData)
8969{
8970 tANI_U8 *buffer = NULL;
8971 tWDA_CbContext *pWDA = NULL;
8972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008973 if(NULL == pWdaParams)
8974 {
8975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008976 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008977 VOS_ASSERT(0) ;
8978 return ;
8979 }
8980
8981 pWDA = pWdaParams->pWdaContext;
8982 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 if(wdiRspParams->usBufferLen > 0)
8984 {
8985 /*Copy the Resp data to UMAC supplied buffer*/
8986 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
8987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8989 vos_mem_free(pWdaParams);
8990
8991 /* Indicate VOSS about the start complete */
8992 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008993 return ;
8994}
8995
Jeff Johnson295189b2012-06-20 16:38:30 -07008996/*
8997 * FUNCTION: WDA_ProcessHALDumpCmdReq
8998 * Send Dump command to WDI
8999 */
9000VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9001 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9002 tANI_U32 arg4, tANI_U8 *pBuffer)
9003{
9004 WDI_Status status = WDI_STATUS_SUCCESS;
9005 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9006 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9007 tWDA_ReqParams *pWdaParams ;
9008 pVosContextType pVosContext = NULL;
9009 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9011 (void *)pMac);
9012
9013 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9014 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 return VOS_STATUS_E_NOMEM;
9019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009020 /* Allocate memory WDI request structure*/
9021 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9022 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9023 if(NULL == wdiHALDumpCmdReqParam)
9024 {
9025 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9026 "WDA HAL DUMP Command buffer alloc fail");
9027 vos_mem_free(pWdaParams);
9028 return WDI_STATUS_E_FAILURE;
9029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009030 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009031 /* Extract the arguments */
9032 wdiHalDumpCmdInfo->command = cmd;
9033 wdiHalDumpCmdInfo->argument1 = arg1;
9034 wdiHalDumpCmdInfo->argument2 = arg2;
9035 wdiHalDumpCmdInfo->argument3 = arg3;
9036 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009038 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9039
9040 /* Response message will be passed through the buffer */
9041 pWdaParams->wdaMsgParam = (void *)pBuffer;
9042
9043 /* store Params pass it to WDI */
9044 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009045 /* Send command to WDI */
9046 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -08009047 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 if ( vStatus != VOS_STATUS_SUCCESS )
9049 {
9050 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9051 {
9052 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -08009053 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 }
9055 else
9056 {
9057 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009058 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 }
9060 VOS_ASSERT(0);
9061 }
9062 return status;
9063}
Jeff Johnson295189b2012-06-20 16:38:30 -07009064#ifdef WLAN_FEATURE_GTK_OFFLOAD
9065/*
9066 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9067 * Request to WDI to get GTK Offload Information
9068 */
9069VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9070 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9071{
9072 VOS_STATUS status = VOS_STATUS_SUCCESS;
9073 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9074 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9075 tWDA_ReqParams *pWdaParams ;
9076
9077 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
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(pwdiGtkOffloadGetInfoReqMsg);
9092 return VOS_STATUS_E_NOMEM;
9093 }
9094
9095 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9096
9097 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9098 (NULL == pWDA->wdaWdiApiMsgParam));
9099
9100 /* Store Params pass it to WDI */
9101 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9102 pWdaParams->pWdaContext = pWDA;
9103 /* Store param pointer as passed in by caller */
9104 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9105
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009106 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9107 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9108
Jeff Johnson295189b2012-06-20 16:38:30 -07009109 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9110
9111 if(IS_WDI_STATUS_FAILURE(status))
9112 {
9113 /* failure returned by WDI API */
9114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9115 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9117 vos_mem_free(pWdaParams) ;
9118 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9119 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9120 }
9121
9122 return CONVERT_WDI2VOS_STATUS(status) ;
9123}
9124#endif // WLAN_FEATURE_GTK_OFFLOAD
9125
9126/*
9127 * -------------------------------------------------------------------------
9128 * DATA interface with WDI for Mgmt Frames
9129 * -------------------------------------------------------------------------
9130 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009131/*
9132 * FUNCTION: WDA_TxComplete
9133 * Callback function for the WDA_TxPacket
9134 */
9135VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9136 VOS_STATUS status )
9137{
9138
9139 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9140 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009141 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009142
9143 if(NULL == wdaContext)
9144 {
9145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9146 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009147 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009148 VOS_ASSERT(0);
9149 return VOS_STATUS_E_FAILURE;
9150 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009151
9152 /*Check if frame was timed out or not*/
9153 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9154 (v_PVOID_t)&uUserData);
9155
9156 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9157 {
9158 /*Discard frame - no further processing is needed*/
9159 vos_pkt_return_packet(pData);
9160 return VOS_STATUS_SUCCESS;
9161 }
9162
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9164 if( NULL!=wdaContext->pTxCbFunc)
9165 {
9166 /*check if packet is freed already*/
9167 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9168 {
9169 wdaContext->pTxCbFunc(pMac, pData);
9170 }
9171 else
9172 {
9173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9174 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009175 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009176 //Return from here since we reaching here because the packet already timeout
9177 return status;
9178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009179 }
9180
9181 /*
9182 * Trigger the event to bring the HAL TL Tx complete function to come
9183 * out of wait
9184 * Let the coe above to complete the packet first. When this event is set,
9185 * the thread waiting for the event may run and set Vospacket_freed causing the original
9186 * packet not being freed.
9187 */
9188 status = vos_event_set(&wdaContext->txFrameEvent);
9189 if(!VOS_IS_STATUS_SUCCESS(status))
9190 {
9191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9192 "NEW VOS Event Set failed - status = %d \n", status);
9193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 return status;
9195}
Jeff Johnson295189b2012-06-20 16:38:30 -07009196/*
9197 * FUNCTION: WDA_TxPacket
9198 * Forward TX management frame to WDI
9199 */
9200VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9201 void *pFrmBuf,
9202 tANI_U16 frmLen,
9203 eFrameType frmType,
9204 eFrameTxDir txDir,
9205 tANI_U8 tid,
9206 pWDATxRxCompFunc pCompFunc,
9207 void *pData,
9208 pWDAAckFnTxComp pAckTxComp,
9209 tANI_U8 txFlag)
9210{
9211 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9212 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9213 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9214 tANI_U8 eventIdx = 0;
9215 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9216 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009217 if((NULL == pWDA)||(NULL == pFrmBuf))
9218 {
9219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9220 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009221 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009222 VOS_ASSERT(0);
9223 return VOS_STATUS_E_FAILURE;
9224 }
9225
9226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9227 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9229 if(NULL == pMac)
9230 {
9231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009232 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009233 VOS_ASSERT(0);
9234 return VOS_STATUS_E_FAILURE;
9235 }
9236
9237
9238
9239 /* store the call back function in WDA context */
9240 pWDA->pTxCbFunc = pCompFunc;
9241 /* store the call back for the function of ackTxComplete */
9242 if( pAckTxComp )
9243 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009244 if( NULL != pWDA->pAckTxCbFunc )
9245 {
9246 /* Already TxComp is active no need to active again */
9247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9248 "There is already one request pending for tx complete\n");
9249 pWDA->pAckTxCbFunc( pMac, 0);
9250 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009251
Jeff Johnsone7245742012-09-05 17:12:55 -07009252 if( VOS_STATUS_SUCCESS !=
9253 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9254 {
9255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9256 "Tx Complete timeout Timer Stop Failed ");
9257 }
9258 else
9259 {
9260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009261 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -07009262 }
9263 }
9264
9265 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9266 pWDA->pAckTxCbFunc = pAckTxComp;
9267 if( VOS_STATUS_SUCCESS !=
9268 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9269 {
9270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9271 "Tx Complete Timer Start Failed ");
9272 pWDA->pAckTxCbFunc = NULL;
9273 return eHAL_STATUS_FAILURE;
9274 }
9275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 /* Reset the event to be not signalled */
9277 status = vos_event_reset(&pWDA->txFrameEvent);
9278 if(!VOS_IS_STATUS_SUCCESS(status))
9279 {
9280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9281 "VOS Event reset failed - status = %d\n",status);
9282 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9283 if( pAckTxComp )
9284 {
9285 pWDA->pAckTxCbFunc = NULL;
9286 if( VOS_STATUS_SUCCESS !=
9287 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9288 {
9289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9290 "Tx Complete timeout Timer Stop Failed ");
9291 }
9292 }
9293 return VOS_STATUS_E_FAILURE;
9294 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009295
9296 /* If Peer Sta mask is set don't overwrite to self sta */
9297 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009299 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009300 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009301 else
9302 {
Ganesh K08bce952012-12-13 15:04:41 -08009303 /* Get system role, use the self station if in unknown role or STA role */
9304 systemRole = wdaGetGlobalSystemRole(pMac);
9305 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9306 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009307#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -08009308 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009309#endif
Ganesh K08bce952012-12-13 15:04:41 -08009310 ))
9311 {
9312 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9313 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009315
Jeff Johnsone7245742012-09-05 17:12:55 -07009316 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9317 disassoc frame reaches the HW, HAL has already deleted the peer station */
9318 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009320 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009321 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 /*Send Probe request frames on self sta idx*/
9324 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 /* Since we donot want probe responses to be retried, send probe responses
9327 through the NO_ACK queues */
9328 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9329 {
9330 //probe response is sent out using self station and no retries options.
9331 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9332 }
9333 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9334 {
9335 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9336 }
9337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009338 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9339
9340 /*Set frame tag to 0
9341 We will use the WDA user data in order to tag a frame as expired*/
9342 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9343 (v_PVOID_t)0);
9344
9345
9346 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9347 frmLen, ucTypeSubType, tid,
9348 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9349 {
9350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9351 "Sending Mgmt Frame failed - status = %d\n", status);
9352 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9353 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9354 if( pAckTxComp )
9355 {
9356 pWDA->pAckTxCbFunc = NULL;
9357 if( VOS_STATUS_SUCCESS !=
9358 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9359 {
9360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9361 "Tx Complete timeout Timer Stop Failed ");
9362 }
9363 }
9364 return VOS_STATUS_E_FAILURE;
9365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009366 /*
9367 * Wait for the event to be set by the TL, to get the response of TX
9368 * complete, this event should be set by the Callback function called by TL
9369 */
9370 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9371 &eventIdx);
9372 if(!VOS_IS_STATUS_SUCCESS(status))
9373 {
9374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9375 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009376 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009377 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9378 after the packet gets completed(packet freed once)*/
9379
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009380 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Gopichand Nakkala0b714452012-12-21 15:34:30 -08009381 WDA_TransportChannelDebug(1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009382
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009383 /*Tag Frame as timed out for later deletion*/
9384 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9385 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9386
Jeff Johnson295189b2012-06-20 16:38:30 -07009387 /* check whether the packet was freed already,so need not free again when
9388 * TL calls the WDA_Txcomplete routine
9389 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009390 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9391 /*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 -07009392 {
9393 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009394 } */
9395
Jeff Johnson295189b2012-06-20 16:38:30 -07009396 if( pAckTxComp )
9397 {
9398 pWDA->pAckTxCbFunc = NULL;
9399 if( VOS_STATUS_SUCCESS !=
9400 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9401 {
9402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9403 "Tx Complete timeout Timer Stop Failed ");
9404 }
9405 }
9406 status = VOS_STATUS_E_FAILURE;
9407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 return status;
9409}
Jeff Johnson295189b2012-06-20 16:38:30 -07009410/*
9411 * FUNCTION: WDA_McProcessMsg
9412 * Trigger DAL-AL to start CFG download
9413 */
9414VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9415{
9416 VOS_STATUS status = VOS_STATUS_SUCCESS;
9417 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009418 if(NULL == pMsg)
9419 {
9420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009421 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009422 VOS_ASSERT(0);
9423 return VOS_STATUS_E_FAILURE;
9424 }
9425
9426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009427 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009428
9429 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9430 if(NULL == pWDA )
9431 {
9432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009433 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009434 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009435 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009436 return VOS_STATUS_E_FAILURE;
9437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009438 /* Process all the WDA messages.. */
9439 switch( pMsg->type )
9440 {
9441 case WNI_CFG_DNLD_REQ:
9442 {
9443 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 /* call WDA complete event if config download success */
9445 if( VOS_IS_STATUS_SUCCESS(status) )
9446 {
9447 vos_WDAComplete_cback(pVosContext);
9448 }
9449 else
9450 {
9451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9452 "WDA Config Download failure" );
9453 }
9454 break ;
9455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009456 /*
9457 * Init SCAN request from PE, convert it into DAL format
9458 * and send it to DAL
9459 */
9460 case WDA_INIT_SCAN_REQ:
9461 {
9462 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9463 break ;
9464 }
9465 /* start SCAN request from PE */
9466 case WDA_START_SCAN_REQ:
9467 {
9468 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9469 break ;
9470 }
9471 /* end SCAN request from PE */
9472 case WDA_END_SCAN_REQ:
9473 {
9474 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9475 break ;
9476 }
9477 /* end SCAN request from PE */
9478 case WDA_FINISH_SCAN_REQ:
9479 {
9480 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9481 break ;
9482 }
9483 /* join request from PE */
9484 case WDA_CHNL_SWITCH_REQ:
9485 {
9486 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9487 {
9488 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9489 }
9490 else
9491 {
9492 WDA_ProcessChannelSwitchReq(pWDA,
9493 (tSwitchChannelParams*)pMsg->bodyptr) ;
9494 }
9495 break ;
9496 }
9497 /* ADD BSS request from PE */
9498 case WDA_ADD_BSS_REQ:
9499 {
9500 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9501 break ;
9502 }
9503 case WDA_ADD_STA_REQ:
9504 {
9505 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9506 break ;
9507 }
9508 case WDA_DELETE_BSS_REQ:
9509 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9511 break ;
9512 }
9513 case WDA_DELETE_STA_REQ:
9514 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9516 break ;
9517 }
9518 case WDA_CONFIG_PARAM_UPDATE_REQ:
9519 {
9520 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9521 break ;
9522 }
9523 case WDA_SET_BSSKEY_REQ:
9524 {
9525 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9526 break ;
9527 }
9528 case WDA_SET_STAKEY_REQ:
9529 {
9530 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9531 break ;
9532 }
9533 case WDA_SET_STA_BCASTKEY_REQ:
9534 {
9535 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9536 break ;
9537 }
9538 case WDA_REMOVE_BSSKEY_REQ:
9539 {
9540 WDA_ProcessRemoveBssKeyReq(pWDA,
9541 (tRemoveBssKeyParams *)pMsg->bodyptr);
9542 break ;
9543 }
9544 case WDA_REMOVE_STAKEY_REQ:
9545 {
9546 WDA_ProcessRemoveStaKeyReq(pWDA,
9547 (tRemoveStaKeyParams *)pMsg->bodyptr);
9548 break ;
9549 }
9550 case WDA_REMOVE_STA_BCASTKEY_REQ:
9551 {
9552 /* TODO: currently UMAC is not sending this request, Add the code for
9553 handling this request when UMAC supports */
9554 break;
9555 }
9556#ifdef FEATURE_WLAN_CCX
9557 case WDA_TSM_STATS_REQ:
9558 {
9559 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9560 break;
9561 }
9562#endif
9563 case WDA_UPDATE_EDCA_PROFILE_IND:
9564 {
9565 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9566 break;
9567 }
9568 case WDA_ADD_TS_REQ:
9569 {
9570 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9571 break;
9572 }
9573 case WDA_DEL_TS_REQ:
9574 {
9575 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9576 break;
9577 }
9578 case WDA_ADDBA_REQ:
9579 {
9580 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9581 break;
9582 }
9583 case WDA_DELBA_IND:
9584 {
9585 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9586 break;
9587 }
9588 case WDA_SET_LINK_STATE:
9589 {
9590 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9591 break;
9592 }
9593 case WDA_GET_STATISTICS_REQ:
9594 {
9595 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9596 break;
9597 }
9598 case WDA_PWR_SAVE_CFG:
9599 {
9600 if(pWDA->wdaState == WDA_READY_STATE)
9601 {
9602 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9603 }
9604 else
9605 {
9606 if(NULL != pMsg->bodyptr)
9607 {
9608 vos_mem_free(pMsg->bodyptr);
9609 }
9610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9611 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9612 }
9613 break;
9614 }
9615 case WDA_ENTER_IMPS_REQ:
9616 {
9617 if(pWDA->wdaState == WDA_READY_STATE)
9618 {
9619 WDA_ProcessEnterImpsReq(pWDA);
9620 }
9621 else
9622 {
9623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9624 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9625 }
9626 break;
9627 }
9628 case WDA_EXIT_IMPS_REQ:
9629 {
9630 if(pWDA->wdaState == WDA_READY_STATE)
9631 {
9632 WDA_ProcessExitImpsReq(pWDA);
9633 }
9634 else
9635 {
9636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9637 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9638 }
9639 break;
9640 }
9641 case WDA_ENTER_BMPS_REQ:
9642 {
9643 if(pWDA->wdaState == WDA_READY_STATE)
9644 {
9645 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9646 }
9647 else
9648 {
9649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9650 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9651 }
9652 break;
9653 }
9654 case WDA_EXIT_BMPS_REQ:
9655 {
9656 if(pWDA->wdaState == WDA_READY_STATE)
9657 {
9658 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9659 }
9660 else
9661 {
9662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9663 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9664 }
9665 break;
9666 }
9667 case WDA_ENTER_UAPSD_REQ:
9668 {
9669 if(pWDA->wdaState == WDA_READY_STATE)
9670 {
9671 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9672 }
9673 else
9674 {
9675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9676 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9677 }
9678 break;
9679 }
9680 case WDA_EXIT_UAPSD_REQ:
9681 {
9682 if(pWDA->wdaState == WDA_READY_STATE)
9683 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009684 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009685 }
9686 else
9687 {
9688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9689 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9690 }
9691 break;
9692 }
9693 case WDA_UPDATE_UAPSD_IND:
9694 {
9695 if(pWDA->wdaState == WDA_READY_STATE)
9696 {
9697 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9698 }
9699 else
9700 {
9701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9702 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9703 }
9704 break;
9705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009706 case WDA_REGISTER_PE_CALLBACK :
9707 {
9708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9709 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9710 /*TODO: store the PE callback */
9711 /* Do Nothing? MSG Body should be freed at here */
9712 if(NULL != pMsg->bodyptr)
9713 {
9714 vos_mem_free(pMsg->bodyptr);
9715 }
9716 break;
9717 }
9718 case WDA_SYS_READY_IND :
9719 {
9720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9721 "Handling msg type WDA_SYS_READY_IND " );
9722 pWDA->wdaState = WDA_READY_STATE;
9723 if(NULL != pMsg->bodyptr)
9724 {
9725 vos_mem_free(pMsg->bodyptr);
9726 }
9727 break;
9728 }
9729 case WDA_BEACON_FILTER_IND :
9730 {
9731 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9732 break;
9733 }
9734 case WDA_BTC_SET_CFG:
9735 {
9736 /*TODO: handle this while dealing with BTC */
9737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9738 "Handling msg type WDA_BTC_SET_CFG " );
9739 /* Do Nothing? MSG Body should be freed at here */
9740 if(NULL != pMsg->bodyptr)
9741 {
9742 vos_mem_free(pMsg->bodyptr);
9743 }
9744 break;
9745 }
9746 case WDA_SIGNAL_BT_EVENT:
9747 {
9748 /*TODO: handle this while dealing with BTC */
9749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9750 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9751 /* Do Nothing? MSG Body should be freed at here */
9752 if(NULL != pMsg->bodyptr)
9753 {
9754 vos_mem_free(pMsg->bodyptr);
9755 }
9756 break;
9757 }
9758 case WDA_CFG_RXP_FILTER_REQ:
9759 {
9760 WDA_ProcessConfigureRxpFilterReq(pWDA,
9761 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9762 break;
9763 }
9764 case WDA_SET_HOST_OFFLOAD:
9765 {
9766 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9767 break;
9768 }
9769 case WDA_SET_KEEP_ALIVE:
9770 {
9771 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9772 break;
9773 }
9774#ifdef WLAN_NS_OFFLOAD
9775 case WDA_SET_NS_OFFLOAD:
9776 {
9777 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9778 break;
9779 }
9780#endif //WLAN_NS_OFFLOAD
9781 case WDA_ADD_STA_SELF_REQ:
9782 {
9783 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9784 break;
9785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009786 case WDA_DEL_STA_SELF_REQ:
9787 {
9788 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9789 break;
9790 }
9791 case WDA_WOWL_ADD_BCAST_PTRN:
9792 {
9793 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9794 break;
9795 }
9796 case WDA_WOWL_DEL_BCAST_PTRN:
9797 {
9798 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9799 break;
9800 }
9801 case WDA_WOWL_ENTER_REQ:
9802 {
9803 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9804 break;
9805 }
9806 case WDA_WOWL_EXIT_REQ:
9807 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009808 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009809 break;
9810 }
9811 case WDA_TL_FLUSH_AC_REQ:
9812 {
9813 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9814 break;
9815 }
9816 case WDA_SIGNAL_BTAMP_EVENT:
9817 {
9818 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9819 break;
9820 }
9821#ifdef WDA_UT
9822 case WDA_WDI_EVENT_MSG:
9823 {
9824 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9825 break ;
9826 }
9827#endif
9828 case WDA_UPDATE_BEACON_IND:
9829 {
9830 WDA_ProcessUpdateBeaconParams(pWDA,
9831 (tUpdateBeaconParams *)pMsg->bodyptr);
9832 break;
9833 }
9834 case WDA_SEND_BEACON_REQ:
9835 {
9836 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9837 break;
9838 }
9839 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9840 {
9841 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9842 (tSendProbeRespParams *)pMsg->bodyptr);
9843 break;
9844 }
9845#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9846 case WDA_SET_MAX_TX_POWER_REQ:
9847 {
9848 WDA_ProcessSetMaxTxPowerReq(pWDA,
9849 (tMaxTxPowerParams *)pMsg->bodyptr);
9850 break;
9851 }
9852#endif
9853#ifdef WLAN_FEATURE_P2P
9854 case WDA_SET_P2P_GO_NOA_REQ:
9855 {
9856 WDA_ProcessSetP2PGONOAReq(pWDA,
9857 (tP2pPsParams *)pMsg->bodyptr);
9858 break;
9859 }
9860#endif
9861 /* timer related messages */
9862 case WDA_TIMER_BA_ACTIVITY_REQ:
9863 {
9864 WDA_BaCheckActivity(pWDA) ;
9865 break ;
9866 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08009867
9868 /* timer related messages */
9869 case WDA_TIMER_TRAFFIC_STATS_IND:
9870 {
9871 WDA_TimerTrafficStatsInd(pWDA);
9872 break;
9873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009874#ifdef WLAN_FEATURE_VOWIFI_11R
9875 case WDA_AGGR_QOS_REQ:
9876 {
9877 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9878 break;
9879 }
9880#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009881 case WDA_FTM_CMD_REQ:
9882 {
9883 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9884 break ;
9885 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009886#ifdef FEATURE_OEM_DATA_SUPPORT
9887 case WDA_START_OEM_DATA_REQ:
9888 {
9889 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9890 break;
9891 }
9892#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 /* Tx Complete Time out Indication */
9894 case WDA_TX_COMPLETE_TIMEOUT_IND:
9895 {
9896 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9897 break;
9898 }
9899 case WDA_WLAN_SUSPEND_IND:
9900 {
9901 WDA_ProcessWlanSuspendInd(pWDA,
9902 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9903 break;
9904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009905 case WDA_WLAN_RESUME_REQ:
9906 {
9907 WDA_ProcessWlanResumeReq(pWDA,
9908 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9909 break;
9910 }
9911
9912 case WDA_UPDATE_CF_IND:
9913 {
9914 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9915 pMsg->bodyptr = NULL;
9916 break;
9917 }
9918#ifdef FEATURE_WLAN_SCAN_PNO
9919 case WDA_SET_PNO_REQ:
9920 {
9921 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9922 break;
9923 }
9924 case WDA_UPDATE_SCAN_PARAMS_REQ:
9925 {
9926 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9927 break;
9928 }
9929 case WDA_SET_RSSI_FILTER_REQ:
9930 {
9931 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
9932 break;
9933 }
9934#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 case WDA_SET_TX_PER_TRACKING_REQ:
9936 {
9937 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
9938 break;
9939 }
9940
9941#ifdef WLAN_FEATURE_PACKET_FILTERING
9942 case WDA_8023_MULTICAST_LIST_REQ:
9943 {
9944 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
9945 break;
9946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
9948 {
9949 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
9950 break;
9951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
9953 {
9954 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
9955 break;
9956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
9958 {
9959 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
9960 break;
9961 }
9962#endif // WLAN_FEATURE_PACKET_FILTERING
9963
9964
9965 case WDA_TRANSMISSION_CONTROL_IND:
9966 {
9967 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
9968 break;
9969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009970 case WDA_SET_POWER_PARAMS_REQ:
9971 {
9972 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
9973 break;
9974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009975#ifdef WLAN_FEATURE_GTK_OFFLOAD
9976 case WDA_GTK_OFFLOAD_REQ:
9977 {
9978 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
9979 break;
9980 }
9981
9982 case WDA_GTK_OFFLOAD_GETINFO_REQ:
9983 {
9984 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
9985 break;
9986 }
9987#endif //WLAN_FEATURE_GTK_OFFLOAD
9988
9989 case WDA_SET_TM_LEVEL_REQ:
9990 {
9991 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
9992 break;
9993 }
Mohit Khanna4a70d262012-09-11 16:30:12 -07009994#ifdef WLAN_FEATURE_11AC
9995 case WDA_UPDATE_OP_MODE:
9996 {
9997 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
9998 {
9999 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10000 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10001 else
10002 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10003 " VHT OpMode Feature is Not Supported \n");
10004 }
10005 else
10006 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10007 " 11AC Feature is Not Supported \n");
10008 break;
10009 }
10010#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010011 default:
10012 {
10013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10014 "No Handling for msg type %x in WDA "
10015 ,pMsg->type);
10016 /* Do Nothing? MSG Body should be freed at here */
10017 if(NULL != pMsg->bodyptr)
10018 {
10019 vos_mem_free(pMsg->bodyptr);
10020 }
10021 //WDA_VOS_ASSERT(0) ;
10022 }
10023 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 return status ;
10025}
10026
Jeff Johnson295189b2012-06-20 16:38:30 -070010027/*
10028 * FUNCTION: WDA_LowLevelIndCallback
10029 * IND API callback from WDI, send Ind to PE
10030 */
10031void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10032 void* pUserData )
10033{
10034 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10035#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10036 tSirRSSINotification rssiNotification;
10037#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010038 if(NULL == pWDA)
10039 {
10040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010041 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 VOS_ASSERT(0);
10043 return ;
10044 }
10045
10046 switch(wdiLowLevelInd->wdiIndicationType)
10047 {
10048 case WDI_RSSI_NOTIFICATION_IND:
10049 {
10050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10051 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010052#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10053 rssiNotification.bReserved =
10054 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10055 rssiNotification.bRssiThres1NegCross =
10056 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10057 rssiNotification.bRssiThres1PosCross =
10058 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10059 rssiNotification.bRssiThres2NegCross =
10060 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10061 rssiNotification.bRssiThres2PosCross =
10062 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10063 rssiNotification.bRssiThres3NegCross =
10064 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10065 rssiNotification.bRssiThres3PosCross =
10066 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080010067 rssiNotification.avgRssi = (v_S7_t)
10068 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070010069 WLANTL_BMPSRSSIRegionChangedNotification(
10070 pWDA->pVosContext,
10071 &rssiNotification);
10072#endif
10073 break ;
10074 }
10075 case WDI_MISSED_BEACON_IND:
10076 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010077 tpSirSmeMissedBeaconInd pMissBeacInd =
10078 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10080 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010082 if(NULL == pMissBeacInd)
10083 {
10084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10085 "%s: VOS MEM Alloc Failure", __func__);
10086 break;
10087 }
10088 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
10089 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
10090 pMissBeacInd->bssIdx =
10091 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
10092 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 break ;
10094 }
10095 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10096 {
10097 /* TODO: Decode Ind and send Ind to PE */
10098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10099 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10100 break ;
10101 }
10102
10103 case WDI_MIC_FAILURE_IND:
10104 {
10105 tpSirSmeMicFailureInd pMicInd =
10106 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10107
10108 if(NULL == pMicInd)
10109 {
10110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010111 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010112 break;
10113 }
10114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10115 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010116 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10117 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10118 vos_mem_copy(pMicInd->bssId,
10119 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10120 sizeof(tSirMacAddr));
10121 vos_mem_copy(pMicInd->info.srcMacAddr,
10122 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10123 sizeof(tSirMacAddr));
10124 vos_mem_copy(pMicInd->info.taMacAddr,
10125 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10126 sizeof(tSirMacAddr));
10127 vos_mem_copy(pMicInd->info.dstMacAddr,
10128 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10129 sizeof(tSirMacAddr));
10130 vos_mem_copy(pMicInd->info.rxMacAddr,
10131 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10132 sizeof(tSirMacAddr));
10133 pMicInd->info.multicast =
10134 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10135 pMicInd->info.keyId=
10136 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10137 pMicInd->info.IV1=
10138 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10139 vos_mem_copy(pMicInd->info.TSC,
10140 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10142 (void *)pMicInd , 0) ;
10143 break ;
10144 }
10145 case WDI_FATAL_ERROR_IND:
10146 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010147 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010148 /* TODO: Decode Ind and send Ind to PE */
10149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10150 "Received WDI_FATAL_ERROR_IND from WDI ");
10151 break ;
10152 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010153 case WDI_DEL_STA_IND:
10154 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010155 tpDeleteStaContext pDelSTACtx =
10156 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10157
10158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10159 "Received WDI_DEL_STA_IND from WDI ");
10160 if(NULL == pDelSTACtx)
10161 {
10162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010164 break;
10165 }
10166 vos_mem_copy(pDelSTACtx->addr2,
10167 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10168 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010169 vos_mem_copy(pDelSTACtx->bssId,
10170 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10171 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010172 pDelSTACtx->assocId =
10173 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10174 pDelSTACtx->reasonCode =
10175 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10176 pDelSTACtx->staId =
10177 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10179 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010180 break ;
10181 }
10182 case WDI_COEX_IND:
10183 {
10184 tANI_U32 index;
10185 vos_msg_t vosMsg;
10186 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10187 if(NULL == pSmeCoexInd)
10188 {
10189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010190 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010191 break;
10192 }
10193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10194 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010195 /* Message Header */
10196 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10197 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010198 /* Info from WDI Indication */
10199 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10200 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10201 {
10202 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10203 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 /* VOS message wrapper */
10205 vosMsg.type = eWNI_SME_COEX_IND;
10206 vosMsg.bodyptr = (void *)pSmeCoexInd;
10207 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 /* Send message to SME */
10209 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10210 {
10211 /* free the mem and return */
10212 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10213 }
10214 else
10215 {
10216 /* DEBUG */
10217 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10218 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10219 pSmeCoexInd->coexIndType,
10220 pSmeCoexInd->coexIndData[0],
10221 pSmeCoexInd->coexIndData[1],
10222 pSmeCoexInd->coexIndData[2],
10223 pSmeCoexInd->coexIndData[3]);
10224 }
10225 break;
10226 }
10227 case WDI_TX_COMPLETE_IND:
10228 {
10229 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10230 /* Calling TxCompleteAck Indication from wda context*/
10231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10232 "Complete Indication received from HAL");
10233 if( pWDA->pAckTxCbFunc )
10234 {
10235 if( VOS_STATUS_SUCCESS !=
10236 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10237 {
10238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10239 "Tx Complete timeout Timer Stop Failed ");
10240 }
10241 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10242 pWDA->pAckTxCbFunc = NULL;
10243 }
10244 else
10245 {
10246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10247 "Tx Complete Indication is received after timeout ");
10248 }
10249 break;
10250 }
10251#ifdef WLAN_FEATURE_P2P
Viral Modid86bde22012-12-10 13:09:21 -080010252 case WDI_P2P_NOA_START_IND :
10253 {
10254 tSirP2PNoaStart *pP2pNoaStart =
10255 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
10256
10257 if (NULL == pP2pNoaStart)
10258 {
10259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10260 "Memory allocation failure, "
10261 "WDI_P2P_NOA_START_IND not forwarded");
10262 break;
10263 }
10264 pP2pNoaStart->status =
10265 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
10266 pP2pNoaStart->bssIdx =
10267 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
10268 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
10269 (void *)pP2pNoaStart , 0) ;
10270 break;
10271 }
10272
Jeff Johnson295189b2012-06-20 16:38:30 -070010273 case WDI_P2P_NOA_ATTR_IND :
10274 {
10275 tSirP2PNoaAttr *pP2pNoaAttr =
10276 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10278 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 if (NULL == pP2pNoaAttr)
10280 {
10281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10282 "Memory allocation failure, "
10283 "WDI_P2P_NOA_ATTR_IND not forwarded");
10284 break;
10285 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010286 pP2pNoaAttr->index =
10287 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10288 pP2pNoaAttr->oppPsFlag =
10289 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10290 pP2pNoaAttr->ctWin =
10291 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10292
10293 pP2pNoaAttr->uNoa1IntervalCnt =
10294 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10295 pP2pNoaAttr->uNoa1Duration =
10296 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10297 pP2pNoaAttr->uNoa1Interval =
10298 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10299 pP2pNoaAttr->uNoa1StartTime =
10300 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010301 pP2pNoaAttr->uNoa2IntervalCnt =
10302 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10303 pP2pNoaAttr->uNoa2Duration =
10304 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10305 pP2pNoaAttr->uNoa2Interval =
10306 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10307 pP2pNoaAttr->uNoa2StartTime =
10308 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010309 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10310 (void *)pP2pNoaAttr , 0) ;
10311 break;
10312 }
10313#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010314#ifdef FEATURE_WLAN_SCAN_PNO
10315 case WDI_PREF_NETWORK_FOUND_IND:
10316 {
10317 vos_msg_t vosMsg;
10318 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10320 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 if (NULL == pPrefNetworkFoundInd)
10322 {
10323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10324 "Memory allocation failure, "
10325 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10326 break;
10327 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 /* Message Header */
10329 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10330 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10331
10332 /* Info from WDI Indication */
10333 pPrefNetworkFoundInd->ssId.length =
10334 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010335 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010336 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10337 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10338 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010339 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 /* VOS message wrapper */
10341 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10342 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10343 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010344 /* Send message to SME */
10345 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10346 {
10347 /* free the mem and return */
10348 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10349 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010350 break;
10351 }
10352#endif // FEATURE_WLAN_SCAN_PNO
10353
10354#ifdef WLAN_WAKEUP_EVENTS
10355 case WDI_WAKE_REASON_IND:
10356 {
10357 vos_msg_t vosMsg;
10358 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10359 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10360 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10361
10362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10363 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10364 wdiLowLevelInd->wdiIndicationType,
10365 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10366 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10367 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10368
10369 if (NULL == pWakeReasonInd)
10370 {
10371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10372 "Memory allocation failure, "
10373 "WDI_WAKE_REASON_IND not forwarded");
10374 break;
10375 }
10376
10377 vos_mem_zero(pWakeReasonInd, allocSize);
10378
10379 /* Message Header */
10380 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10381 pWakeReasonInd->mesgLen = allocSize;
10382
10383 /* Info from WDI Indication */
10384 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10385 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10386 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10387 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10388 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10389 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10390 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10391 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10392
10393 /* VOS message wrapper */
10394 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10395 vosMsg.bodyptr = (void *) pWakeReasonInd;
10396 vosMsg.bodyval = 0;
10397
10398 /* Send message to SME */
10399 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10400 {
10401 /* free the mem and return */
10402 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10403 }
10404
10405 break;
10406 }
10407#endif // WLAN_WAKEUP_EVENTS
10408
10409 case WDI_TX_PER_HIT_IND:
10410 {
10411 vos_msg_t vosMsg;
10412 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10413 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10414 /* VOS message wrapper */
10415 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10416 vosMsg.bodyptr = NULL;
10417 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010418 /* Send message to SME */
10419 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10420 {
10421 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10422 }
10423 break;
10424 }
10425
10426 default:
10427 {
10428 /* TODO error */
10429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10430 "Received UNKNOWN Indication from WDI ");
10431 }
10432 }
10433 return ;
10434}
10435
Jeff Johnson295189b2012-06-20 16:38:30 -070010436/*
10437 * BA related processing in WDA.
10438 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010439void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10440 void* pUserData)
10441{
10442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10443 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010444 if(NULL == pWdaParams)
10445 {
10446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010447 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010448 VOS_ASSERT(0) ;
10449 return ;
10450 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010451 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010452 vos_mem_free(pWdaParams->wdaMsgParam) ;
10453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10454 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010456 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010457 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10458 {
10459 tANI_U8 i = 0 ;
10460 tBaActivityInd *baActivityInd = NULL ;
10461 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10462 tANI_U8 allocSize = sizeof(tBaActivityInd)
10463 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10464 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10465 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010466 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010467 if(NULL == baActivityInd)
10468 {
10469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010471 VOS_ASSERT(0) ;
10472 return;
10473 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010474 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10475 sizeof(tSirMacAddr)) ;
10476 baActivityInd->baCandidateCnt = baCandidateCount ;
10477
10478 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10479 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10480
10481 for(i = 0 ; i < baCandidateCount ; i++)
10482 {
10483 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010484 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10485 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010486 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10487 {
10488 baCandidate->baInfo[tid].fBaEnable =
10489 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10490 baCandidate->baInfo[tid].startingSeqNum =
10491 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10492 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010493 wdiBaCandidate++ ;
10494 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010496 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10497 }
10498 else
10499 {
10500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10501 "BA Trigger RSP with Failure received ");
10502 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010503 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010504}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010505
10506
10507/*
10508 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
10509 * during MCC
10510 */
10511void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
10512{
10513 wpt_uint32 enabled;
10514 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
10515 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
10516 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
10517
10518 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10519 != eSIR_SUCCESS)
10520 {
10521 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10522 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10523 return;
10524 }
10525
10526 if(!enabled)
10527 {
10528 return;
10529 }
10530
10531 if(NULL == pWDA)
10532 {
10533 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10534 "%s:WDA context is NULL", __func__);
10535 VOS_ASSERT(0);
10536 return;
10537 }
10538
10539 if(activate)
10540 {
10541 if( VOS_STATUS_SUCCESS !=
10542 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10543 {
10544 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10545 "Traffic Stats Timer Start Failed ");
10546 return;
10547 }
10548 WDI_DS_ActivateTrafficStats();
10549 }
10550 else
10551 {
10552 WDI_DS_DeactivateTrafficStats();
10553 WDI_DS_ClearTrafficStats();
10554
10555 if( VOS_STATUS_SUCCESS !=
10556 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10557 {
10558 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10559 "Traffic Stats Timer Stop Failed ");
10560 return;
10561 }
10562 }
10563}
10564
10565/*
10566 * Traffic Stats Timer handler
10567 */
10568void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
10569{
10570 WDI_Status wdiStatus;
10571 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
10572 WDI_TrafficStatsIndType trafficStatsIndParams;
10573 wpt_uint32 length, enabled;
10574 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10575
10576 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10577 != eSIR_SUCCESS)
10578 {
10579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10580 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10581 return;
10582 }
10583
10584 if(!enabled)
10585 {
10586 WDI_DS_DeactivateTrafficStats();
10587 return;
10588 }
10589
10590 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
10591
10592 if(pWdiTrafficStats != NULL)
10593 {
10594 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
10595 trafficStatsIndParams.length = length;
10596 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080010597 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010598 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10599 trafficStatsIndParams.pUserData = pWDA;
10600
10601 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
10602
10603 if(WDI_STATUS_PENDING == wdiStatus)
10604 {
10605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10606 "Pending received for %s:%d ",__func__,__LINE__ );
10607 }
10608 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10609 {
10610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10611 "Failure in %s:%d ",__func__,__LINE__ );
10612 }
10613
10614 WDI_DS_ClearTrafficStats();
10615 }
10616 else
10617 {
10618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10619 "pWdiTrafficStats is Null");
10620 }
10621
10622 if( VOS_STATUS_SUCCESS !=
10623 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10624 {
10625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10626 "Traffic Stats Timer Start Failed ");
10627 return;
10628 }
10629}
10630
Jeff Johnson295189b2012-06-20 16:38:30 -070010631/*
10632 * BA Activity check timer handler
10633 */
10634void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10635{
10636 tANI_U8 curSta = 0 ;
10637 tANI_U8 tid = 0 ;
10638 tANI_U8 size = 0 ;
10639 tANI_U8 baCandidateCount = 0 ;
10640 tANI_U8 newBaCandidate = 0 ;
10641 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10642
10643 if(NULL == pWDA)
10644 {
10645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010646 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010647 VOS_ASSERT(0);
10648 return ;
10649 }
10650 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10651 {
10652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10653 "Inconsistent STA entries in WDA");
10654 VOS_ASSERT(0) ;
10655 }
10656 /* walk through all STA entries and find out TX packet count */
10657 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10658 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080010659#ifdef WLAN_SOFTAP_VSTA_FEATURE
10660 // We can only do BA on "hard" STAs.
10661 if (!(IS_HWSTA_IDX(curSta)))
10662 {
10663 continue;
10664 }
10665#endif //WLAN_SOFTAP_VSTA_FEATURE
10666 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10667 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010668 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010669 tANI_U32 txPktCount = 0 ;
10670 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010671 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010672 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10673 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10675 curSta, tid, &txPktCount)))
10676 {
10677#if 0
10678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10679 "************* %d:%d, %d ",curSta, txPktCount,
10680 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10681#endif
10682 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010683 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010684 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10685 curSta, tid)))
10686 {
10687 /* get prepare for sending message to HAL */
10688 //baCandidate[baCandidateCount].staIdx = curSta ;
10689 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10690 newBaCandidate = WDA_ENABLE_BA ;
10691 }
10692 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10693 }
10694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 /* fill the entry for all the sta with given TID's */
10696 if(WDA_ENABLE_BA == newBaCandidate)
10697 {
10698 /* move to next BA candidate */
10699 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
10700 size += sizeof(WDI_TriggerBAReqCandidateType) ;
10701 baCandidateCount++ ;
10702 newBaCandidate = WDA_DISABLE_BA ;
10703 }
10704 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010705 /* prepare and send message to hal */
10706 if( 0 < baCandidateCount)
10707 {
10708 WDI_Status status = WDI_STATUS_SUCCESS ;
10709 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
10710 tWDA_ReqParams *pWdaParams =
10711 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010712 if(NULL == pWdaParams)
10713 {
10714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 VOS_ASSERT(0) ;
10717 return;
10718 }
10719 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
10720 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
10721 if(NULL == wdiTriggerBaReq)
10722 {
10723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010724 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 VOS_ASSERT(0) ;
10726 vos_mem_free(pWdaParams);
10727 return;
10728 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 do
10730 {
10731 WDI_TriggerBAReqinfoType *triggerBaInfo =
10732 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
10733 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
10734 /* TEMP_FIX: Need to see if WDI need check for assoc session for
10735 * for each request */
10736 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
10737 triggerBaInfo->ucBASessionID = 0;
10738 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
10739 } while(0) ;
10740 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
10741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010742 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 pWdaParams->pWdaContext = pWDA;
10744 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
10745 pWdaParams->wdaMsgParam = NULL;
10746 status = WDI_TriggerBAReq(wdiTriggerBaReq,
10747 WDA_TriggerBaReqCallback, pWdaParams) ;
10748 if(IS_WDI_STATUS_FAILURE(status))
10749 {
10750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10751 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
10752 vos_mem_free(pWdaParams->wdaMsgParam) ;
10753 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10754 vos_mem_free(pWdaParams) ;
10755 }
10756 }
10757 else
10758 {
10759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10760 "There is no TID for initiating BA");
10761 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010762 if( VOS_STATUS_SUCCESS !=
10763 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10764 {
10765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10766 "BA Activity Timer Stop Failed ");
10767 return ;
10768 }
10769 if( VOS_STATUS_SUCCESS !=
10770 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10771 {
10772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10773 "BA Activity Timer Start Failed ");
10774 return;
10775 }
10776 return ;
10777}
Jeff Johnson295189b2012-06-20 16:38:30 -070010778/*
10779 * WDA common routine to create timer used by WDA.
10780 */
10781static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
10782{
Jeff Johnson295189b2012-06-20 16:38:30 -070010783 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10784 tANI_U32 val = 0 ;
10785 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10786
10787 if(NULL == pMac)
10788 {
10789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010790 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010791 VOS_ASSERT(0);
10792 return VOS_STATUS_E_FAILURE;
10793 }
10794 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
10795 != eSIR_SUCCESS)
10796 {
10797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10798 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
10799 return VOS_STATUS_E_FAILURE;
10800 }
10801 val = SYS_MS_TO_TICKS(val) ;
10802
10803 /* BA activity check timer */
10804 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
10805 "BA Activity Check timer", WDA_TimerHandler,
10806 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
10807 if(status != TX_SUCCESS)
10808 {
10809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10810 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010811 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010812 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010813 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010814 /* Tx Complete Timeout timer */
10815 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
10816 "Tx Complete Check timer", WDA_TimerHandler,
10817 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010818 if(status != TX_SUCCESS)
10819 {
10820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10821 "Unable to create Tx Complete Timeout timer");
10822 /* Destroy timer of BA activity check timer */
10823 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10824 if(status != TX_SUCCESS)
10825 {
10826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10827 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010828 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010829 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010830 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010831 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010832
10833 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
10834
10835 /* Traffic Stats timer */
10836 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
10837 "Traffic Stats timer", WDA_TimerHandler,
10838 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
10839 if(status != TX_SUCCESS)
10840 {
10841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10842 "Unable to create traffic stats timer");
10843 /* Destroy timer of BA activity check timer */
10844 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10845 if(status != TX_SUCCESS)
10846 {
10847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10848 "Unable to Destroy BA activity timer");
10849 }
10850 /* Destroy timer of tx complete timer */
10851 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10852 if(status != TX_SUCCESS)
10853 {
10854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10855 "Unable to Tx complete timer");
10856 }
10857 return VOS_STATUS_E_FAILURE ;
10858 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010859 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010860}
Jeff Johnson295189b2012-06-20 16:38:30 -070010861/*
10862 * WDA common routine to destroy timer used by WDA.
10863 */
10864static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
10865{
10866 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010867 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10868 if(status != TX_SUCCESS)
10869 {
10870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10871 "Unable to Destroy Tx Complete Timeout timer");
10872 return eSIR_FAILURE ;
10873 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010874 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10875 if(status != TX_SUCCESS)
10876 {
10877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10878 "Unable to Destroy BA activity timer");
10879 return eSIR_FAILURE ;
10880 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010881 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
10882 if(status != TX_SUCCESS)
10883 {
10884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10885 "Unable to Destroy traffic stats timer");
10886 return eSIR_FAILURE ;
10887 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010888 return eSIR_SUCCESS ;
10889}
Jeff Johnson295189b2012-06-20 16:38:30 -070010890/*
10891 * WDA timer handler.
10892 */
10893void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
10894{
10895 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
10896 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010897 /*
10898 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
10899 */
10900 wdaMsg.type = timerInfo ;
10901 wdaMsg.bodyptr = NULL;
10902 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010903 /* post the message.. */
10904 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
10905 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
10906 {
10907 vosStatus = VOS_STATUS_E_BADMSG;
10908 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010909}
Jeff Johnson295189b2012-06-20 16:38:30 -070010910/*
10911 * WDA Tx Complete timeout Indication.
10912 */
10913void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
10914{
10915 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 if( pWDA->pAckTxCbFunc )
10917 {
10918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10919 "TxComplete timer expired\n");
10920 pWDA->pAckTxCbFunc( pMac, 0);
10921 pWDA->pAckTxCbFunc = NULL;
10922 }
10923 else
10924 {
10925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10926 "There is no request pending for TxComplete and wait timer expired\n");
10927 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010928}
Jeff Johnson295189b2012-06-20 16:38:30 -070010929/*
10930 * WDA Set REG Domain to VOS NV
10931 */
10932eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
10933{
10934 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
10935 {
10936 return eHAL_STATUS_INVALID_PARAMETER;
10937 }
10938 return eHAL_STATUS_SUCCESS;
10939}
Jeff Johnson295189b2012-06-20 16:38:30 -070010940
Jeff Johnson295189b2012-06-20 16:38:30 -070010941#ifdef FEATURE_WLAN_SCAN_PNO
10942/*
10943 * FUNCTION: WDA_PNOScanReqCallback
10944 *
10945 */
10946void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
10947{
10948 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010950 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 if(NULL == pWdaParams)
10952 {
10953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010954 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010955 VOS_ASSERT(0) ;
10956 return ;
10957 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 if( pWdaParams != NULL )
10959 {
10960 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10961 {
10962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 if( pWdaParams->wdaMsgParam != NULL)
10965 {
10966 vos_mem_free(pWdaParams->wdaMsgParam);
10967 }
10968
10969 vos_mem_free(pWdaParams) ;
10970 }
10971
10972 return ;
10973}
Jeff Johnson295189b2012-06-20 16:38:30 -070010974/*
10975 * FUNCTION: WDA_UpdateScanParamsCallback
10976 *
10977 */
10978void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
10979{
10980 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010982 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010983 if(NULL == pWdaParams)
10984 {
10985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010986 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010987 VOS_ASSERT(0) ;
10988 return ;
10989 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 if( pWdaParams != NULL )
10991 {
10992 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10993 {
10994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10995 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010996 if( pWdaParams->wdaMsgParam != NULL)
10997 {
10998 vos_mem_free(pWdaParams->wdaMsgParam);
10999 }
11000 vos_mem_free(pWdaParams) ;
11001 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 return ;
11003}
Jeff Johnson295189b2012-06-20 16:38:30 -070011004/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011005 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11006 * Request to WDI to set Preferred Network List.Offload
11007 */
11008VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
11009 tSirPNOScanReq *pPNOScanReqParams)
11010{
Jeff Johnson43971f52012-07-17 12:26:56 -070011011 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011012 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
11013 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
11014 tWDA_ReqParams *pWdaParams ;
11015 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011017 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011018 if(NULL == pwdiPNOScanReqInfo)
11019 {
11020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011021 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011022 VOS_ASSERT(0);
11023 return VOS_STATUS_E_NOMEM;
11024 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011025 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11026 if(NULL == pWdaParams)
11027 {
11028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011029 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011030 VOS_ASSERT(0);
11031 vos_mem_free(pwdiPNOScanReqInfo);
11032 return VOS_STATUS_E_NOMEM;
11033 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011034 //
11035 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
11036 //
11037 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
11038 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070011039 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
11040 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
11041 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
11043 {
11044 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
11045 &pPNOScanReqParams->aNetworks[i],
11046 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
11047 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 /*Scan timer intervals*/
11049 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
11050 &pPNOScanReqParams->scanTimers,
11051 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070011052 /*Probe template for 2.4GHz band*/
11053 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
11054 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11055 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011056 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
11057 pPNOScanReqParams->p24GProbeTemplate,
11058 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 /*Probe template for 5GHz band*/
11060 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
11061 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11062 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011063 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
11064 pPNOScanReqParams->p5GProbeTemplate,
11065 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011066 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011067
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 /* Store Params pass it to WDI */
11069 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
11070 pWdaParams->pWdaContext = pWDA;
11071 /* Store param pointer as passed in by caller */
11072 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011073 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
11074 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 if(IS_WDI_STATUS_FAILURE(status))
11076 {
11077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11078 "Failure in Set PNO REQ WDI API, free all the memory " );
11079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11080 vos_mem_free(pWdaParams->wdaMsgParam);
11081 pWdaParams->wdaWdiApiMsgParam = NULL;
11082 pWdaParams->wdaMsgParam = NULL;
11083 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011084 return CONVERT_WDI2VOS_STATUS(status) ;
11085}
Jeff Johnson295189b2012-06-20 16:38:30 -070011086/*
11087 * FUNCTION: WDA_RssiFilterCallback
11088 *
11089 */
11090void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
11091{
11092 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11093
11094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011095 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011096
11097 VOS_ASSERT(NULL != pWdaParams);
11098
11099 vos_mem_free(pWdaParams->wdaMsgParam) ;
11100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11101 vos_mem_free(pWdaParams) ;
11102
11103 return ;
11104}
11105/*
11106 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11107 * Request to WDI to set Preferred Network List.Offload
11108 */
11109VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
11110 tSirSetRSSIFilterReq* pRssiFilterParams)
11111{
Jeff Johnson43971f52012-07-17 12:26:56 -070011112 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011113 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
11114 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
11115 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011117 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011118 if(NULL == pwdiSetRssiFilterReqInfo)
11119 {
11120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011121 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011122 VOS_ASSERT(0);
11123 return VOS_STATUS_E_NOMEM;
11124 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011125 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11126 if(NULL == pWdaParams)
11127 {
11128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011130 VOS_ASSERT(0);
11131 vos_mem_free(pwdiSetRssiFilterReqInfo);
11132 return VOS_STATUS_E_NOMEM;
11133 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011134 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
11135 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011136
Jeff Johnson295189b2012-06-20 16:38:30 -070011137 /* Store Params pass it to WDI */
11138 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
11139 pWdaParams->pWdaContext = pWDA;
11140 /* Store param pointer as passed in by caller */
11141 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011142 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
11143 (WDI_PNOScanCb)WDA_RssiFilterCallback,
11144 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 if(IS_WDI_STATUS_FAILURE(status))
11146 {
11147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11148 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
11149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11150 vos_mem_free(pWdaParams->wdaMsgParam);
11151 pWdaParams->wdaWdiApiMsgParam = NULL;
11152 pWdaParams->wdaMsgParam = NULL;
11153 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011154 return CONVERT_WDI2VOS_STATUS(status) ;
11155}
11156
Jeff Johnson295189b2012-06-20 16:38:30 -070011157/*
11158 * FUNCTION: WDA_ProcessUpdateScanParams
11159 * Request to WDI to update Scan Parameters
11160 */
11161VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
11162 tSirUpdateScanParams *pUpdateScanParams)
11163{
Jeff Johnson43971f52012-07-17 12:26:56 -070011164 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011165 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
11166 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
11167 sizeof(WDI_UpdateScanParamsInfoType)) ;
11168 tWDA_ReqParams *pWdaParams ;
11169 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011171 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011172 if(NULL == wdiUpdateScanParamsInfoType)
11173 {
11174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011176 VOS_ASSERT(0);
11177 return VOS_STATUS_E_NOMEM;
11178 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011179 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11180 if ( NULL == pWdaParams )
11181 {
11182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011184 VOS_ASSERT(0);
11185 vos_mem_free(wdiUpdateScanParamsInfoType);
11186 return VOS_STATUS_E_NOMEM;
11187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011188 //
11189 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11190 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11192 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11193 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11194 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11195 "sir struct %d wdi struct %d",
11196 pUpdateScanParams->b11dEnabled,
11197 pUpdateScanParams->b11dResolved,
11198 pUpdateScanParams->ucChannelCount,
11199 pUpdateScanParams->usPassiveMinChTime,
11200 pUpdateScanParams->usPassiveMaxChTime,
11201 pUpdateScanParams->usActiveMinChTime,
11202 pUpdateScanParams->usActiveMaxChTime,
11203 sizeof(tSirUpdateScanParams),
11204 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11205
Jeff Johnson295189b2012-06-20 16:38:30 -070011206 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11207 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011208 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11209 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011210 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11211 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11213 pUpdateScanParams->usActiveMaxChTime;
11214 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11215 pUpdateScanParams->usActiveMinChTime;
11216 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11217 pUpdateScanParams->usPassiveMaxChTime;
11218 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11219 pUpdateScanParams->usPassiveMinChTime;
11220
Jeff Johnson295189b2012-06-20 16:38:30 -070011221 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011222 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11223 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011224
Jeff Johnson295189b2012-06-20 16:38:30 -070011225 for ( i = 0; i <
11226 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11227 i++)
11228 {
11229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11230 "Update Scan Parameters channel: %d",
11231 pUpdateScanParams->aChannels[i]);
11232
11233 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11234 pUpdateScanParams->aChannels[i];
11235 }
11236
Jeff Johnson295189b2012-06-20 16:38:30 -070011237 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011238
Jeff Johnson295189b2012-06-20 16:38:30 -070011239 /* Store Params pass it to WDI */
11240 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11241 pWdaParams->pWdaContext = pWDA;
11242 /* Store param pointer as passed in by caller */
11243 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011244
Jeff Johnson295189b2012-06-20 16:38:30 -070011245
11246
11247 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11248 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11249 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011250 if(IS_WDI_STATUS_FAILURE(status))
11251 {
11252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11253 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11255 vos_mem_free(pWdaParams->wdaMsgParam);
11256 vos_mem_free(pWdaParams);
11257 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011258 return CONVERT_WDI2VOS_STATUS(status) ;
11259}
11260#endif // FEATURE_WLAN_SCAN_PNO
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080011261/*
11262 * FUNCTION: WDA_SetPowerParamsCallback
11263 *
11264 */
11265void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
11266{
11267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11268
11269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11270 "<------ %s " ,__func__);
11271
11272 if(NULL == pWdaParams)
11273 {
11274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11275 "%s: pWdaParams received NULL", __func__);
11276 VOS_ASSERT(0);
11277 return;
11278 }
11279 if( pWdaParams != NULL )
11280 {
11281 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11282 {
11283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11284 }
11285 if( pWdaParams->wdaMsgParam != NULL)
11286 {
11287 vos_mem_free(pWdaParams->wdaMsgParam);
11288 }
11289 vos_mem_free(pWdaParams);
11290 }
11291 return;
11292}
11293
Jeff Johnson295189b2012-06-20 16:38:30 -070011294#ifdef WLAN_FEATURE_PACKET_FILTERING
11295/*
11296 * FUNCTION: WDA_8023MulticastListReqCallback
11297 *
11298 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011299void WDA_8023MulticastListReqCallback(
11300 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11301 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011302{
11303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011305 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011306 if(NULL == pWdaParams)
11307 {
11308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011309 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011310 VOS_ASSERT(0) ;
11311 return ;
11312 }
11313
11314 vos_mem_free(pWdaParams->wdaMsgParam) ;
11315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11316 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011317 //print a msg, nothing else to do
11318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11319 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 return ;
11321}
Jeff Johnson295189b2012-06-20 16:38:30 -070011322/*
11323 * FUNCTION: WDA_Process8023MulticastListReq
11324 * Request to WDI to add 8023 Multicast List
11325 */
11326VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11327 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11328{
Jeff Johnson43971f52012-07-17 12:26:56 -070011329 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011330 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11331 tWDA_ReqParams *pWdaParams ;
11332 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011334 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 pwdiFltPktSetMcListReqParamsType =
11336 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11337 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11338 ) ;
11339 if(NULL == pwdiFltPktSetMcListReqParamsType)
11340 {
11341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011342 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011343 return VOS_STATUS_E_NOMEM;
11344 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11346 if(NULL == pWdaParams)
11347 {
11348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011350 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11351 return VOS_STATUS_E_NOMEM;
11352 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011353
Jeff Johnson295189b2012-06-20 16:38:30 -070011354 //
11355 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11356 //
11357 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011358 pRcvFltMcAddrList->ulMulticastAddrCnt;
11359
11360 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11361 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11362 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11363 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11364
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11366 {
11367 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11368 &(pRcvFltMcAddrList->multicastAddr[i]),
11369 sizeof(tSirMacAddr));
11370 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011372
Jeff Johnson295189b2012-06-20 16:38:30 -070011373 /* Store Params pass it to WDI */
11374 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11375 pWdaParams->pWdaContext = pWDA;
11376 /* Store param pointer as passed in by caller */
11377 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011378 status = WDI_8023MulticastListReq(
11379 pwdiFltPktSetMcListReqParamsType,
11380 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11381 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011382 if(IS_WDI_STATUS_FAILURE(status))
11383 {
11384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11385 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11386 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11387 vos_mem_free(pWdaParams->wdaMsgParam);
11388 vos_mem_free(pWdaParams);
11389 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011390 return CONVERT_WDI2VOS_STATUS(status) ;
11391}
Jeff Johnson295189b2012-06-20 16:38:30 -070011392/*
11393 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11394 *
11395 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011396void WDA_ReceiveFilterSetFilterReqCallback(
11397 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11398 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011399{
11400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011402 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011403 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 if(NULL == pWdaParams)
11405 {
11406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011407 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011408 VOS_ASSERT(0) ;
11409 return ;
11410 }
11411
11412 vos_mem_free(pWdaParams->wdaMsgParam) ;
11413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11414 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011415 //print a msg, nothing else to do
11416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11417 "WDA_ReceiveFilterSetFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 return ;
11419}
Jeff Johnson295189b2012-06-20 16:38:30 -070011420/*
11421 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11422 * Request to WDI to set Receive Filters
11423 */
11424VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11425 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11426{
Jeff Johnson43971f52012-07-17 12:26:56 -070011427 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11429 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11430 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11431 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11432 tWDA_ReqParams *pWdaParams ;
11433 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011435 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11437 {
11438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011440 VOS_ASSERT(0);
11441 return VOS_STATUS_E_NOMEM;
11442 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011443 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11444 if(NULL == pWdaParams)
11445 {
11446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011448 VOS_ASSERT(0);
11449 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11450 return VOS_STATUS_E_NOMEM;
11451 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011452 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11453 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11454 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11455 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011456 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11457 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11458
11459 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11460 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011461
11462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11463 "FID %d FT %d NParams %d CT %d",
11464 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11465 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11466 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11467 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011468 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11469 {
11470 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11471 &pRcvPktFilterCfg->paramsData[i],
11472 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11474 "Proto %d Comp Flag %d \n",
11475 pwdiSetRcvPktFilterReqParamsType->
11476 wdiPktFilterCfg.paramsData[i].protocolLayer,
11477 pwdiSetRcvPktFilterReqParamsType->
11478 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11480 "Data Offset %d Data Len %d\n",
11481 pwdiSetRcvPktFilterReqParamsType->
11482 wdiPktFilterCfg.paramsData[i].dataOffset,
11483 pwdiSetRcvPktFilterReqParamsType->
11484 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11486 "CData: %d:%d:%d:%d:%d:%d\n",
11487 pwdiSetRcvPktFilterReqParamsType->
11488 wdiPktFilterCfg.paramsData[i].compareData[0],
11489 pwdiSetRcvPktFilterReqParamsType->
11490 wdiPktFilterCfg.paramsData[i].compareData[1],
11491 pwdiSetRcvPktFilterReqParamsType->
11492 wdiPktFilterCfg.paramsData[i].compareData[2],
11493 pwdiSetRcvPktFilterReqParamsType->
11494 wdiPktFilterCfg.paramsData[i].compareData[3],
11495 pwdiSetRcvPktFilterReqParamsType->
11496 wdiPktFilterCfg.paramsData[i].compareData[4],
11497 pwdiSetRcvPktFilterReqParamsType->
11498 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11500 "MData: %d:%d:%d:%d:%d:%d\n",
11501 pwdiSetRcvPktFilterReqParamsType->
11502 wdiPktFilterCfg.paramsData[i].dataMask[0],
11503 pwdiSetRcvPktFilterReqParamsType->
11504 wdiPktFilterCfg.paramsData[i].dataMask[1],
11505 pwdiSetRcvPktFilterReqParamsType->
11506 wdiPktFilterCfg.paramsData[i].dataMask[2],
11507 pwdiSetRcvPktFilterReqParamsType->
11508 wdiPktFilterCfg.paramsData[i].dataMask[3],
11509 pwdiSetRcvPktFilterReqParamsType->
11510 wdiPktFilterCfg.paramsData[i].dataMask[4],
11511 pwdiSetRcvPktFilterReqParamsType->
11512 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011514 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 /* Store Params pass it to WDI */
11516 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11517 pWdaParams->pWdaContext = pWDA;
11518 /* Store param pointer as passed in by caller */
11519 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011520 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
11521 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterReqCallback,
11522 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011523 if(IS_WDI_STATUS_FAILURE(status))
11524 {
11525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11526 "Failure in SetFilter(),free all the memory,status %d ",status);
11527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11528 vos_mem_free(pWdaParams->wdaMsgParam);
11529 vos_mem_free(pWdaParams);
11530 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011531 return CONVERT_WDI2VOS_STATUS(status) ;
11532}
Jeff Johnson295189b2012-06-20 16:38:30 -070011533/*
11534 * FUNCTION: WDA_FilterMatchCountReqCallback
11535 *
11536 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011537void WDA_FilterMatchCountReqCallback(
11538 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11539 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011540{
11541 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11542 tWDA_CbContext *pWDA;
11543 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11544 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11545 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11546 tANI_U8 i;
11547 vos_msg_t vosMsg;
11548
11549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011550 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11552
Jeff Johnsone7245742012-09-05 17:12:55 -070011553 if(NULL == pRcvFltPktMatchCntRsp)
11554 {
11555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011556 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011557 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011558 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011559 return ;
11560 }
11561
Jeff Johnson295189b2012-06-20 16:38:30 -070011562 if(NULL == pWdaParams)
11563 {
11564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011565 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011566 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011567 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011568 return ;
11569 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011570 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11571 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011572 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11573 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11574
11575 /* Message Header */
11576 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11577 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11578
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011579 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011580
11581 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11582 {
11583 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11584 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11585 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011586 /* VOS message wrapper */
11587 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11588 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11589 vosMsg.bodyval = 0;
11590 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11591 {
11592 /* free the mem and return */
11593 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11594 }
11595
11596 vos_mem_free(pWdaParams->wdaMsgParam) ;
11597 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11598 vos_mem_free(pWdaParams) ;
11599}
Jeff Johnson295189b2012-06-20 16:38:30 -070011600/*
11601 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11602 * Request to WDI to get PC Filter Match Count
11603 */
11604VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11605{
Jeff Johnson43971f52012-07-17 12:26:56 -070011606 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011607 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11608 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11609 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011611 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011612 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11613 {
11614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011616 VOS_ASSERT(0);
11617 return VOS_STATUS_E_NOMEM;
11618 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011619 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11620 if(NULL == pWdaParams)
11621 {
11622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011624 VOS_ASSERT(0);
11625 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11626 return VOS_STATUS_E_NOMEM;
11627 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011628
Jeff Johnson295189b2012-06-20 16:38:30 -070011629 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11630
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011631 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11632 pRcvFltPktMatchRsp->bssId,
11633 sizeof(wpt_macAddr));
11634
Jeff Johnson295189b2012-06-20 16:38:30 -070011635 /* Store Params pass it to WDI */
11636 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11637 pWdaParams->pWdaContext = pWDA;
11638 /* Store param pointer as passed in by caller */
11639 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11641 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11642 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011643 if(IS_WDI_STATUS_FAILURE(status))
11644 {
11645 /* failure returned by WDI API */
11646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11647 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11649 vos_mem_free(pWdaParams) ;
11650 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11651 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011653 return CONVERT_WDI2VOS_STATUS(status) ;
11654}
Jeff Johnson295189b2012-06-20 16:38:30 -070011655/*
11656 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11657 *
11658 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011659void WDA_ReceiveFilterClearFilterReqCallback(
11660 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11661 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011662{
11663 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011665 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011666/* WDA_VOS_ASSERT(NULL != pWdaParams); */
11667 if(NULL == pWdaParams)
11668 {
11669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011670 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 VOS_ASSERT(0) ;
11672 return ;
11673 }
11674
11675 vos_mem_free(pWdaParams->wdaMsgParam) ;
11676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11677 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 //print a msg, nothing else to do
11679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11680 "WDA_ReceiveFilterClearFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011681 return ;
11682}
Jeff Johnson295189b2012-06-20 16:38:30 -070011683/*
11684 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
11685 * Request to WDI to clear Receive Filters
11686 */
11687VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
11688 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
11689{
Jeff Johnson43971f52012-07-17 12:26:56 -070011690 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011691 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
11692 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
11693 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011695 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011696 if(NULL == pwdiRcvFltPktClearReqParamsType)
11697 {
11698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011699 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011700 VOS_ASSERT(0);
11701 return VOS_STATUS_E_NOMEM;
11702 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011703 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11704 if(NULL == pWdaParams)
11705 {
11706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011708 VOS_ASSERT(0);
11709 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
11710 return VOS_STATUS_E_NOMEM;
11711 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011712 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
11713 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070011714 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
11715 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
11716 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
11717 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011718
11719 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011720 /* Store Params pass it to WDI */
11721 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
11722 pWdaParams->pWdaContext = pWDA;
11723 /* Store param pointer as passed in by caller */
11724 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011725 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
11726 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterReqCallback,
11727 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011728 if(IS_WDI_STATUS_FAILURE(status))
11729 {
11730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11731 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
11732 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080011733 vos_mem_free(pWdaParams->wdaMsgParam);
11734 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011735 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011736 return CONVERT_WDI2VOS_STATUS(status) ;
11737}
11738#endif // WLAN_FEATURE_PACKET_FILTERING
11739
Jeff Johnson295189b2012-06-20 16:38:30 -070011740/*
11741 * FUNCTION: WDA_ProcessSetPowerParamsReq
11742 * Request to WDI to set power params
11743 */
11744VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
11745 tSirSetPowerParamsReq *pPowerParams)
11746{
Jeff Johnson43971f52012-07-17 12:26:56 -070011747 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011748 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
11749 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011750 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011752 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011753 if(NULL == pwdiSetPowerParamsReqInfo)
11754 {
11755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011756 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011757 VOS_ASSERT(0);
11758 return VOS_STATUS_E_NOMEM;
11759 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011760 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11761 if(NULL == pWdaParams)
11762 {
11763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011764 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011765 VOS_ASSERT(0);
11766 vos_mem_free(pwdiSetPowerParamsReqInfo);
11767 return VOS_STATUS_E_NOMEM;
11768 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011769
Jeff Johnson295189b2012-06-20 16:38:30 -070011770
11771 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
11772 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011773 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
11774 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
11776 pPowerParams->uListenInterval;
11777 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
11778 pPowerParams->uBcastMcastFilter;
11779 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
11780 pPowerParams->uEnableBET;
11781 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
11782 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070011783 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011784
Jeff Johnson295189b2012-06-20 16:38:30 -070011785 /* Store Params pass it to WDI */
11786 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
11787 pWdaParams->pWdaContext = pWDA;
11788 /* Store param pointer as passed in by caller */
11789 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011790 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
11791 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
11792 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011793 if(IS_WDI_STATUS_FAILURE(status))
11794 {
11795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11796 "Failure in Set power params REQ WDI API, free all the memory " );
11797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11798 vos_mem_free(pWdaParams->wdaMsgParam);
11799 pWdaParams->wdaWdiApiMsgParam = NULL;
11800 pWdaParams->wdaMsgParam = NULL;
11801 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011802 return CONVERT_WDI2VOS_STATUS(status) ;
11803}
11804
11805/*
11806 * FUNCTION: WDA_SetTmLevelRspCallback
11807 * Set TM Level response
11808 */
11809void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
11810{
11811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11812
11813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011814 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011815
11816 if(NULL == pWdaParams)
11817 {
11818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011819 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011820 VOS_ASSERT(0) ;
11821 return ;
11822 }
11823
11824 /* Dose not need to send notification to upper layer
11825 * Just free allocated resources */
11826 if( pWdaParams != NULL )
11827 {
11828 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11829 {
11830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11831 }
11832 vos_mem_free(pWdaParams->wdaMsgParam) ;
11833 vos_mem_free(pWdaParams) ;
11834 }
11835}
11836
11837/*
11838 * FUNCTION: WDA_ProcessSetTmLevelReq
11839 * Set TM Level request
11840 */
11841VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
11842 tAniSetTmLevelReq *setTmLevelReq)
11843{
11844 WDI_Status status = WDI_STATUS_SUCCESS ;
11845 tWDA_ReqParams *pWdaParams ;
11846 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
11847 (WDI_SetTmLevelReqType *)vos_mem_malloc(
11848 sizeof(WDI_SetTmLevelReqType)) ;
11849 if(NULL == wdiSetTmLevelReq)
11850 {
11851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011852 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011853 VOS_ASSERT(0);
11854 return VOS_STATUS_E_NOMEM;
11855 }
11856
11857 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11858 if(NULL == pWdaParams)
11859 {
11860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011861 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011862 VOS_ASSERT(0);
11863 vos_mem_free(wdiSetTmLevelReq);
11864 return VOS_STATUS_E_NOMEM;
11865 }
11866
11867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011868 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011869
11870 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
11871 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
11872
11873 pWdaParams->pWdaContext = pWDA;
11874 pWdaParams->wdaMsgParam = setTmLevelReq;
11875 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
11876
11877 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
11878 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
11879
11880 if(IS_WDI_STATUS_FAILURE(status))
11881 {
11882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080011883 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070011884 vos_mem_free(pWdaParams->wdaMsgParam) ;
11885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11886 vos_mem_free(pWdaParams) ;
11887 }
11888
11889 return CONVERT_WDI2VOS_STATUS(status) ;
11890}
11891
11892VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
11893 tpTxControlParams pTxCtrlParam)
11894{
11895 VOS_STATUS wdaStatus;
11896
11897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011898 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011899 if( pTxCtrlParam == NULL )
11900 {
11901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011902 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011903 return VOS_STATUS_E_FAILURE;
11904 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011905 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
11906 {
11907 wdaStatus = WDA_SuspendDataTx(pWDA);
11908 }
11909 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
11910 {
11911 wdaStatus = WDA_ResumeDataTx(pWDA);
11912 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011913 return wdaStatus;
11914}
11915
11916 /* FUNCTION WDA_featureCapsExchange
11917 * WDA API to invoke capability exchange between host and FW.
11918 */
11919void WDA_featureCapsExchange(v_PVOID_t pVosContext)
11920{
11921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011922 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011923 WDI_featureCapsExchangeReq( NULL, pVosContext);
11924}
11925
Yathish9f22e662012-12-10 14:21:35 -080011926/* FUNCTION WDA_disableCapablityFeature
11927 * WDA API to diable Active mode offload in host.
11928 */
11929void WDA_disableCapablityFeature(tANI_U8 feature_index)
11930{
11931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11932 "%s:enter", __func__ );
11933 WDI_disableCapablityFeature(feature_index);
11934}
11935
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 /* FUNCTION WDA_getHostWlanFeatCaps
11937 * Wrapper for WDI API, that will return if the feature (enum value).passed
11938 * to this API is supported or not in Host
11939 * return value
11940 * 0 - implies feature is NOT Supported
11941 * any non zero value - implies feature is SUPPORTED
11942 */
11943tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
11944{
11945 return WDI_getHostWlanFeatCaps(featEnumValue);
11946}
11947
11948 /* FUNCTION WDA_getFwWlanFeatCaps
11949 * Wrapper for WDI API, that will return if the feature (enum value).passed
11950 * to this API is supported or not in FW
11951 * return value
11952 * 0 - implies feature is NOT Supported
11953 * any non zero value - implies feature is SUPPORTED
11954 */
11955tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
11956{
11957 return WDI_getFwWlanFeatCaps(featEnumValue);
11958}
11959
11960/*
11961 * FUNCTION: WDA_shutdown
11962 * Shutdown WDA/WDI without handshaking with Riva.
11963 * Synchronous function.
11964 */
11965VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
11966{
11967 WDI_Status wdiStatus;
11968 //tANI_U8 eventIdx = 0;
11969 VOS_STATUS status = VOS_STATUS_SUCCESS;
11970 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011971 if (NULL == pWDA)
11972 {
11973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011974 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011975 VOS_ASSERT(0);
11976 return VOS_STATUS_E_FAILURE;
11977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011978 /* FTM mode stay START_STATE */
11979 if( (WDA_READY_STATE != pWDA->wdaState) &&
11980 (WDA_INIT_STATE != pWDA->wdaState) &&
11981 (WDA_START_STATE != pWDA->wdaState) )
11982 {
11983 VOS_ASSERT(0);
11984 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011985
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011986 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
11987 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 {
11989 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011990 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011991 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011992
Jeff Johnson295189b2012-06-20 16:38:30 -070011993 /* call WDI shutdown */
11994 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070011995 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
11996 {
11997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11998 "error in WDA Stop" );
11999 status = VOS_STATUS_E_FAILURE;
12000 }
12001 /* WDI stop is synchrnous, shutdown is complete when it returns */
12002 pWDA->wdaState = WDA_STOP_STATE;
12003
Jeff Johnson295189b2012-06-20 16:38:30 -070012004 /* shutdown should perform the stop & close actions. */
12005 /* Destroy the event */
12006 status = vos_event_destroy(&pWDA->txFrameEvent);
12007 if(!VOS_IS_STATUS_SUCCESS(status))
12008 {
12009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12010 "VOS Event destroy failed - status = %d\n", status);
12011 status = VOS_STATUS_E_FAILURE;
12012 }
12013 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
12014 if(!VOS_IS_STATUS_SUCCESS(status))
12015 {
12016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12017 "VOS Event destroy failed - status = %d\n", status);
12018 status = VOS_STATUS_E_FAILURE;
12019 }
12020 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
12021 if(!VOS_IS_STATUS_SUCCESS(status))
12022 {
12023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12024 "VOS Event destroy failed - status = %d\n", status);
12025 status = VOS_STATUS_E_FAILURE;
12026 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012027 /* free WDA context */
12028 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
12029 if ( !VOS_IS_STATUS_SUCCESS(status) )
12030 {
12031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12032 "error in WDA close " );
12033 status = VOS_STATUS_E_FAILURE;
12034 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012035 return status;
12036}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012037
Jeff Johnsone7245742012-09-05 17:12:55 -070012038/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012039 * FUNCTION: WDA_setNeedShutdown
12040 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070012041 */
12042
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012043void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070012044{
12045 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012046 if(pWDA == NULL)
12047 {
12048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12049 "Could not get the WDA Context pointer" );
12050 return;
12051 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012052 pWDA->needShutdown = TRUE;
12053}
12054/*
12055 * FUNCTION: WDA_needShutdown
12056 * WDA needs a shutdown
12057 */
12058
12059v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
12060{
12061 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012062 if(pWDA == NULL)
12063 {
12064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12065 "Could not get the WDA Context pointer" );
12066 return 0;
12067 }
12068 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070012069}
12070
Mohit Khanna4a70d262012-09-11 16:30:12 -070012071#ifdef WLAN_FEATURE_11AC
12072/*
12073 * FUNCTION: WDA_SetBeaconFilterReqCallback
12074 *
12075 */
12076void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
12077{
12078 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012080 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012081 if(NULL == pWdaParams)
12082 {
12083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012084 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012085 VOS_ASSERT(0) ;
12086 return ;
12087 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012088
Mohit Khanna4a70d262012-09-11 16:30:12 -070012089 vos_mem_free(pWdaParams->wdaMsgParam) ;
12090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12091 vos_mem_free(pWdaParams) ;
12092 /*
12093 * No respone required for SetBeaconFilter req so just free the request
12094 * param here
12095 */
12096
12097 return ;
12098}
12099
12100VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
12101 tUpdateVHTOpMode *pData)
12102{
12103 WDI_Status status = WDI_STATUS_SUCCESS ;
12104 tWDA_ReqParams *pWdaParams ;
12105 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
12106 sizeof(WDI_UpdateVHTOpMode)) ;
12107 if(NULL == wdiTemp)
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__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012111 VOS_ASSERT(0);
12112 return VOS_STATUS_E_NOMEM;
12113 }
12114 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__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012119 VOS_ASSERT(0);
12120 vos_mem_free(wdiTemp);
12121 return VOS_STATUS_E_NOMEM;
12122 }
12123
12124 wdiTemp->opMode = pData->opMode;
12125 wdiTemp->staId = pData->staId;
12126
12127 pWdaParams->pWdaContext = pWDA;
12128 /* Store Req pointer, as this will be used for response */
12129 pWdaParams->wdaMsgParam = (void *)pData;
12130 /* store Params pass it to WDI */
12131 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
12132
12133 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
12134
12135 if(IS_WDI_STATUS_FAILURE(status))
12136 {
12137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12138 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
12139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12140 vos_mem_free(pWdaParams->wdaMsgParam);
12141 vos_mem_free(pWdaParams);
12142 }
12143 return CONVERT_WDI2VOS_STATUS(status) ;
12144}
12145#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012146
12147/*==========================================================================
12148 FUNCTION WDA_TransportChannelDebug
12149
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070012150 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012151 Display Transport Channel debugging information
12152 User may request to display DXE channel snapshot
12153 Or if host driver detects any abnormal stcuk may display
12154
12155 PARAMETERS
Jeff Johnsonb88db982012-12-10 13:34:59 -080012156 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012157 enableStallDetect : Enable stall detect feature
12158 This feature will take effect to data performance
12159 Not integrate till fully verification
12160
12161 RETURN VALUE
12162 NONE
12163
12164===========================================================================*/
12165void WDA_TransportChannelDebug
12166(
12167 v_BOOL_t displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012168 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012169)
12170{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012171 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012172 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012173}