blob: 249d78b76b0fe30444539e4f9b61dfa4dad8c1bb [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -0700148/* forward declarations */
149void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
150 void *pBodyptr, tANI_U32 bodyVal) ;
151VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
152 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700153VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
154VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
155
156extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
157 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
158void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
159 tANI_U32 *pConfig) ;
160void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
161 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
162void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
163 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
164void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
165 void* pUserData ) ;
166static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
167static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
168void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800169void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700170void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700171#ifdef WLAN_FEATURE_VOWIFI_11R
172VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
173#endif /* WLAN_FEATURE_VOWIFI_11R */
174
Jeff Johnson295189b2012-06-20 16:38:30 -0700175void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
176void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
177VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700178#ifdef FEATURE_WLAN_SCAN_PNO
179static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
180static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
181static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
182#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -0700183#ifdef WLAN_FEATURE_PACKET_FILTERING
184static VOS_STATUS WDA_Process8023MulticastListReq (
185 tWDA_CbContext *pWDA,
186 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
187 );
188static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
189 tWDA_CbContext *pWDA,
190 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
191 );
192static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
193 tWDA_CbContext *pWDA,
194 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvFltPktClearParam *pRcvFltPktClearParam
199 );
200#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700202static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
203 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700204VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
205 v_U8_t *pDefaultKeyId,
206 v_U8_t *pNumKeys,
207 WDI_KeysType *pWdiKeys );
208
209#ifdef WLAN_FEATURE_GTK_OFFLOAD
210static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
211static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
212#endif // WLAN_FEATURE_GTK_OFFLOAD
213
214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700220/*
221 * FUNCTION: WDA_open
222 * Allocate the WDA context
223 */
224VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
225 tMacOpenParameters *pMacParams )
226{
227 tWDA_CbContext *wdaContext;
228 VOS_STATUS status;
229 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700230 /* Allocate WDA context */
231 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
232 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
233 if(!VOS_IS_STATUS_SUCCESS(status))
234 {
235 return VOS_STATUS_E_NOMEM;
236 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700237 /*__asm int 3;*/
238 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
239
240 /* Initialize data structures */
241 wdaContext->pVosContext = pVosContext;
242 wdaContext->wdaState = WDA_INIT_STATE;
243 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
244
245 /* Initialize WDA-WDI synchronization event */
246 status = vos_event_init(&wdaContext->wdaWdiEvent);
247 if(!VOS_IS_STATUS_SUCCESS(status))
248 {
249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
250 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800251 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700252 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700253 /* Init Frame transfer event */
254 status = vos_event_init(&wdaContext->txFrameEvent);
255 if(!VOS_IS_STATUS_SUCCESS(status))
256 {
257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
258 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800259 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700260 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700261 status = vos_event_init(&wdaContext->suspendDataTxEvent);
262 if(!VOS_IS_STATUS_SUCCESS(status))
263 {
264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
265 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800266 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700267 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
269 if(!VOS_IS_STATUS_SUCCESS(status))
270 {
271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
272 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800273 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 wdaContext->driverMode = pMacParams->driverType;
277 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
278 &wdiDevCapability, pMacParams->driverType))
279 {
280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
281 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800282 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700283 }
284 else
285 {
286 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
287 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
288 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700289 /* update max STA in WDA used for BA */
290 wdaContext->wdaMaxSta = pMacParams->maxStation;
291 /* store the frameTransRequired flag in wdaContext, to send this to HAL
292 * in WDA_Start
293 */
294 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
295 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800297
298error:
299 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
300 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700301}
302
Jeff Johnson295189b2012-06-20 16:38:30 -0700303/*
304 * FUNCTION: WDA_preStart
305 * Trigger DAL-AL to start CFG download
306 */
307VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
308{
309 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
310 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700311 /*
312 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
313 */
314 wdaMsg.type = WNI_CFG_DNLD_REQ ;
315 wdaMsg.bodyptr = NULL;
316 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700317 /* post the message.. */
318 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
319 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
320 {
321 vosStatus = VOS_STATUS_E_BADMSG;
322 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700323 return( vosStatus );
324}
Jeff Johnson295189b2012-06-20 16:38:30 -0700325/*
326 * FUNCTION: WDA_wdiStartCallback
327 * Once WDI_Start is finished, WDI start callback will be called by WDI
328 * to indicate completion of WDI_Start.
329 */
330void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
331 void *pVosContext)
332{
333 tWDA_CbContext *wdaContext;
334 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700335 if (NULL == pVosContext)
336 {
337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700338 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700339 return;
340 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
342 if (NULL == wdaContext)
343 {
344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700345 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 return;
347 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
349 {
350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700351 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 }
353 else
354 {
355 wdaContext->wdaState = WDA_START_STATE;
356 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700357 /* extract and save version information from the Start Response */
358 wdaContext->wcnssWlanCompiledVersion.major =
359 wdiRspParams->wlanCompiledVersion.major;
360 wdaContext->wcnssWlanCompiledVersion.minor =
361 wdiRspParams->wlanCompiledVersion.minor;
362 wdaContext->wcnssWlanCompiledVersion.version =
363 wdiRspParams->wlanCompiledVersion.version;
364 wdaContext->wcnssWlanCompiledVersion.revision =
365 wdiRspParams->wlanCompiledVersion.revision;
366 wdaContext->wcnssWlanReportedVersion.major =
367 wdiRspParams->wlanReportedVersion.major;
368 wdaContext->wcnssWlanReportedVersion.minor =
369 wdiRspParams->wlanReportedVersion.minor;
370 wdaContext->wcnssWlanReportedVersion.version =
371 wdiRspParams->wlanReportedVersion.version;
372 wdaContext->wcnssWlanReportedVersion.revision =
373 wdiRspParams->wlanReportedVersion.revision;
374 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
375 wdiRspParams->wcnssSoftwareVersion,
376 sizeof(wdaContext->wcnssSoftwareVersionString));
377 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
378 wdiRspParams->wcnssHardwareVersion,
379 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700380 /* Notify WDA_start that WDI_Start has completed */
381 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700382 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 {
384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700385 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700386 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 return;
388}
389
Jeff Johnson295189b2012-06-20 16:38:30 -0700390/*
391 * FUNCTION: WDA_start
392 * Prepare TLV configuration and call WDI_Start.
393 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700394VOS_STATUS WDA_start(v_PVOID_t pVosContext)
395{
396 tWDA_CbContext *wdaContext;
397 VOS_STATUS status;
398 WDI_Status wdiStatus;
399 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 if (NULL == pVosContext)
401 {
402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700403 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700404 return VOS_STATUS_E_FAILURE;
405 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
407 if (NULL == wdaContext)
408 {
409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700410 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700411 return VOS_STATUS_E_FAILURE;
412 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 /* Non-FTM mode, WDA status for START must be INIT
414 * FTM mode, WDA Status for START can be INIT or STOP */
415 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
416 (WDA_STOP_STATE != wdaContext->wdaState) )
417 {
418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
419 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700420 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 return VOS_STATUS_E_FAILURE;
422 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 /* initialize the wdiStartParam. Note that we can create this on
424 the stack since we won't exit until WDI_Start() completes or
425 times out */
426 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700427 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 /* prepare the config TLV for the WDI */
429 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
430 if ( !VOS_IS_STATUS_SUCCESS(status) )
431 {
432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700433 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return VOS_STATUS_E_FAILURE;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* note from here onwards if an error occurs we must
437 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
439 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
440 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* initialize the WDA-WDI synchronization event */
442 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 /* call WDI start */
444 wdiStatus = WDI_Start(&wdiStartParam,
445 (WDI_StartRspCb)WDA_wdiStartCallback,
446 (v_VOID_t *)pVosContext);
447 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
448 {
449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700450 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 vos_mem_free(wdiStartParam.pConfigBuffer);
452 return VOS_STATUS_E_FAILURE;
453 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 /* wait for WDI start to invoke our callback */
455 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
456 WDA_WDI_START_TIMEOUT );
457 if ( !VOS_IS_STATUS_SUCCESS(status) )
458 {
459 if ( VOS_STATUS_E_TIMEOUT == status )
460 {
461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700462 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 }
464 else
465 {
466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
467 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700468 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700469 }
470 vos_mem_free(wdiStartParam.pConfigBuffer);
471 return VOS_STATUS_E_FAILURE;
472 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700473 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700474 /* we no longer need the config TLV */
475 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* if we are not in the START state then WDI_Start() failed */
477 if (WDA_START_STATE != wdaContext->wdaState)
478 {
479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700480 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 return VOS_STATUS_E_FAILURE;
482 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 /* FTM mode does not need to monitor BA activity */
484 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
485 {
486 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800487 if(VOS_STATUS_SUCCESS == status)
488 {
489 wdaContext->wdaTimersCreated = VOS_TRUE;
490 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700492 return status;
493}
494
Jeff Johnson295189b2012-06-20 16:38:30 -0700495/*
496 * FUNCTION: WDA_prepareConfigTLV
497 * Function to prepare CFG for DAL(WDA)
498 */
499VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
500 WDI_StartReqParamsType *wdiStartParams )
501{
502 /* get pMac to acess CFG data base */
503 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
504 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
505 tHalCfg *tlvStruct = NULL ;
506 tANI_U8 *tlvStructStart = NULL ;
507 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
508 v_PVOID_t *configParam;
509 tANI_U32 configParamSize;
510 tANI_U32 *configDataValue;
511 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 if ((NULL == pMac)||(NULL == wdaContext))
513 {
514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700515 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 VOS_ASSERT(0);
517 return VOS_STATUS_E_FAILURE;
518 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
520 WNI_CFG_STA_ID_LEN +
521 WNI_CFG_EDCA_WME_ACBK_LEN +
522 WNI_CFG_EDCA_WME_ACBE_LEN +
523 WNI_CFG_EDCA_WME_ACVI_LEN +
524 WNI_CFG_EDCA_WME_ACVO_LEN +
525 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 /* malloc memory for all configs in one shot */
527 configParam = vos_mem_malloc(configParamSize);
528
529 if(NULL == configParam )
530 {
531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700532 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 VOS_ASSERT(0) ;
534 return VOS_STATUS_E_NOMEM;
535 }
536 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700537 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 tlvStruct = (tHalCfg *)configParam;
539 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 /* TODO: Remove Later */
541 /* QWLAN_HAL_CFG_STA_ID */
542 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
543 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
544 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
545 eSIR_SUCCESS)
546 {
547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
548 "Failed to get value for WNI_CFG_STA_ID");
549 goto handle_failure;
550 }
551 tlvStruct->length = strLength ;
552 /* calculate the pad bytes to have the CFG in aligned format */
553 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
554 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700555 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
556 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
558 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
559 tlvStruct->length = sizeof(tANI_U32);
560 configDataValue = (tANI_U32 *)(tlvStruct + 1);
561 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
562 != eSIR_SUCCESS)
563 {
564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
565 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
566 goto handle_failure;
567 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700568 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
569 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700570 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
571 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
572 tlvStruct->length = sizeof(tANI_U32);
573 configDataValue = (tANI_U32 *)(tlvStruct + 1);
574 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
575 eSIR_SUCCESS)
576 {
577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
578 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
579 goto handle_failure;
580 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
582 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
584 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
585 tlvStruct->length = sizeof(tANI_U32);
586 configDataValue = (tANI_U32 *)(tlvStruct + 1);
587 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
588 != eSIR_SUCCESS)
589 {
590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
591 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
592 goto handle_failure;
593 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
595 + sizeof(tHalCfg) + tlvStruct->length)) ;
596
597 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
598 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
599 tlvStruct->length = sizeof(tANI_U32);
600 configDataValue = (tANI_U32 *)(tlvStruct + 1);
601 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
602 configDataValue ) != eSIR_SUCCESS)
603 {
604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
605 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
606 goto handle_failure;
607 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700608 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
609 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700610 /* QWLAN_HAL_CFG_CAL_PERIOD */
611 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
612 tlvStruct->length = sizeof(tANI_U32);
613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
614 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
615 != eSIR_SUCCESS)
616 {
617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
618 "Failed to get value for WNI_CFG_CAL_PERIOD");
619 goto handle_failure;
620 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700621 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
622 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700623 /* QWLAN_HAL_CFG_CAL_CONTROL */
624 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
625 tlvStruct->length = sizeof(tANI_U32);
626 configDataValue = (tANI_U32 *)(tlvStruct + 1);
627 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
628 != eSIR_SUCCESS)
629 {
630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
631 "Failed to get value for WNI_CFG_CAL_CONTROL");
632 goto handle_failure;
633 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700634 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
635 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 /* QWLAN_HAL_CFG_PROXIMITY */
637 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
638 tlvStruct->length = sizeof(tANI_U32);
639 configDataValue = (tANI_U32 *)(tlvStruct + 1);
640 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
641 != eSIR_SUCCESS)
642 {
643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
644 "Failed to get value for WNI_CFG_PROXIMITY");
645 goto handle_failure;
646 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
648 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
650 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
651 tlvStruct->length = sizeof(tANI_U32);
652 configDataValue = (tANI_U32 *)(tlvStruct + 1);
653 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
654 != eSIR_SUCCESS)
655 {
656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
657 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
658 goto handle_failure;
659 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
661 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
663 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
664 tlvStruct->length = sizeof(tANI_U32);
665 configDataValue = (tANI_U32 *)(tlvStruct + 1);
666 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
667 eSIR_SUCCESS)
668 {
669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
670 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
671 goto handle_failure;
672 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
674 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
676 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
677 tlvStruct->length = sizeof(tANI_U32);
678 configDataValue = (tANI_U32 *)(tlvStruct + 1);
679 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
680 configDataValue ) != eSIR_SUCCESS)
681 {
682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
683 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
684 goto handle_failure;
685 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700686 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
687 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700688 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
689 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
690 tlvStruct->length = sizeof(tANI_U32);
691 configDataValue = (tANI_U32 *)(tlvStruct + 1);
692 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
693 eSIR_SUCCESS)
694 {
695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
696 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
697 goto handle_failure;
698 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700699 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
700 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700701 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
702 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
703 tlvStruct->length = sizeof(tANI_U32);
704 configDataValue = (tANI_U32 *)(tlvStruct + 1);
705 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
706 eSIR_SUCCESS)
707 {
708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
709 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
710 goto handle_failure;
711 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
713 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700714 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
715 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
716 tlvStruct->length = sizeof(tANI_U32);
717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
718 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
719 eSIR_SUCCESS)
720 {
721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
722 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
723 goto handle_failure;
724 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
726 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
728 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
729 tlvStruct->length = sizeof(tANI_U32);
730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
731 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
732 configDataValue ) != eSIR_SUCCESS)
733 {
734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
735 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
736 goto handle_failure;
737 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
739 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
741 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
742 tlvStruct->length = sizeof(tANI_U32);
743 configDataValue = (tANI_U32 *)(tlvStruct + 1);
744 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
745 configDataValue ) != eSIR_SUCCESS)
746 {
747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
748 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
749 goto handle_failure;
750 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700751 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
752 + sizeof(tHalCfg) + tlvStruct->length));
753
754 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
755 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
756 tlvStruct->length = sizeof(tANI_U32);
757 configDataValue = (tANI_U32 *)(tlvStruct + 1);
758 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
759 configDataValue ) != eSIR_SUCCESS)
760 {
761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
762 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
763 goto handle_failure;
764 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700765 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
766 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700767 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
768 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
769 tlvStruct->length = sizeof(tANI_U32);
770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
771 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
772 configDataValue ) != eSIR_SUCCESS)
773 {
774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
775 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
776 goto handle_failure;
777 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
779 + sizeof(tHalCfg) + tlvStruct->length));
780
781 /* QWLAN_HAL_CFG_FIXED_RATE */
782 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
783 tlvStruct->length = sizeof(tANI_U32);
784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
785 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
786 != eSIR_SUCCESS)
787 {
788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
789 "Failed to get value for WNI_CFG_FIXED_RATE");
790 goto handle_failure;
791 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700792 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
793 + sizeof(tHalCfg) + tlvStruct->length));
794
795 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
796 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
797 tlvStruct->length = sizeof(tANI_U32);
798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
799 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
800 != eSIR_SUCCESS)
801 {
802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
803 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
804 goto handle_failure;
805 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700806 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
807 + sizeof(tHalCfg) + tlvStruct->length));
808
809 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
810 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
811 tlvStruct->length = sizeof(tANI_U32);
812 configDataValue = (tANI_U32 *)(tlvStruct + 1);
813 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
814 configDataValue ) != eSIR_SUCCESS)
815 {
816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
817 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
818 goto handle_failure;
819 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700820 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
821 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700822 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
823 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
824 tlvStruct->length = sizeof(tANI_U32);
825 configDataValue = (tANI_U32 *)(tlvStruct + 1);
826 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
827 configDataValue ) != eSIR_SUCCESS)
828 {
829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
830 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
831 goto handle_failure;
832 }
833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700835 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
836 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
837 tlvStruct->length = sizeof(tANI_U32);
838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
839 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
840 configDataValue ) != eSIR_SUCCESS)
841 {
842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
843 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
844 goto handle_failure;
845 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700846 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
847 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700848 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
849 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
850 tlvStruct->length = sizeof(tANI_U32);
851 configDataValue = (tANI_U32 *)(tlvStruct + 1);
852 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
853 configDataValue ) != eSIR_SUCCESS)
854 {
855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
856 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
857 goto handle_failure;
858 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
860 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700861 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
862 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
863 tlvStruct->length = sizeof(tANI_U32);
864 configDataValue = (tANI_U32 *)(tlvStruct + 1);
865 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
866 configDataValue ) != eSIR_SUCCESS)
867 {
868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
869 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
870 goto handle_failure;
871 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
873 + sizeof(tHalCfg) + tlvStruct->length);
874
875#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
876 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
877 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
878 tlvStruct->length = sizeof(tANI_U32);
879 configDataValue = (tANI_U32 *)(tlvStruct + 1);
880 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
881 configDataValue ) != eSIR_SUCCESS)
882 {
883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
884 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
885 goto handle_failure;
886 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700887 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
888 + sizeof(tHalCfg) + tlvStruct->length);
889#endif
890 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
891 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
892 tlvStruct->length = sizeof(tANI_U32);
893 configDataValue = (tANI_U32 *)(tlvStruct + 1);
894 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
895 configDataValue ) != eSIR_SUCCESS)
896 {
897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
898 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
899 goto handle_failure;
900 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700901 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
902 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700903 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
904 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
905 tlvStruct->length = sizeof(tANI_U32);
906 configDataValue = (tANI_U32 *)(tlvStruct + 1);
907 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
908 eSIR_SUCCESS)
909 {
910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
911 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
912 goto handle_failure;
913 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700914 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
915 + sizeof(tHalCfg) + tlvStruct->length);
916
917 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
918 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
919 tlvStruct->length = sizeof(tANI_U32);
920 configDataValue = (tANI_U32 *)(tlvStruct + 1);
921 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
922 configDataValue ) != eSIR_SUCCESS)
923 {
924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
925 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
926 goto handle_failure;
927 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700928 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
929 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700930 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
931 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
932 tlvStruct->length = sizeof(tANI_U32);
933 configDataValue = (tANI_U32 *)(tlvStruct + 1);
934 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
935 configDataValue ) != eSIR_SUCCESS)
936 {
937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
938 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
939 goto handle_failure;
940 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700941 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
942 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700943 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
944 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
945 tlvStruct->length = sizeof(tANI_U32);
946 configDataValue = (tANI_U32 *)(tlvStruct + 1);
947 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
948 configDataValue ) != eSIR_SUCCESS)
949 {
950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
951 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
952 goto handle_failure;
953 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700954 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
955 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700956 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
957 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
958 tlvStruct->length = sizeof(tANI_U32);
959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
960 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
961 configDataValue ) != eSIR_SUCCESS)
962 {
963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
964 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
965 goto handle_failure;
966 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
968 + sizeof(tHalCfg) + tlvStruct->length);
969
970 /* QWLAN_HAL_CFG_STATS_PERIOD */
971 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
972 tlvStruct->length = sizeof(tANI_U32);
973 configDataValue = (tANI_U32 *)(tlvStruct + 1);
974 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
975 eSIR_SUCCESS)
976 {
977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
978 "Failed to get value for WNI_CFG_STATS_PERIOD");
979 goto handle_failure;
980 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700981 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
982 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700983 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
984 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
985 tlvStruct->length = sizeof(tANI_U32);
986 configDataValue = (tANI_U32 *)(tlvStruct + 1);
987 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
988 eSIR_SUCCESS)
989 {
990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
991 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
992 goto handle_failure;
993 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700994 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
995 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700996 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
997 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
998 tlvStruct->length = sizeof(tANI_U32);
999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1000 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1001 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1005 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1009 != eSIR_SUCCESS)
1010 {
1011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1012 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1013 goto handle_failure;
1014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1016 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001017 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1018 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1019 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1022 &strLength) != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1026 goto handle_failure;
1027 }
1028 tlvStruct->length = strLength;
1029 /* calculate the pad bytes to have the CFG in aligned format */
1030 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1031 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001032 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1033 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001034 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1035 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1036 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1037 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1038 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1039 &strLength) != eSIR_SUCCESS)
1040 {
1041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1042 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1043 goto handle_failure;
1044 }
1045 tlvStruct->length = strLength;
1046 /* calculate the pad bytes to have the CFG in aligned format */
1047 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1048 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001049 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1050 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1052 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1053 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1054 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1055 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1056 &strLength) != eSIR_SUCCESS)
1057 {
1058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1059 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1060 goto handle_failure;
1061 }
1062 tlvStruct->length = strLength;
1063 /* calculate the pad bytes to have the CFG in aligned format */
1064 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1065 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001066 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1067 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1069 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1070 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1071 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1072 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1073 &strLength) != eSIR_SUCCESS)
1074 {
1075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1076 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1077 goto handle_failure;
1078 }
1079 tlvStruct->length = strLength;
1080 /* calculate the pad bytes to have the CFG in aligned format */
1081 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1082 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1084 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1086 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1087 tlvStruct->length = sizeof(tANI_U32);
1088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1089 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1090 != eSIR_SUCCESS)
1091 {
1092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1093 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1094 goto handle_failure;
1095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1097 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001098 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1099 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1100 tlvStruct->length = sizeof(tANI_U32);
1101 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1102 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1103 != eSIR_SUCCESS)
1104 {
1105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1106 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1107 goto handle_failure;
1108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1110 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1112 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1113 tlvStruct->length = sizeof(tANI_U32);
1114 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1115 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1116 != eSIR_SUCCESS)
1117 {
1118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1119 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1120 goto handle_failure;
1121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001122 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1123 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001124 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1125 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1126 tlvStruct->length = sizeof(tANI_U32);
1127 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1128 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1129 != eSIR_SUCCESS)
1130 {
1131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1132 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1133 goto handle_failure;
1134 }
1135 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1136 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001137 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1138 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1139 tlvStruct->length = sizeof(tANI_U32);
1140 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1141 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1142 != eSIR_SUCCESS)
1143 {
1144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1145 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1146 goto handle_failure;
1147 }
1148 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1149 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001150 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1151 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1152 tlvStruct->length = sizeof(tANI_U32);
1153 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1154 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1155 != eSIR_SUCCESS)
1156 {
1157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1158 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1159 goto handle_failure;
1160 }
1161 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1162 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1164 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1165 tlvStruct->length = sizeof(tANI_U32);
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1168 != eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1172 goto handle_failure;
1173 }
1174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1175 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1177 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1181 != eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1185 goto handle_failure;
1186 }
1187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1190 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1194 != eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1198 goto handle_failure;
1199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1203 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1211 goto handle_failure;
1212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1216 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1217 tlvStruct->length = sizeof(tANI_U32);
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1220 != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1224 goto handle_failure;
1225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1227 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001228 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1229 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1230 * into FW, so the parameters are added here.
1231 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1233 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1234 tlvStruct->length = sizeof(tANI_U32);
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1237 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1238 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1240 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1241 tlvStruct->length = sizeof(tANI_U32);
1242 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1243 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1244 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1245 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001246 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1247 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1248 tlvStruct->length = sizeof(tANI_U32);
1249 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1250 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1251 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1252 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001253 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1254 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1255 tlvStruct->length = sizeof(tANI_U32);
1256 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1257 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1258 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1259 + sizeof(tHalCfg) + tlvStruct->length) ;
1260
1261 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1262 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1266 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1267 + sizeof(tHalCfg) + tlvStruct->length) ;
1268
1269 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1270 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1271 tlvStruct->length = sizeof(tANI_U32);
1272 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1273 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length) ;
1276
1277 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1278 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1279 tlvStruct->length = sizeof(tANI_U32);
1280 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1281 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1282 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1283 + sizeof(tHalCfg) + tlvStruct->length) ;
1284
1285 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
1292
1293 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1294 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1298 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1299 + sizeof(tHalCfg) + tlvStruct->length) ;
1300
1301 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1302 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1306 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1307 + sizeof(tHalCfg) + tlvStruct->length) ;
1308
1309 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1310 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1314 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1315 + sizeof(tHalCfg) + tlvStruct->length) ;
1316
1317 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1318 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
1324
1325 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1326 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1327 tlvStruct->length = sizeof(tANI_U32);
1328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1329 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
1332
1333 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1334 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1335 tlvStruct->length = sizeof(tANI_U32);
1336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1337 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
1340
1341 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1342 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
1348
1349 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
1356
1357 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001358 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1359 tlvStruct->length = sizeof(tANI_U32);
1360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1361 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1362 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1363 wcnssCompiledApiVersion.minor,
1364 wcnssCompiledApiVersion.version,
1365 wcnssCompiledApiVersion.revision);
1366 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1367 + sizeof(tHalCfg) + tlvStruct->length) ;
1368
Jeff Johnsond13512a2012-07-17 11:42:19 -07001369 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1370 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1374 configDataValue ) != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1378 goto handle_failure;
1379 }
1380
1381 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1382 + sizeof(tHalCfg) + tlvStruct->length) ;
1383 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1384 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1385 tlvStruct->length = sizeof(tANI_U32);
1386 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1387 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1388 configDataValue ) != eSIR_SUCCESS)
1389 {
1390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1391 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1392 goto handle_failure;
1393 }
1394
1395 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1396 + sizeof(tHalCfg) + tlvStruct->length) ;
1397
1398 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1399 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1400 tlvStruct->length = sizeof(tANI_U32);
1401 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1402 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1403 != eSIR_SUCCESS)
1404 {
1405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1406 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1407 goto handle_failure;
1408 }
1409
1410 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1411 + sizeof(tHalCfg) + tlvStruct->length) ;
1412
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001413 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1414 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1415 tlvStruct->length = sizeof(tANI_U32);
1416 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1417 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1418 != eSIR_SUCCESS)
1419 {
1420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1421 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1422 goto handle_failure;
1423 }
1424
1425 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1426 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001427#ifdef WLAN_SOFTAP_VSTA_FEATURE
1428 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1429 tlvStruct->length = sizeof(tANI_U32);
1430 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1431 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1432 != eSIR_SUCCESS)
1433 {
1434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1435 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1436 goto handle_failure;
1437 }
1438
1439 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1440 + sizeof(tHalCfg) + tlvStruct->length) ;
1441#endif
1442
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001443 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1444 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1445 tlvStruct->length = sizeof(tANI_U32);
1446 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1447
1448 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1449 != eSIR_SUCCESS)
1450 {
1451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1452 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1453 goto handle_failure;
1454 }
1455
1456 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1457 + sizeof(tHalCfg) + tlvStruct->length) ;
1458
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301459/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1460 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1461 tlvStruct->length = sizeof(tANI_U32);
1462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1463 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1464 configDataValue ) != eSIR_SUCCESS)
1465 {
1466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1467 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1468 goto handle_failure;
1469 }
1470
1471 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1472 + sizeof(tHalCfg) + tlvStruct->length) ;
1473
Jeff Johnson295189b2012-06-20 16:38:30 -07001474 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001475#ifdef WLAN_DEBUG
1476 {
1477 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001478 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1479 "****** Dumping CFG TLV ***** ");
1480 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1481 {
1482 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1483 "%02x %02x %02x %02x %02x %02x %02x %02x",
1484 tlvStructStart[i],
1485 tlvStructStart[i+1],
1486 tlvStructStart[i+2],
1487 tlvStructStart[i+3],
1488 tlvStructStart[i+4],
1489 tlvStructStart[i+5],
1490 tlvStructStart[i+6],
1491 tlvStructStart[i+7]);
1492 }
1493 /* Dump the bytes in the last line*/
1494 for (; i < wdiStartParams->usConfigBufferLen; i++)
1495 {
1496 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1497 "%02x ",tlvStructStart[i]);
1498 }
1499 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1500 "**************************** ");
1501 }
1502#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001503 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001504handle_failure:
1505 vos_mem_free(configParam);
1506 return VOS_STATUS_E_FAILURE;
1507}
Jeff Johnson295189b2012-06-20 16:38:30 -07001508/*
1509 * FUNCTION: WDA_wdiCompleteCB
1510 * call the voss call back function
1511 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001512void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001513{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001514 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1515 tWDA_CbContext *wdaContext;
1516
1517 if(NULL == pWdaParams)
1518 {
1519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001520 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001521 VOS_ASSERT(0) ;
1522 return ;
1523 }
1524
1525 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1526
Jeff Johnson295189b2012-06-20 16:38:30 -07001527 if (NULL == wdaContext)
1528 {
1529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001530 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001531 return ;
1532 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001533
Jeff Johnson295189b2012-06-20 16:38:30 -07001534 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001535 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001536 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001538 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001539 vos_mem_free(pWdaParams);
1540
Jeff Johnson295189b2012-06-20 16:38:30 -07001541 if(WDI_STATUS_SUCCESS != status)
1542 {
1543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1544 "WDI stop callback returned failure" );
1545 VOS_ASSERT(0) ;
1546 }
1547 else
1548 {
1549 wdaContext->wdaState = WDA_STOP_STATE;
1550 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001551
Jeff Johnson295189b2012-06-20 16:38:30 -07001552 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001553 vos_WDAComplete_cback(wdaContext->pVosContext);
1554
Jeff Johnson295189b2012-06-20 16:38:30 -07001555 return ;
1556}
Jeff Johnson295189b2012-06-20 16:38:30 -07001557/*
1558 * FUNCTION: WDA_stop
1559 * call WDI_stop
1560 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001561VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1562{
1563 WDI_Status wdiStatus;
1564 VOS_STATUS status = VOS_STATUS_SUCCESS;
1565 WDI_StopReqParamsType *wdiStopReq;
1566 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001567 tWDA_ReqParams *pWdaParams ;
1568
Jeff Johnson295189b2012-06-20 16:38:30 -07001569 if (NULL == pWDA)
1570 {
1571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001572 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001573 VOS_ASSERT(0);
1574 return VOS_STATUS_E_FAILURE;
1575 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001576 if (pWDA->wdiFailed == true)
1577 {
1578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001579 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001580 return VOS_STATUS_E_ALREADY;
1581 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001582
Jeff Johnson295189b2012-06-20 16:38:30 -07001583 /* FTM mode stay START_STATE */
1584 if( (WDA_READY_STATE != pWDA->wdaState) &&
1585 (WDA_INIT_STATE != pWDA->wdaState) &&
1586 (WDA_START_STATE != pWDA->wdaState) )
1587 {
1588 VOS_ASSERT(0);
1589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001590 wdiStopReq = (WDI_StopReqParamsType *)
1591 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1592 if(NULL == wdiStopReq)
1593 {
1594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001596 VOS_ASSERT(0);
1597 return VOS_STATUS_E_NOMEM;
1598 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001599
Jeff Johnson295189b2012-06-20 16:38:30 -07001600 wdiStopReq->wdiStopReason = reason;
1601 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001602
1603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1604 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001605 {
1606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001608 VOS_ASSERT(0);
1609 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001610 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001611 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001612
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001613 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1614 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001615 {
1616 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001617 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001618 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001619
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001620 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1621 pWdaParams->wdaMsgParam = NULL;
1622 pWdaParams->pWdaContext = pWDA;
1623
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 /* call WDI stop */
1625 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001626 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1627
Jeff Johnson295189b2012-06-20 16:38:30 -07001628 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1629 {
1630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1631 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1633 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001634 status = VOS_STATUS_E_FAILURE;
1635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001636 return status;
1637}
Jeff Johnson295189b2012-06-20 16:38:30 -07001638/*
1639 * FUNCTION: WDA_close
1640 * call WDI_close and free the WDA context
1641 */
1642VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1643{
Jeff Johnson43971f52012-07-17 12:26:56 -07001644 VOS_STATUS status = VOS_STATUS_SUCCESS;
1645 WDI_Status wstatus;
1646 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001647 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001648 if (NULL == wdaContext)
1649 {
1650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001651 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001652 return VOS_STATUS_E_FAILURE;
1653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001654 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1655 (WDA_STOP_STATE != wdaContext->wdaState))
1656 {
1657 VOS_ASSERT(0);
1658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001659 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001660 wstatus = WDI_Close();
1661 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001662 {
1663 status = VOS_STATUS_E_FAILURE;
1664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001665 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001666 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001667 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1668 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001669 {
1670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1671 "WDI Sync Event destroy failed - status = %d\n", status);
1672 status = VOS_STATUS_E_FAILURE;
1673 }
1674
Jeff Johnson43971f52012-07-17 12:26:56 -07001675 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001676 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001677 {
1678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1679 "VOS Event destroy failed - status = %d\n", status);
1680 status = VOS_STATUS_E_FAILURE;
1681 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001682 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001683 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001684 {
1685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1686 "VOS Event destroy failed - status = %d\n", status);
1687 status = VOS_STATUS_E_FAILURE;
1688 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001689 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001690 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001691 {
1692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1693 "VOS Event destroy failed - status = %d\n", status);
1694 status = VOS_STATUS_E_FAILURE;
1695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001696 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001697 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001698 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001699 {
1700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1701 "error in WDA close " );
1702 status = VOS_STATUS_E_FAILURE;
1703 }
1704 return status;
1705}
Jeff Johnson295189b2012-06-20 16:38:30 -07001706/*
1707 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1708 * returns 1 if the compiled version is greater than or equal to the input version
1709 */
1710
1711uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1712{
1713 VOS_STATUS status = VOS_STATUS_SUCCESS;
1714 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1715 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001716 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001717 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1718 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1719 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1720 (compiledVersion.revision >= revision)))
1721 return 1;
1722 else
1723 return 0;
1724}
Jeff Johnson295189b2012-06-20 16:38:30 -07001725/*
1726 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1727 * returns 1 if the compiled version is greater than or equal to the input version
1728 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001729uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1730{
1731 VOS_STATUS status = VOS_STATUS_SUCCESS;
1732 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1733 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001734 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001735 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1736 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1737 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1738 (reportedVersion.revision >= revision)))
1739 return 1;
1740 else
1741 return 0;
1742}
Jeff Johnson295189b2012-06-20 16:38:30 -07001743/*
1744 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1745 * Returns the version of the WCNSS WLAN API with which the HOST
1746 * device driver was compiled
1747 */
1748VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1749 tSirVersionType *pVersion)
1750{
1751 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001752 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001753 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001754 if ((NULL == pvosGCtx) || (NULL == pVersion))
1755 {
1756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001757 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001758 VOS_ASSERT(0);
1759 return VOS_STATUS_E_FAILURE;
1760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001761 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1762 if (NULL == pWDA )
1763 {
1764 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001765 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 VOS_ASSERT(0);
1767 return VOS_STATUS_E_FAILURE;
1768 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001769 *pVersion = pWDA->wcnssWlanCompiledVersion;
1770 return VOS_STATUS_SUCCESS;
1771}
Jeff Johnson295189b2012-06-20 16:38:30 -07001772/*
1773 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1774 * Returns the version of the WCNSS WLAN API with which the WCNSS
1775 * device driver was compiled
1776 */
1777VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1778 tSirVersionType *pVersion)
1779{
1780 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001782 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001783 if ((NULL == pvosGCtx) || (NULL == pVersion))
1784 {
1785 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001786 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001787 VOS_ASSERT(0);
1788 return VOS_STATUS_E_FAILURE;
1789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001790 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1791 if (NULL == pWDA )
1792 {
1793 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001794 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 VOS_ASSERT(0);
1796 return VOS_STATUS_E_FAILURE;
1797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 *pVersion = pWDA->wcnssWlanReportedVersion;
1799 return VOS_STATUS_SUCCESS;
1800}
Jeff Johnson295189b2012-06-20 16:38:30 -07001801/*
1802 * FUNCTION: WDA_GetWcnssSoftwareVersion
1803 * Returns the WCNSS Software version string
1804 */
1805VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1806 tANI_U8 *pVersion,
1807 tANI_U32 versionBufferSize)
1808{
1809 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001811 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001812 if ((NULL == pvosGCtx) || (NULL == pVersion))
1813 {
1814 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001815 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001816 VOS_ASSERT(0);
1817 return VOS_STATUS_E_FAILURE;
1818 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001819 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1820 if (NULL == pWDA )
1821 {
1822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001823 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 VOS_ASSERT(0);
1825 return VOS_STATUS_E_FAILURE;
1826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001827 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1828 return VOS_STATUS_SUCCESS;
1829}
Jeff Johnson295189b2012-06-20 16:38:30 -07001830/*
1831 * FUNCTION: WDA_GetWcnssHardwareVersion
1832 * Returns the WCNSS Hardware version string
1833 */
1834VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1835 tANI_U8 *pVersion,
1836 tANI_U32 versionBufferSize)
1837{
1838 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001840 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001841 if ((NULL == pvosGCtx) || (NULL == pVersion))
1842 {
1843 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001844 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001845 VOS_ASSERT(0);
1846 return VOS_STATUS_E_FAILURE;
1847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001848 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1849 if (NULL == pWDA )
1850 {
1851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001852 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001853 VOS_ASSERT(0);
1854 return VOS_STATUS_E_FAILURE;
1855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001856 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1857 return VOS_STATUS_SUCCESS;
1858}
Jeff Johnson295189b2012-06-20 16:38:30 -07001859/*
1860 * FUNCTION: WDA_WniCfgDnld
1861 * Trigger CFG Download
1862 */
1863VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1864{
1865 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001866 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001867 v_VOID_t *pFileImage = NULL;
1868 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001869 v_VOID_t *pCfgBinary = NULL;
1870 v_SIZE_t cbCfgBinarySize = 0;
1871
1872 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 if (NULL == pMac )
1874 {
1875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001876 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001877 VOS_ASSERT(0);
1878 return VOS_STATUS_E_FAILURE;
1879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001880 /* get the number of bytes in the CFG Binary... */
1881 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1882 &cbFileImageSize );
1883 if ( VOS_STATUS_E_NOMEM != vosStatus )
1884 {
1885 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1886 "Error obtaining binary size" );
1887 goto fail;
1888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 // malloc a buffer to read in the Configuration binary file.
1890 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001891 if ( NULL == pFileImage )
1892 {
1893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1894 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1895 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001896 vosStatus = VOS_STATUS_E_NOMEM;
1897 goto fail;
1898 }
1899
1900 /* Get the entire CFG file image... */
1901 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1902 &cbFileImageSize );
1903 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1906 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1907 cbFileImageSize );
1908 goto fail;
1909 }
1910
1911 /*
1912 * Validate the binary image. This function will return a pointer
1913 * and length where the CFG binary is located within the binary image file.
1914 */
1915 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1916 &pCfgBinary, &cbCfgBinarySize );
1917 if ( VOS_FALSE == bStatus )
1918 {
1919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1920 "Error: Cannot find STA CFG in binary image file" );
1921 vosStatus = VOS_STATUS_E_FAILURE;
1922 goto fail;
1923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001924 /*
1925 * TODO: call the config download function
1926 * for now calling the existing cfg download API
1927 */
1928 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001929 if( pFileImage != NULL )
1930 {
1931 vos_mem_free( pFileImage );
1932 }
1933 return vosStatus;
1934
1935fail:
1936 if(pCfgBinary != NULL)
1937 vos_mem_free( pFileImage );
1938
1939 return vosStatus;
1940}
Jeff Johnson295189b2012-06-20 16:38:30 -07001941/* -----------------------------------------------------------------
1942 * WDI interface
1943 * -----------------------------------------------------------------
1944 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001945/*
1946 * FUNCTION: WDA_suspendDataTxCallback
1947 * call back function called from TL after suspend Transmission
1948 */
1949VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1950 v_U8_t* ucSTAId,
1951 VOS_STATUS vosStatus)
1952{
1953 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001955 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 if (NULL == pWDA )
1957 {
1958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001959 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001960 VOS_ASSERT(0);
1961 return VOS_STATUS_E_FAILURE;
1962 }
1963 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1964 {
1965 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1966 }
1967 else
1968 {
1969 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001971 /* Trigger the event to bring the WDA TL suspend function to come
1972 * out of wait*/
1973 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1974 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1975 {
1976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1977 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001979 /* If TL suspended had timedout before this callback was called, resume back
1980 * TL.*/
1981 if (pWDA->txSuspendTimedOut)
1982 {
1983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1984 "Late TLSuspendCallback, resuming TL back again\n");
1985 WDA_ResumeDataTx(pWDA);
1986 pWDA->txSuspendTimedOut = FALSE;
1987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001988 return VOS_STATUS_SUCCESS;
1989}
Jeff Johnson295189b2012-06-20 16:38:30 -07001990/*
1991 * FUNCTION: WDA_suspendDataTx
1992 * Update TL to suspend the data Transmission
1993 */
1994VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1995{
1996 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1997 tANI_U8 eventIdx = 0;
1998 tANI_U8 ucSTAId = 0;
1999
2000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002001 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002002 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002003 if (pWDA->txSuspendTimedOut)
2004 {
2005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2006 "TL suspend timedout previously, CB not called yet\n");
2007 return status;
2008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 /* Reset the event to be not signalled */
2010 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2011 if(!VOS_IS_STATUS_SUCCESS(status))
2012 {
2013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2014 "VOS Event reset failed - status = %d\n",status);
2015 return VOS_STATUS_E_FAILURE;
2016 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002017 /*Indicate TL to suspend transmission for all Sta Id */
2018 ucSTAId = WLAN_ALL_STA;
2019 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
2020 WDA_SuspendDataTxCallback);
2021 if(status != VOS_STATUS_SUCCESS)
2022 {
2023 return status;
2024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002025 /* Wait for the event to be set by the TL, to get the response of
2026 * suspending the TX queues, this event should be set by the Callback
2027 * function called by TL*/
2028 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2029 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2030 if(!VOS_IS_STATUS_SUCCESS(status))
2031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2033 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002034 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002035 /* Set this flag to true when TL suspend times out, so that when TL
2036 * suspend eventually happens and calls the callback, TL can be resumed
2037 * right away by looking at this flag when true.*/
2038 pWDA->txSuspendTimedOut = TRUE;
2039 }
2040 else
2041 {
2042 pWDA->txSuspendTimedOut = FALSE;
2043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2045 {
2046 status = VOS_STATUS_SUCCESS;
2047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002048 return status;
2049}
Jeff Johnson295189b2012-06-20 16:38:30 -07002050/*
2051 * FUNCTION: WDA_resumeDataTx
2052 * Update TL to resume the data Transmission
2053 */
2054VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2055{
2056 VOS_STATUS status = VOS_STATUS_SUCCESS;
2057 tANI_U8 ucSTAId = 0;
2058
2059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002060 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002061 ucSTAId = WLAN_ALL_STA;
2062 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
2063 return status;
2064}
Jeff Johnson295189b2012-06-20 16:38:30 -07002065/*
2066 * FUNCTION: WDA_InitScanReqCallback
2067 * Trigger Init SCAN callback
2068 */
2069void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2070{
2071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2072 tWDA_CbContext *pWDA;
2073 tInitScanParams *pWDA_ScanParam ;
2074 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002076 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 if(NULL == pWdaParams)
2078 {
2079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002080 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 VOS_ASSERT(0) ;
2082 return ;
2083 }
2084 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2085 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002086 if(NULL == pWDA_ScanParam)
2087 {
2088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002089 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002090 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2092 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002093 return ;
2094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002095 if(WDI_STATUS_SUCCESS != wdiStatus)
2096 {
2097 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002098 if(VOS_STATUS_SUCCESS != status)
2099 {
2100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002101 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002102 }
2103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002104 /* free WDI command buffer */
2105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002107
Jeff Johnson295189b2012-06-20 16:38:30 -07002108
2109 /* assign status to scan params */
2110 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002111 /* send SCAN RSP message back to PE */
2112 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002113 return ;
2114}
2115
2116/*
2117 * FUNCTION: WDA_ProcessInitScanReq
2118 * Trigger Init SCAN in DAL
2119 */
2120VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2121 tInitScanParams *initScanParams)
2122{
2123 WDI_Status status = WDI_STATUS_SUCCESS ;
2124 WDI_InitScanReqParamsType *wdiInitScanParam =
2125 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2126 sizeof(WDI_InitScanReqParamsType)) ;
2127 tWDA_ReqParams *pWdaParams;
2128 tANI_U8 i = 0;
2129
2130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002131 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002132 if(NULL == wdiInitScanParam)
2133 {
2134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002135 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002136 VOS_ASSERT(0);
2137 return VOS_STATUS_E_NOMEM;
2138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002139 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2140 if(NULL == pWdaParams)
2141 {
2142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002144 VOS_ASSERT(0);
2145 vos_mem_free(wdiInitScanParam);
2146 return VOS_STATUS_E_NOMEM;
2147 }
2148
2149 /* Copy init Scan params to WDI structure */
2150 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2151 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2152 sizeof(tSirMacAddr)) ;
2153 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2154 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2155 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
2156#ifdef WLAN_FEATURE_P2P
2157 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2158 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
2159#else
2160 wdiInitScanParam->wdiReqInfo.bUseNOA = 0;
2161 wdiInitScanParam->wdiReqInfo.scanDuration = 0;
2162#endif
2163 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2164 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002165 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2166 {
2167 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2168 initScanParams->scanEntry.bssIdx[i] ;
2169 }
2170
2171 /* if Frame length, copy macMgmtHdr or WDI structure */
2172 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2173 {
2174 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2175 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2176 }
2177 wdiInitScanParam->wdiReqStatusCB = NULL ;
2178
Jeff Johnson295189b2012-06-20 16:38:30 -07002179 /* Store Init Req pointer, as this will be used for response */
2180 pWdaParams->pWdaContext = pWDA;
2181 pWdaParams->wdaMsgParam = initScanParams;
2182 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002183 /* first try to suspend TX */
2184 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 if(WDI_STATUS_SUCCESS != status)
2186 {
2187 goto handleWdiFailure;
2188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 /* call DAL API to pass init scan request to DAL */
2190 status = WDI_InitScanReq(wdiInitScanParam,
2191 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002192 if(IS_WDI_STATUS_FAILURE(status))
2193 {
2194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2195 "error in WDA Init Scan, Resume Tx " );
2196 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 VOS_ASSERT(0) ;
2198
2199 goto handleWdiFailure;
2200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002201 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002202handleWdiFailure:
2203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2204 "Failure in WDI Api, free all the memory " );
2205 /* free WDI command buffer */
2206 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2207 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002208 /* send Failure to PE */
2209 initScanParams->status = eSIR_FAILURE ;
2210 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002211 return CONVERT_WDI2VOS_STATUS(status) ;
2212}
2213
Jeff Johnson295189b2012-06-20 16:38:30 -07002214/*
2215 * FUNCTION: WDA_StartScanReqCallback
2216 * send Start SCAN RSP back to PE
2217 */
2218void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2219 void* pUserData)
2220{
2221 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2222 tWDA_CbContext *pWDA;
2223 tStartScanParams *pWDA_ScanParam;
2224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002225 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002226 if(NULL == pWdaParams)
2227 {
2228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002229 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002230 VOS_ASSERT(0) ;
2231 return ;
2232 }
2233 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2234 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 if(NULL == pWDA_ScanParam)
2236 {
2237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002238 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002240 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 return ;
2242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002243 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2244 {
2245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002246 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002248 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002249 return ;
2250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2252 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002253
Jeff Johnson295189b2012-06-20 16:38:30 -07002254
2255 /* assign status to scan params */
2256 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(pScanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002257 /* send SCAN RSP message back to PE */
2258 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002259 return ;
2260}
2261
Jeff Johnson295189b2012-06-20 16:38:30 -07002262/*
2263 * FUNCTION: WDA_ProcessStartScanReq
2264 * Trigger start SCAN in WDI
2265 */
2266VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2267 tStartScanParams *startScanParams)
2268{
2269 WDI_Status status = WDI_STATUS_SUCCESS;
2270 WDI_StartScanReqParamsType *wdiStartScanParams =
2271 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2272 sizeof(WDI_StartScanReqParamsType)) ;
2273 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002275 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 if(NULL == wdiStartScanParams)
2277 {
2278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002279 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002280 VOS_ASSERT(0);
2281 return VOS_STATUS_E_NOMEM;
2282 }
2283 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2284 if(NULL == pWdaParams)
2285 {
2286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 VOS_ASSERT(0);
2289 vos_mem_free(wdiStartScanParams);
2290 return VOS_STATUS_E_NOMEM;
2291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002292 /* Copy init Scan params to WDI structure */
2293 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2294 wdiStartScanParams->wdiReqStatusCB = NULL ;
2295
Jeff Johnson295189b2012-06-20 16:38:30 -07002296 /* Store Init Req pointer, as this will be used for response */
2297 /* store Params pass it to WDI */
2298 pWdaParams->pWdaContext = pWDA;
2299 pWdaParams->wdaMsgParam = startScanParams;
2300 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 /* call DAL API to pass init scan request to DAL */
2302 status = WDI_StartScanReq(wdiStartScanParams,
2303 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 /* failure returned by WDI API */
2305 if(IS_WDI_STATUS_FAILURE(status))
2306 {
2307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2308 "Failure in Start Scan WDI API, free all the memory "
2309 "It should be due to previous abort scan." );
2310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2311 vos_mem_free(pWdaParams) ;
2312 startScanParams->status = eSIR_FAILURE ;
2313 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002315 return CONVERT_WDI2VOS_STATUS(status) ;
2316}
Jeff Johnson295189b2012-06-20 16:38:30 -07002317/*
2318 * FUNCTION: WDA_EndScanReqCallback
2319 * END SCAN callback
2320 */
2321void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2322{
2323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2324 tWDA_CbContext *pWDA;
2325 tEndScanParams *endScanParam;
2326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002327 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 if(NULL == pWdaParams)
2329 {
2330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002331 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 VOS_ASSERT(0) ;
2333 return ;
2334 }
2335 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2336 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002337 if(NULL == endScanParam)
2338 {
2339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002340 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2343 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 return ;
2345 }
2346
2347 /* Free WDI command buffer */
2348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2349 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002350 /* assign status to scan params */
2351 endScanParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002352 /* send response back to PE */
2353 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2354 return ;
2355}
2356
Jeff Johnson295189b2012-06-20 16:38:30 -07002357/*
2358 * FUNCTION: WDA_ProcessEndScanReq
2359 * Trigger END SCAN in WDI
2360 */
2361VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2362 tEndScanParams *endScanParams)
2363{
2364 WDI_Status status = WDI_STATUS_SUCCESS;
2365 WDI_EndScanReqParamsType *wdiEndScanParams =
2366 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2367 sizeof(WDI_EndScanReqParamsType)) ;
2368 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002370 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 if(NULL == wdiEndScanParams)
2372 {
2373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002374 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002375 VOS_ASSERT(0);
2376 return VOS_STATUS_E_NOMEM;
2377 }
2378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2379 if(NULL == pWdaParams)
2380 {
2381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 VOS_ASSERT(0);
2384 vos_mem_free(wdiEndScanParams);
2385 return VOS_STATUS_E_NOMEM;
2386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002387 /* Copy init Scan params to WDI structure */
2388 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2389 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 /* Store Init Req pointer, as this will be used for response */
2391 /* store Params pass it to WDI */
2392 pWdaParams->pWdaContext = pWDA;
2393 pWdaParams->wdaMsgParam = endScanParams;
2394 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 /* call DAL API to pass init scan request to DAL */
2396 status = WDI_EndScanReq(wdiEndScanParams,
2397 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002398 if(IS_WDI_STATUS_FAILURE(status))
2399 {
2400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2401 "Failure in End Scan WDI API, free all the memory "
2402 "It should be due to previous abort scan." );
2403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2404 vos_mem_free(pWdaParams) ;
2405 endScanParams->status = eSIR_FAILURE ;
2406 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 return CONVERT_WDI2VOS_STATUS(status) ;
2409}
Jeff Johnson295189b2012-06-20 16:38:30 -07002410/*
2411 * FUNCTION: WDA_FinishScanReqCallback
2412 * Trigger Finish SCAN callback
2413 */
2414void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2415{
2416 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2417 tWDA_CbContext *pWDA;
2418 tFinishScanParams *finishScanParam;
2419 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002421 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 if(NULL == pWdaParams)
2423 {
2424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002425 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002426 VOS_ASSERT(0) ;
2427 return ;
2428 }
2429
2430 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2431 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002432 if(NULL == finishScanParam)
2433 {
2434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002435 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002437 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2438 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 return ;
2440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2442 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 /*
2444 * Now Resume TX, if we reached here means, TX is already suspended, we
2445 * have to resume it unconditionaly
2446 */
2447 status = WDA_ResumeDataTx(pWDA) ;
2448
2449 if(VOS_STATUS_SUCCESS != status)
2450 {
2451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002452 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 finishScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002455 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2456 return ;
2457}
Jeff Johnson295189b2012-06-20 16:38:30 -07002458/*
2459 * FUNCTION: WDA_ProcessFinshScanReq
2460 * Trigger Finish SCAN in WDI
2461 */
2462VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2463 tFinishScanParams *finishScanParams)
2464{
2465 WDI_Status status = WDI_STATUS_SUCCESS;
2466 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2467 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2468 sizeof(WDI_FinishScanReqParamsType)) ;
2469 tWDA_ReqParams *pWdaParams ;
2470 tANI_U8 i = 0;
2471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002472 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 if(NULL == wdiFinishScanParams)
2474 {
2475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002476 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 VOS_ASSERT(0);
2478 return VOS_STATUS_E_NOMEM;
2479 }
2480 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2481 if(NULL == pWdaParams)
2482 {
2483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 VOS_ASSERT(0);
2486 vos_mem_free(wdiFinishScanParams);
2487 return VOS_STATUS_E_NOMEM;
2488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 /* Copy init Scan params to WDI structure */
2490 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2491 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2492 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2494 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2495 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2496 finishScanParams->frameLength ;
2497 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2498 finishScanParams->currentOperChannel ;
2499 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2500 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2501 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2503 {
2504 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2505 finishScanParams->scanEntry.bssIdx[i] ;
2506 }
2507
2508
Jeff Johnson295189b2012-06-20 16:38:30 -07002509 /* if Frame length, copy macMgmtHdr ro WDI structure */
2510 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2511 {
2512 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2513 &finishScanParams->macMgmtHdr,
2514 sizeof(WDI_MacMgmtHdr)) ;
2515 }
2516 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002517 /* Store Init Req pointer, as this will be used for response */
2518 /* store Params pass it to WDI */
2519 pWdaParams->pWdaContext = pWDA;
2520 pWdaParams->wdaMsgParam = finishScanParams;
2521 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 /* call DAL API to pass init scan request to DAL */
2523 status = WDI_FinishScanReq(wdiFinishScanParams,
2524 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002525
Jeff Johnson295189b2012-06-20 16:38:30 -07002526
2527 /*
2528 * WDI API returns failure..
2529 */
2530 if(IS_WDI_STATUS_FAILURE( status))
2531 {
2532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2533 "Failure in Finish Scan WDI API, free all the memory " );
2534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2535 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002536 finishScanParams->status = eSIR_FAILURE ;
2537 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 return CONVERT_WDI2VOS_STATUS(status) ;
2540}
Jeff Johnson295189b2012-06-20 16:38:30 -07002541/*---------------------------------------------------------------------
2542 * ASSOC API's
2543 *---------------------------------------------------------------------
2544 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002545/*
2546 * FUNCTION: WDA_JoinReqCallback
2547 * Trigger Init SCAN callback
2548 */
2549void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2550{
2551 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2552 tWDA_CbContext *pWDA;
2553 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002555 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002556 if(NULL == pWdaParams)
2557 {
2558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002559 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002560 VOS_ASSERT(0) ;
2561 return ;
2562 }
2563 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2564 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2566 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 /* reset macBSSID */
2568 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 /* reset macSTASelf */
2570 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 joinReqParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002572 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 return ;
2574}
Jeff Johnson295189b2012-06-20 16:38:30 -07002575/*
2576 * FUNCTION: WDA_ProcessJoinReq
2577 * Trigger Join REQ in WDI
2578 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002579VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2580 tSwitchChannelParams* joinReqParam)
2581{
2582 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 WDI_JoinReqParamsType *wdiJoinReqParam =
2584 (WDI_JoinReqParamsType *)vos_mem_malloc(
2585 sizeof(WDI_JoinReqParamsType)) ;
2586 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002588 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 if(NULL == wdiJoinReqParam)
2590 {
2591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002593 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002594 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 return VOS_STATUS_E_NOMEM;
2596 }
2597 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2598 if(NULL == pWdaParams)
2599 {
2600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002602 VOS_ASSERT(0);
2603 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002604 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 return VOS_STATUS_E_NOMEM;
2606 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002607
2608 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2609 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2610 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2611 {
2612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2613 "%s: received join request when BSSID or self-STA is NULL "
2614 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002615 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002616 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2617 VOS_ASSERT(0);
2618 vos_mem_free(wdiJoinReqParam);
2619 vos_mem_free(pWdaParams);
2620 joinReqParam->status = eSIR_FAILURE ;
2621 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2622 return VOS_STATUS_E_INVAL;
2623 }
2624
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 /* copy the BSSID for pWDA */
2626 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2627 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002628 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2629 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002630 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2631 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002632#ifdef WLAN_FEATURE_VOWIFI
2633 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2634 joinReqParam->maxTxPower ;
2635#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2637 joinReqParam->localPowerConstraint ;
2638#endif
2639 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2640 joinReqParam->secondaryChannelOffset ;
2641 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2642
2643 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002644 /* Store Init Req pointer, as this will be used for response */
2645 /* store Params pass it to WDI */
2646 pWdaParams->pWdaContext = pWDA;
2647 pWdaParams->wdaMsgParam = joinReqParam;
2648 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002649 status = WDI_JoinReq(wdiJoinReqParam,
2650 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002651 if(IS_WDI_STATUS_FAILURE(status))
2652 {
2653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2654 "Failure in Join WDI API, free all the memory " );
2655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2656 vos_mem_free(pWdaParams) ;
2657 joinReqParam->status = eSIR_FAILURE ;
2658 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2659 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 return CONVERT_WDI2VOS_STATUS(status) ;
2661}
Jeff Johnson295189b2012-06-20 16:38:30 -07002662/*
2663 * FUNCTION: WDA_SwitchChannelReqCallback
2664 * send Switch channel RSP back to PE
2665 */
2666void WDA_SwitchChannelReqCallback(
2667 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2668{
2669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2670 tWDA_CbContext *pWDA;
2671 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002673 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 if(NULL == pWdaParams)
2675 {
2676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002677 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 VOS_ASSERT(0) ;
2679 return ;
2680 }
2681 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2682 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2683
2684#ifdef WLAN_FEATURE_VOWIFI
2685 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2686#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2688 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 pSwitchChanParams->status =
2690 CONVERT_WDI2SIR_STATUS(wdiSwitchChanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002691 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 return ;
2693}
Jeff Johnson295189b2012-06-20 16:38:30 -07002694/*
2695 * FUNCTION: WDA_ProcessChannelSwitchReq
2696 * Request to WDI to switch channel REQ params.
2697 */
2698VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2699 tSwitchChannelParams *pSwitchChanParams)
2700{
2701 WDI_Status status = WDI_STATUS_SUCCESS ;
2702 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2703 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2704 sizeof(WDI_SwitchChReqParamsType)) ;
2705 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002707 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 if(NULL == wdiSwitchChanParam)
2709 {
2710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002711 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 VOS_ASSERT(0);
2713 return VOS_STATUS_E_NOMEM;
2714 }
2715 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2716 if(NULL == pWdaParams)
2717 {
2718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002719 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 VOS_ASSERT(0);
2721 vos_mem_free(wdiSwitchChanParam);
2722 return VOS_STATUS_E_NOMEM;
2723 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002724 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2725#ifndef WLAN_FEATURE_VOWIFI
2726 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2727 pSwitchChanParams->localPowerConstraint;
2728#endif
2729 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2730 pSwitchChanParams->secondaryChannelOffset;
2731 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 /* Store req pointer, as this will be used for response */
2733 /* store Params pass it to WDI */
2734 pWdaParams->pWdaContext = pWDA;
2735 pWdaParams->wdaMsgParam = pSwitchChanParams;
2736 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002737#ifdef WLAN_FEATURE_VOWIFI
2738 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2739 = pSwitchChanParams->maxTxPower;
2740 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2741 pSwitchChanParams ->selfStaMacAddr,
2742 sizeof(tSirMacAddr));
2743#endif
2744 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2745 pSwitchChanParams->bssId,
2746 sizeof(tSirMacAddr));
2747
2748 status = WDI_SwitchChReq(wdiSwitchChanParam,
2749 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 if(IS_WDI_STATUS_FAILURE(status))
2751 {
2752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2753 "Failure in process channel switch Req WDI API, free all the memory " );
2754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2755 vos_mem_free(pWdaParams) ;
2756 pSwitchChanParams->status = eSIR_FAILURE ;
2757 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 return CONVERT_WDI2VOS_STATUS(status) ;
2760}
Jeff Johnson295189b2012-06-20 16:38:30 -07002761/*
2762 * FUNCTION: WDA_ConfigBssReqCallback
2763 * config BSS Req Callback, called by WDI
2764 */
2765void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2766 ,void* pUserData)
2767{
2768 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2769 tWDA_CbContext *pWDA;
2770 tAddBssParams *configBssReqParam;
2771 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002773 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 if(NULL == pWdaParams)
2775 {
2776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002777 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 VOS_ASSERT(0) ;
2779 return ;
2780 }
2781 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2782 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2783 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 configBssReqParam->status =
2785 CONVERT_WDI2SIR_STATUS(wdiConfigBssRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002786 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2787 {
2788 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2789 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2791 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2792 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2793
2794 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2795 {
2796 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2797 {
2798 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2799 staConfigBssParam->staType = STA_ENTRY_BSSID;
2800 }
2801 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2802 (staConfigBssParam->staType == STA_ENTRY_SELF))
2803 {
2804 /* This is the 1st add BSS Req for the BTAMP STA */
2805 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2806 staConfigBssParam->staType = STA_ENTRY_BSSID;
2807 }
2808 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2809 (staConfigBssParam->staType == STA_ENTRY_PEER))
2810 {
2811 /* This is the 2nd ADD BSS Request that is sent
2812 * on the BTAMP STA side. The Sta type is
2813 * set to STA_ENTRY_PEER here.*/
2814 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2815 }
2816 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2817 (staConfigBssParam->staType == STA_ENTRY_SELF))
2818 {
2819 /* statype is already set by PE.
2820 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2821 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2822 staConfigBssParam->staType = STA_ENTRY_BSSID;
2823 }
2824 else
2825 {
2826 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2827 staConfigBssParam->staType = STA_ENTRY_PEER;
2828 }
2829 }
2830 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2831 {
2832 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2833 staConfigBssParam->staType = STA_ENTRY_SELF;
2834 }
2835 else
2836 {
2837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2838 "Invalid operation mode specified");
2839 VOS_ASSERT(0);
2840 }
2841
2842 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2847 sizeof(tSirMacAddr));
2848 staConfigBssParam->txChannelWidthSet =
2849 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2851 staConfigBssParam->htCapable)
2852 {
2853 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2854 wdiConfigBssRsp->ucBSSIdx;
2855 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2856 WDA_VALID_STA_INDEX ;
2857 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2859 wdiConfigBssRsp->ucBSSIdx,
2860 wdiConfigBssRsp->ucSTAIdx))
2861 {
2862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002863 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 VOS_ASSERT(0) ;
2865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002866 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2867 {
2868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002869 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002870 VOS_ASSERT(0) ;
2871 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002872#ifdef WLAN_FEATURE_VOWIFI
2873 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2874#endif
2875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2877 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002878 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 return ;
2880}
Jeff Johnson295189b2012-06-20 16:38:30 -07002881/*
2882 * FUNCTION: WDA_UpdateEdcaParamsForAC
2883 * Update WDI EDCA params with PE edca params
2884 */
2885void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2886 WDI_EdcaParamRecord *wdiEdcaParam,
2887 tSirMacEdcaParamRecord *macEdcaParam)
2888{
2889 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2890 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2891 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2892 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2893 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2894 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2895}
Jeff Johnson295189b2012-06-20 16:38:30 -07002896/*
2897 * FUNCTION: WDA_ProcessConfigBssReq
2898 * Configure BSS before starting Assoc with AP
2899 */
2900VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2901 tAddBssParams* configBssReqParam)
2902{
2903 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2905 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2906 sizeof(WDI_ConfigBSSReqParamsType)) ;
2907 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002909 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 if(NULL == wdiConfigBssReqParam)
2911 {
2912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 VOS_ASSERT(0);
2915 return VOS_STATUS_E_NOMEM;
2916 }
2917 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2918 if(NULL == pWdaParams)
2919 {
2920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 VOS_ASSERT(0);
2923 vos_mem_free(wdiConfigBssReqParam);
2924 return VOS_STATUS_E_NOMEM;
2925 }
Kiran4a17ebe2013-01-31 10:43:43 -08002926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2927 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002928 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2930 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 /* Store Init Req pointer, as this will be used for response */
2932 /* store Params pass it to WDI */
2933 pWdaParams->pWdaContext = pWDA;
2934 pWdaParams->wdaMsgParam = configBssReqParam;
2935 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2937 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002938 if(IS_WDI_STATUS_FAILURE(status))
2939 {
2940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2941 "Failure in Config BSS WDI API, free all the memory " );
2942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2943 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 return CONVERT_WDI2VOS_STATUS(status) ;
2948}
Jeff Johnson295189b2012-06-20 16:38:30 -07002949#ifdef ENABLE_HAL_COMBINED_MESSAGES
2950/*
2951 * FUNCTION: WDA_PostAssocReqCallback
2952 * Post ASSOC req callback, send RSP back to PE
2953 */
2954void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2955 void* pUserData)
2956{
2957 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2958 tPostAssocParams *postAssocReqParam =
2959 (tPostAssocParams *)pWDA->wdaMsgParam ;
2960 /*STA context within the BSS Params*/
2961 tAddStaParams *staPostAssocParam =
2962 &postAssocReqParam->addBssParams.staContext ;
2963 /*STA Params for self STA*/
2964 tAddStaParams *selfStaPostAssocParam =
2965 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002967 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 postAssocReqParam->status =
2969 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2971 {
2972 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2973 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2974 sizeof(tSirMacAddr)) ;
2975 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2976 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2977 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2979 }
2980 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2981 pWDA->wdaWdiApiMsgParam = NULL;
2982 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 return ;
2985}
Jeff Johnson295189b2012-06-20 16:38:30 -07002986/*
2987 * FUNCTION: WDA_ProcessPostAssocReq
2988 * Trigger POST ASSOC processing in WDI
2989 */
2990VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2991 tPostAssocParams *postAssocReqParam)
2992{
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 WDI_Status status = WDI_STATUS_SUCCESS ;
2994
2995 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2996 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2997 sizeof(WDI_PostAssocReqParamsType)) ;
2998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002999 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003000
Jeff Johnson295189b2012-06-20 16:38:30 -07003001 if(NULL == wdiPostAssocReqParam)
3002 {
3003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003004 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003005 VOS_ASSERT(0);
3006 return VOS_STATUS_E_NOMEM;
3007 }
3008
3009 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3010 {
3011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003012 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 VOS_ASSERT(0);
3014 return VOS_STATUS_E_FAILURE;
3015 }
3016
Jeff Johnson295189b2012-06-20 16:38:30 -07003017 /* update BSS params into WDI structure */
3018 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3019 &postAssocReqParam->addBssParams) ;
3020 /* update STA params into WDI structure */
3021 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3022 &postAssocReqParam->addStaParams) ;
3023
3024 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3025 postAssocReqParam->addBssParams.highPerformance;
3026 WDA_UpdateEdcaParamsForAC(pWDA,
3027 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3028 &postAssocReqParam->addBssParams.acbe);
3029 WDA_UpdateEdcaParamsForAC(pWDA,
3030 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3031 &postAssocReqParam->addBssParams.acbk);
3032 WDA_UpdateEdcaParamsForAC(pWDA,
3033 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3034 &postAssocReqParam->addBssParams.acvi);
3035 WDA_UpdateEdcaParamsForAC(pWDA,
3036 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3037 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 /* Store Init Req pointer, as this will be used for response */
3039 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 /* store Params pass it to WDI */
3041 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3043 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 if(IS_WDI_STATUS_FAILURE(status))
3045 {
3046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3047 "Failure in Post Assoc WDI API, free all the memory " );
3048 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3049 pWDA->wdaWdiApiMsgParam = NULL;
3050 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 return CONVERT_WDI2VOS_STATUS(status) ;
3055}
3056#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003057/*
3058 * FUNCTION: WDA_AddStaReqCallback
3059 * ADD STA req callback, send RSP back to PE
3060 */
3061void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3062 void* pUserData)
3063{
3064 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3065 tWDA_CbContext *pWDA;
3066 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003068 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 if(NULL == pWdaParams)
3070 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 VOS_ASSERT(0) ;
3073 return ;
3074 }
3075 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3076 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 addStaReqParam->status =
3078 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003079 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3080 {
3081 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3082 /*TODO: UMAC structure doesn't have these fields*/
3083 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3084 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3085 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3086 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3087 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3088 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003089#ifdef FEATURE_WLAN_TDLS
3090 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3091 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3092#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003094#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 {
3096 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3097 wdiConfigStaRsp->ucBssIdx;
3098 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3099 WDA_VALID_STA_INDEX ;
3100 }
3101 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3102 {
3103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003104 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 VOS_ASSERT(0) ;
3106 return ;
3107 }
3108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3110 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 return ;
3113}
Jeff Johnson295189b2012-06-20 16:38:30 -07003114/*
3115 * FUNCTION: WDA_ConfigStaReq
3116 * Trigger Config STA processing in WDI
3117 */
3118VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3119 tAddStaParams *addStaReqParam)
3120{
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3123 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3124 sizeof(WDI_ConfigSTAReqParamsType)) ;
3125 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003127 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 if(NULL == wdiConfigStaReqParam)
3129 {
3130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003132 VOS_ASSERT(0);
3133 return VOS_STATUS_E_NOMEM;
3134 }
3135 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3136 if(NULL == pWdaParams)
3137 {
3138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003139 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003140 VOS_ASSERT(0);
3141 vos_mem_free(wdiConfigStaReqParam);
3142 return VOS_STATUS_E_NOMEM;
3143 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 /* update STA params into WDI structure */
3146 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3147 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 /* Store Init Req pointer, as this will be used for response */
3149 /* store Params pass it to WDI */
3150 pWdaParams->pWdaContext = pWDA;
3151 pWdaParams->wdaMsgParam = addStaReqParam;
3152 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003153 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3154 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003155 if(IS_WDI_STATUS_FAILURE(status))
3156 {
3157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3158 "Failure in Config STA WDI API, free all the memory " );
3159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3160 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 return CONVERT_WDI2VOS_STATUS(status) ;
3165}
Jeff Johnson295189b2012-06-20 16:38:30 -07003166/*
3167 * FUNCTION: WDA_DelBSSReqCallback
3168 * Dens DEL BSS RSP back to PE
3169 */
3170void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3171 void* pUserData)
3172{
3173 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3174 tWDA_CbContext *pWDA;
3175 tDeleteBssParams *delBssReqParam;
3176 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003178 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 if(NULL == pWdaParams)
3180 {
3181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003182 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 VOS_ASSERT(0) ;
3184 return ;
3185 }
3186 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3187 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003188 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3190 {
3191 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3192 sizeof(tSirMacAddr)) ;
3193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003194 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3195 {
3196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003197 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 VOS_ASSERT(0) ;
3199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3201 {
3202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003203 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003204 VOS_ASSERT(0) ;
3205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3207 {
3208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003209 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 VOS_ASSERT(0) ;
3211 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3213 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 /* reset the the system role*/
3215 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3216
3217 /* Reset the BA related information */
3218 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3219 {
3220 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3221 {
3222 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3223 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3224 /* Reset framesTxed counters here */
3225 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3226 {
3227 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3228 }
3229 }
3230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 return ;
3233}
3234
Jeff Johnson295189b2012-06-20 16:38:30 -07003235/*
3236 * FUNCTION: WDA_ProcessDelBssReq
3237 * Init DEL BSS req with WDI
3238 */
3239VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3240 tDeleteBssParams *delBssParam)
3241{
3242 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003243 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3244 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3245 sizeof(WDI_DelBSSReqParamsType)) ;
3246 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003248 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 if(NULL == wdiDelBssReqParam)
3250 {
3251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003252 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 VOS_ASSERT(0);
3254 return VOS_STATUS_E_NOMEM;
3255 }
3256 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3257 if(NULL == pWdaParams)
3258 {
3259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003260 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 VOS_ASSERT(0);
3262 vos_mem_free(wdiDelBssReqParam);
3263 return VOS_STATUS_E_NOMEM;
3264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3266 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3267
3268 /* Store Init Req pointer, as this will be used for response */
3269 /* store Params pass it to WDI */
3270 pWdaParams->pWdaContext = pWDA;
3271 pWdaParams->wdaMsgParam = delBssParam;
3272 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 status = WDI_DelBSSReq(wdiDelBssReqParam,
3274 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 if(IS_WDI_STATUS_FAILURE(status))
3276 {
3277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3278 "Failure in Del BSS WDI API, free all the memory " );
3279 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3280 vos_mem_free(pWdaParams) ;
3281 delBssParam->status = eSIR_FAILURE ;
3282 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3283 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 return CONVERT_WDI2VOS_STATUS(status) ;
3285}
Jeff Johnson295189b2012-06-20 16:38:30 -07003286/*
3287 * FUNCTION: WDA_DelSTAReqCallback
3288 * Dens DEL STA RSP back to PE
3289 */
3290void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3291 void* pUserData)
3292{
3293 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3294 tWDA_CbContext *pWDA;
3295 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003297 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003298 if(NULL == pWdaParams)
3299 {
3300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003301 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 VOS_ASSERT(0) ;
3303 return ;
3304 }
3305 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3306 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3309 {
3310 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3311 {
3312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 VOS_ASSERT(0) ;
3315 }
3316 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3317 }
3318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3319 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 /*Reset the BA information corresponding to this STAIdx */
3321 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3322 WDA_INVALID_STA_INDEX;
3323 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3324
3325 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 return ;
3327}
Jeff Johnson295189b2012-06-20 16:38:30 -07003328/*
3329 * FUNCTION: WDA_ProcessDelStaReq
3330 * Init DEL STA req with WDI
3331 */
3332VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3333 tDeleteStaParams *delStaParam)
3334{
3335 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3337 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3338 sizeof(WDI_DelSTAReqParamsType)) ;
3339 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003341 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 if(NULL == wdiDelStaReqParam)
3343 {
3344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003345 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 VOS_ASSERT(0);
3347 return VOS_STATUS_E_NOMEM;
3348 }
3349 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3350 if(NULL == pWdaParams)
3351 {
3352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003353 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003354 VOS_ASSERT(0);
3355 vos_mem_free(wdiDelStaReqParam);
3356 return VOS_STATUS_E_NOMEM;
3357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003358 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3359 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 /* Store Init Req pointer, as this will be used for response */
3361 /* store Params pass it to WDI */
3362 pWdaParams->pWdaContext = pWDA;
3363 pWdaParams->wdaMsgParam = delStaParam;
3364 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 status = WDI_DelSTAReq(wdiDelStaReqParam,
3366 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003367 if(IS_WDI_STATUS_FAILURE(status))
3368 {
3369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3370 "Failure in Del STA WDI API, free all the memory status = %d",
3371 status );
3372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3373 vos_mem_free(pWdaParams) ;
3374 delStaParam->status = eSIR_FAILURE ;
3375 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003377 return CONVERT_WDI2VOS_STATUS(status) ;
3378}
Jeff Johnson295189b2012-06-20 16:38:30 -07003379void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3380{
3381 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3382 tWDA_CbContext *pWDA;
3383 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003385 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 if(NULL == pWdaParams)
3387 {
3388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003389 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003390 VOS_ASSERT(0) ;
3391 return ;
3392 }
3393 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3394 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3396 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3398 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3399 pwdiAddSTASelfRsp->macSelfSta,
3400 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003401 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 return ;
3403}
Jeff Johnson295189b2012-06-20 16:38:30 -07003404/*
3405 * FUNCTION: WDA_ProcessAddStaSelfReq
3406 *
3407 */
3408VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3409{
3410 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003411 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3413 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3414 sizeof(WDI_AddSTASelfReqParamsType)) ;
3415 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003417 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 if( NULL == wdiAddStaSelfReq )
3419 {
3420 VOS_ASSERT( 0 );
3421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003422 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003423 return( VOS_STATUS_E_NOMEM );
3424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003425 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003426 if( NULL == pWdaParams )
3427 {
3428 VOS_ASSERT( 0 );
3429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003430 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 vos_mem_free(wdiAddStaSelfReq) ;
3432 return( VOS_STATUS_E_NOMEM );
3433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003434 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003435 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3436 /* Store Init Req pointer, as this will be used for response */
3437 /* store Params pass it to WDI */
3438 pWdaParams->pWdaContext = pWDA;
3439 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3440 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003441 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003442
Jeff Johnson43971f52012-07-17 12:26:56 -07003443 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003444 {
3445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3446 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003447 wstatus );
3448 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003449 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3450 vos_mem_free(pWdaParams) ;
3451 pAddStaSelfReq->status = eSIR_FAILURE ;
3452 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3453 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003454 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003455}
Jeff Johnson295189b2012-06-20 16:38:30 -07003456/*
3457 * FUNCTION: WDA_DelSTASelfRespCallback
3458 *
3459 */
3460void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3461 wdiDelStaSelfRspParams , void* pUserData)
3462{
3463 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3464 tWDA_CbContext *pWDA;
3465 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003467 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003468 if (NULL == pWdaParams)
3469 {
3470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003471 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 VOS_ASSERT(0);
3473 return;
3474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003475 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3476 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 delStaSelfParams->status =
3478 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3479
3480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3481 vos_mem_free(pWdaParams) ;
3482
3483 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 return ;
3485}
Jeff Johnson295189b2012-06-20 16:38:30 -07003486/*
3487 * FUNCTION: WDA_DelSTASelfReqCallback
3488 *
3489 */
3490void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3491 void* pUserData)
3492{
3493 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3494 tWDA_CbContext *pWDA;
3495 tDelStaSelfParams *delStaSelfParams;
3496
3497 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3498 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003499 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003500
3501 if (NULL == pWdaParams)
3502 {
3503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003504 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 VOS_ASSERT(0);
3506 return;
3507 }
3508
3509 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3510 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3511
3512 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3513
3514 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3515 {
3516 VOS_ASSERT(0);
3517 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3518 vos_mem_free(pWdaParams) ;
3519 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3520 }
3521
3522 return ;
3523}
3524
3525/*
3526 * FUNCTION: WDA_DelSTASelfReq
3527 * Trigger Config STA processing in WDI
3528 */
3529VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3530 tDelStaSelfParams* pDelStaSelfReqParam)
3531{
3532 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003533 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 tWDA_ReqParams *pWdaParams = NULL;
3535 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3536 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3537 sizeof(WDI_DelSTASelfReqParamsType)) ;
3538
Jeff Johnson295189b2012-06-20 16:38:30 -07003539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003540 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 if( NULL == wdiDelStaSelfReq )
3542 {
3543 VOS_ASSERT( 0 );
3544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003545 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003546 return( VOS_STATUS_E_NOMEM );
3547 }
3548
3549 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3550 if( NULL == pWdaParams )
3551 {
3552 VOS_ASSERT( 0 );
3553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003554 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 vos_mem_free(wdiDelStaSelfReq) ;
3556 return( VOS_STATUS_E_NOMEM );
3557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 pWdaParams->pWdaContext = pWDA;
3559 /* Store param pointer as passed in by caller */
3560 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3561 /* store Params pass it to WDI */
3562 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3564 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3565
3566 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3567 wdiDelStaSelfReq->pUserData = pWdaParams;
3568
Jeff Johnson43971f52012-07-17 12:26:56 -07003569 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3571
Jeff Johnson43971f52012-07-17 12:26:56 -07003572 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 {
3574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3575 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3576 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003577 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3579 vos_mem_free(pWdaParams) ;
3580 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3581 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3582 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003583 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003584}
3585
Jeff Johnson295189b2012-06-20 16:38:30 -07003586/*
3587 * FUNCTION: WDA_SendMsg
3588 * Send Message back to PE
3589 */
3590void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3591 void *pBodyptr, tANI_U32 bodyVal)
3592{
3593 tSirMsgQ msg = {0} ;
3594 tANI_U32 status = VOS_STATUS_SUCCESS ;
3595 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 msg.type = msgType;
3597 msg.bodyval = bodyVal;
3598 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 if (VOS_STATUS_SUCCESS != status)
3601 {
3602 if(NULL != pBodyptr)
3603 {
3604 vos_mem_free(pBodyptr);
3605 }
3606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003607 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003608 VOS_ASSERT(0) ;
3609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003610 return ;
3611}
Jeff Johnson295189b2012-06-20 16:38:30 -07003612/*
3613 * FUNCTION: WDA_UpdateBSSParams
3614 * Translated WDA/PE BSS info into WDI BSS info..
3615 */
3616void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3617 WDI_ConfigBSSReqInfoType *wdiBssParams,
3618 tAddBssParams *wdaBssParams)
3619{
3620 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 /* copy bssReq Params to WDI structure */
3622 vos_mem_copy(wdiBssParams->macBSSID,
3623 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3624 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3625 sizeof(tSirMacAddr)) ;
3626 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3627 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3628 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 wdiBssParams->ucShortSlotTimeSupported =
3630 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003631 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3632 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3633 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3634 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3635 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3636
3637 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3638 wdiBssParams->ucTXOPProtectionFullSupport =
3639 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3641 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3644 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3645 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3646 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3647
3648 /* copy SSID into WDI structure */
3649 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3650 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3651 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003652 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3653 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003655#ifdef WLAN_FEATURE_VOWIFI
3656 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3657#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003660#ifdef WLAN_FEATURE_VOWIFI_11R
3661 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 if(wdiBssParams->bExtSetStaKeyParamValid)
3663 {
3664 /* copy set STA key params to WDI structure */
3665 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3666 wdaBssParams->extSetStaKeyParam.staIdx;
3667 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3668 wdaBssParams->extSetStaKeyParam.encType;
3669 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3670 wdaBssParams->extSetStaKeyParam.wepType;
3671 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3672 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003673 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3674 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003675 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3677 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3678 {
3679 WDA_GetWepKeysFromCfg( pWDA,
3680 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3681 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3682 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3683 }
3684 else
3685 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3687 keyIndex++)
3688 {
3689 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3690 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3691 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3692 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3693 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3694 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3696 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3697 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3698 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3699 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3700 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3701 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3702 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3703 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003704 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3705 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003706 }
3707 }
3708 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3709 }
3710 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3711 {
3712 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3713 sizeof(wdaBssParams->extSetStaKeyParam) );
3714 }
3715#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003716#ifdef WLAN_FEATURE_11AC
3717 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3718 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3719#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003720
3721 return ;
3722}
Jeff Johnson295189b2012-06-20 16:38:30 -07003723/*
3724 * FUNCTION: WDA_UpdateSTAParams
3725 * Translated WDA/PE BSS info into WDI BSS info..
3726 */
3727void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3728 WDI_ConfigStaReqInfoType *wdiStaParams,
3729 tAddStaParams *wdaStaParams)
3730{
3731 tANI_U8 i = 0;
3732 /* Update STA params */
3733 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3734 sizeof(tSirMacAddr)) ;
3735 wdiStaParams->usAssocId = wdaStaParams->assocId;
3736 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3737
3738 wdiStaParams->ucShortPreambleSupported =
3739 wdaStaParams->shortPreambleSupported;
3740 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3741 sizeof(tSirMacAddr)) ;
3742 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3743
3744 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3745
3746 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3747 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3748 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3749 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3750 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3751 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3752 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3753
3754 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3755 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 wdiStaParams->wdiSupportedRates.opRateMode =
3757 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3759 {
3760 wdiStaParams->wdiSupportedRates.llbRates[i] =
3761 wdaStaParams->supportedRates.llbRates[i];
3762 }
3763 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3764 {
3765 wdiStaParams->wdiSupportedRates.llaRates[i] =
3766 wdaStaParams->supportedRates.llaRates[i];
3767 }
3768 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3769 {
3770 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3771 wdaStaParams->supportedRates.aniLegacyRates[i];
3772 }
3773 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3774 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003775#ifdef WLAN_FEATURE_11AC
3776 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3777 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3778 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3779 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3780#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003781 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3782 {
3783 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3784 wdaStaParams->supportedRates.supportedMCSSet[i];
3785 }
3786 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3787 wdaStaParams->supportedRates.rxHighestDataRate;
3788
3789 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3790
3791 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3792
3793 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3794 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3795 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3796
3797 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3798 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3799 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3800 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3801#ifdef WLAN_FEATURE_P2P
3802 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3803#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003804#ifdef WLAN_FEATURE_11AC
3805 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3806 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003807 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003808#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003809 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3810 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 return ;
3812}
Jeff Johnson295189b2012-06-20 16:38:30 -07003813/*
3814 * -------------------------------------------------------------------------
3815 * CFG update to WDI
3816 * -------------------------------------------------------------------------
3817 */
3818
3819 /*
3820 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3821 * Convert the WNI CFG ID to HAL CFG ID
3822 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003823static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003824{
3825 switch(wniCfgId)
3826 {
3827 case WNI_CFG_STA_ID:
3828 return QWLAN_HAL_CFG_STA_ID;
3829 case WNI_CFG_CURRENT_TX_ANTENNA:
3830 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3831 case WNI_CFG_CURRENT_RX_ANTENNA:
3832 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3833 case WNI_CFG_LOW_GAIN_OVERRIDE:
3834 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3835 case WNI_CFG_POWER_STATE_PER_CHAIN:
3836 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3837 case WNI_CFG_CAL_PERIOD:
3838 return QWLAN_HAL_CFG_CAL_PERIOD;
3839 case WNI_CFG_CAL_CONTROL:
3840 return QWLAN_HAL_CFG_CAL_CONTROL;
3841 case WNI_CFG_PROXIMITY:
3842 return QWLAN_HAL_CFG_PROXIMITY;
3843 case WNI_CFG_NETWORK_DENSITY:
3844 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3845 case WNI_CFG_MAX_MEDIUM_TIME:
3846 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3847 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3848 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3849 case WNI_CFG_RTS_THRESHOLD:
3850 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3851 case WNI_CFG_SHORT_RETRY_LIMIT:
3852 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3853 case WNI_CFG_LONG_RETRY_LIMIT:
3854 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3855 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3856 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3857 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3858 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3859 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3860 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3861 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3862 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3863 case WNI_CFG_FIXED_RATE:
3864 return QWLAN_HAL_CFG_FIXED_RATE;
3865 case WNI_CFG_RETRYRATE_POLICY:
3866 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3867 case WNI_CFG_RETRYRATE_SECONDARY:
3868 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3869 case WNI_CFG_RETRYRATE_TERTIARY:
3870 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3871 case WNI_CFG_FORCE_POLICY_PROTECTION:
3872 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3873 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3874 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3875 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3876 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3877 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3878 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3879 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3880 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3881 case WNI_CFG_MAX_BA_SESSIONS:
3882 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3883 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3884 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3885 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3886 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3887 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3888 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3889 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3890 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3891 case WNI_CFG_STATS_PERIOD:
3892 return QWLAN_HAL_CFG_STATS_PERIOD;
3893 case WNI_CFG_CFP_MAX_DURATION:
3894 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3895#if 0 /*This is not part of CFG*/
3896 case WNI_CFG_FRAME_TRANS_ENABLED:
3897 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3898#endif
3899 case WNI_CFG_DTIM_PERIOD:
3900 return QWLAN_HAL_CFG_DTIM_PERIOD;
3901 case WNI_CFG_EDCA_WME_ACBK:
3902 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3903 case WNI_CFG_EDCA_WME_ACBE:
3904 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3905 case WNI_CFG_EDCA_WME_ACVI:
3906 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3907 case WNI_CFG_EDCA_WME_ACVO:
3908 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3909#if 0
3910 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3911 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3912 case WNI_CFG_TELE_BCN_TRANS_LI:
3913 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3914 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3915 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3916 case WNI_CFG_TELE_BCN_MAX_LI:
3917 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3918 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3919 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3920#endif
3921 case WNI_CFG_ENABLE_CLOSE_LOOP:
3922 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003923 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3924 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003925 default:
3926 {
3927 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3928 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3929 wniCfgId);
3930 return VOS_STATUS_E_INVAL;
3931 }
3932 }
3933}
Jeff Johnson295189b2012-06-20 16:38:30 -07003934/*
3935 * FUNCTION: WDA_UpdateCfgCallback
3936 *
3937 */
3938void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3939{
3940 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3941 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3942 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003944 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 /*
3946 * currently there is no response message is expected between PE and
3947 * WDA, Failure return from WDI is a ASSERT condition
3948 */
3949 if(WDI_STATUS_SUCCESS != wdiStatus)
3950 {
3951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003952 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003953 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3954 }
3955
3956 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3957 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3958 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003959 return ;
3960}
Jeff Johnson295189b2012-06-20 16:38:30 -07003961/*
3962 * FUNCTION: WDA_UpdateCfg
3963 *
3964 */
3965VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3966{
3967
3968 WDI_Status status = WDI_STATUS_SUCCESS ;
3969 tANI_U32 val =0;
3970 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3971 tHalCfg *configData;
3972 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3973 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003975 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 if (NULL == pMac )
3977 {
3978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003979 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003980 return VOS_STATUS_E_FAILURE;
3981 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003982 if(WDA_START_STATE != pWDA->wdaState)
3983 {
3984 return VOS_STATUS_E_FAILURE;
3985 }
3986
3987 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3988 {
3989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003990 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003991 VOS_ASSERT(0);
3992 return VOS_STATUS_E_FAILURE;
3993 }
3994
3995 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3996 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 if(NULL == wdiCfgReqParam)
3998 {
3999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004000 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004001 VOS_ASSERT(0);
4002 return VOS_STATUS_E_NOMEM;
4003 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4005 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 if(NULL == wdiCfgReqParam->pConfigBuffer)
4007 {
4008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004009 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 vos_mem_free(wdiCfgReqParam);
4011 VOS_ASSERT(0);
4012 return VOS_STATUS_E_NOMEM;
4013 }
4014
4015 /*convert the WNI CFG Id to HAL CFG Id*/
4016 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4017 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4018
4019 /*TODO: revisit this for handling string parameters */
4020 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4021 &val) != eSIR_SUCCESS)
4022 {
4023 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4024 "Failed to cfg get id %d\n", cfgParam->bodyval);
4025 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4026 vos_mem_free(wdiCfgReqParam);
4027 return eSIR_FAILURE;
4028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004029 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4030 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4031 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4032 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4033 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4034
4035 /* store Params pass it to WDI */
4036 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4038 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4039 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004040 if(IS_WDI_STATUS_FAILURE(status))
4041 {
4042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4043 "Failure in Update CFG WDI API, free all the memory " );
4044 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4045 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4046 pWDA->wdaWdiCfgApiMsgParam = NULL;
4047 /* Failure is not expected */
4048 VOS_ASSERT(0) ;
4049 }
4050#else
4051 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4052 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4053 pWDA->wdaWdiCfgApiMsgParam = NULL;
4054#endif
4055 return CONVERT_WDI2VOS_STATUS(status) ;
4056}
4057
Jeff Johnson295189b2012-06-20 16:38:30 -07004058VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4059 v_U8_t *pDefaultKeyId,
4060 v_U8_t *pNumKeys,
4061 WDI_KeysType *pWdiKeys )
4062{
4063 v_U32_t i, j, defKeyId = 0;
4064 v_U32_t val = SIR_MAC_KEY_LENGTH;
4065 VOS_STATUS status = WDI_STATUS_SUCCESS;
4066 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 if (NULL == pMac )
4068 {
4069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004070 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 return VOS_STATUS_E_FAILURE;
4072 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4074 &defKeyId ))
4075 {
4076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4077 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4078 }
4079
4080 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 /* Need to extract ALL of the configured WEP Keys */
4082 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4083 {
4084 val = SIR_MAC_KEY_LENGTH;
4085 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4086 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4087 pWdiKeys[j].key,
4088 &val ))
4089 {
4090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4091 "WEP Key index [%d] may not configured in CFG\n",i);
4092 }
4093 else
4094 {
4095 pWdiKeys[j].keyId = (tANI_U8) i;
4096 /*
4097 * Actually, a DC (Don't Care) because
4098 * this is determined (and set) by PE/MLME
4099 */
4100 pWdiKeys[j].unicast = 0;
4101 /*
4102 * Another DC (Don't Care)
4103 */
4104 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4105 /* Another DC (Don't Care). Unused for WEP */
4106 pWdiKeys[j].paeRole = 0;
4107 /* Determined from wlan_cfgGetStr() above.*/
4108 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 j++;
4110 *pNumKeys = (tANI_U8) j;
4111 }
4112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004113 return status;
4114}
Jeff Johnson295189b2012-06-20 16:38:30 -07004115/*
4116 * FUNCTION: WDA_SetBssKeyReqCallback
4117 * send SET BSS key RSP back to PE
4118 */
4119void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4120{
4121 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4122 tWDA_CbContext *pWDA;
4123 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004125 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004126 if(NULL == pWdaParams)
4127 {
4128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004129 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 VOS_ASSERT(0) ;
4131 return ;
4132 }
4133 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4134 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4136 vos_mem_free(pWdaParams) ;
4137 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004138 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004139 return ;
4140}
Jeff Johnson295189b2012-06-20 16:38:30 -07004141/*
4142 * FUNCTION: WDA_ProcessSetBssKeyReq
4143 * Request to WDI for programming the BSS key( key for
4144 * broadcast/multicast frames Encryption)
4145 */
4146VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4147 tSetBssKeyParams *setBssKeyParams )
4148{
4149 WDI_Status status = WDI_STATUS_SUCCESS ;
4150 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4151 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4152 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4153 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004154 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004156 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004157 if(NULL == wdiSetBssKeyParam)
4158 {
4159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004160 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 VOS_ASSERT(0);
4162 return VOS_STATUS_E_NOMEM;
4163 }
4164 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4165 if(NULL == pWdaParams)
4166 {
4167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 VOS_ASSERT(0);
4170 vos_mem_free(wdiSetBssKeyParam);
4171 return VOS_STATUS_E_NOMEM;
4172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004173 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 /* copy set BSS params to WDI structure */
4175 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4176 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4177 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 if(setBssKeyParams->encType != eSIR_ED_NONE)
4179 {
4180 if( setBssKeyParams->numKeys == 0 &&
4181 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4182 setBssKeyParams->encType == eSIR_ED_WEP104))
4183 {
4184 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4186 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4187 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4188 }
4189 else
4190 {
4191 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4192 {
4193 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4194 setBssKeyParams->key[keyIndex].keyId;
4195 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4196 setBssKeyParams->key[keyIndex].unicast;
4197 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4198 setBssKeyParams->key[keyIndex].keyDirection;
4199 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4200 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4201 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4202 setBssKeyParams->key[keyIndex].paeRole;
4203 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4204 setBssKeyParams->key[keyIndex].keyLength;
4205 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4206 setBssKeyParams->key[keyIndex].key,
4207 SIR_MAC_MAX_KEY_LENGTH);
4208 }
4209 }
4210 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004211 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4212 setBssKeyParams->singleTidRc;
4213 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004214 /* Store set key pointer, as this will be used for response */
4215 /* store Params pass it to WDI */
4216 pWdaParams->pWdaContext = pWDA;
4217 pWdaParams->wdaMsgParam = setBssKeyParams;
4218 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4220 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4221
4222 if(IS_WDI_STATUS_FAILURE(status))
4223 {
4224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4225 "Failure in Set BSS Key Req WDI API, free all the memory " );
4226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4227 vos_mem_free(pWdaParams) ;
4228 setBssKeyParams->status = eSIR_FAILURE ;
4229 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004231 return CONVERT_WDI2VOS_STATUS(status) ;
4232}
Jeff Johnson295189b2012-06-20 16:38:30 -07004233/*
4234 * FUNCTION: WDA_RemoveBssKeyReqCallback
4235 * send SET BSS key RSP back to PE
4236 */
4237void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4238{
4239 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4240 tWDA_CbContext *pWDA;
4241 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004243 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 if(NULL == pWdaParams)
4245 {
4246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004247 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004248 VOS_ASSERT(0) ;
4249 return ;
4250 }
4251 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4252 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004253 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4254 vos_mem_free(pWdaParams) ;
4255
4256 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004257 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 return ;
4259}
Jeff Johnson295189b2012-06-20 16:38:30 -07004260/*
4261 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4262 * Request to WDI to remove the BSS key( key for broadcast/multicast
4263 * frames Encryption)
4264 */
4265VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4266 tRemoveBssKeyParams *removeBssKeyParams )
4267{
4268 WDI_Status status = WDI_STATUS_SUCCESS ;
4269 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4270 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4271 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4272 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004274 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 if(NULL == wdiRemoveBssKeyParam)
4276 {
4277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004278 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004279 VOS_ASSERT(0);
4280 return VOS_STATUS_E_NOMEM;
4281 }
4282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4283 if(NULL == pWdaParams)
4284 {
4285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 VOS_ASSERT(0);
4288 vos_mem_free(wdiRemoveBssKeyParam);
4289 return VOS_STATUS_E_NOMEM;
4290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004291 /* copy Remove BSS key params to WDI structure*/
4292 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4293 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4294 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4295 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4296 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 /* Store remove key pointer, as this will be used for response */
4298 /* store Params pass it to WDI */
4299 pWdaParams->pWdaContext = pWDA;
4300 pWdaParams->wdaMsgParam = removeBssKeyParams;
4301 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4303 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 if(IS_WDI_STATUS_FAILURE(status))
4305 {
4306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4307 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4309 vos_mem_free(pWdaParams) ;
4310 removeBssKeyParams->status = eSIR_FAILURE ;
4311 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 return CONVERT_WDI2VOS_STATUS(status) ;
4314}
Jeff Johnson295189b2012-06-20 16:38:30 -07004315/*
4316 * FUNCTION: WDA_SetBssKeyReqCallback
4317 * send SET BSS key RSP back to PE
4318 */
4319void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4320{
4321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4322 tWDA_CbContext *pWDA;
4323 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004325 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 if(NULL == pWdaParams)
4327 {
4328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004329 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 VOS_ASSERT(0) ;
4331 return ;
4332 }
4333 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4334 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4336 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004339 return ;
4340}
Jeff Johnson295189b2012-06-20 16:38:30 -07004341/*
4342 * FUNCTION: WDA_ProcessSetStaKeyReq
4343 * Request to WDI for programming the STA key( key for Unicast frames
4344 * Encryption)
4345 */
4346VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4347 tSetStaKeyParams *setStaKeyParams )
4348{
4349 WDI_Status status = WDI_STATUS_SUCCESS ;
4350 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4351 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4352 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4353 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004356 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 if(NULL == wdiSetStaKeyParam)
4358 {
4359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 VOS_ASSERT(0);
4362 return VOS_STATUS_E_NOMEM;
4363 }
4364 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4365 if(NULL == pWdaParams)
4366 {
4367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004368 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004369 VOS_ASSERT(0);
4370 vos_mem_free(wdiSetStaKeyParam);
4371 return VOS_STATUS_E_NOMEM;
4372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004375 /* copy set STA key params to WDI structure */
4376 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4377 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4378 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4379 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 if(setStaKeyParams->encType != eSIR_ED_NONE)
4381 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004382 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004383 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4384 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4385 {
4386 WDA_GetWepKeysFromCfg( pWDA,
4387 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4388 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4389 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4390 }
4391 else
4392 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4394 keyIndex++)
4395 {
4396 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4397 setStaKeyParams->key[keyIndex].keyId;
4398 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4399 setStaKeyParams->key[keyIndex].unicast;
4400 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4401 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004402 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4403 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4404 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4405 setStaKeyParams->key[keyIndex].paeRole;
4406 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4407 setStaKeyParams->key[keyIndex].keyLength;
4408 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4409 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4410 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4411 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4412 {
4413 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4414 }
4415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4417 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004418 }
4419 }
4420 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4421 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004422 /* Store set key pointer, as this will be used for response */
4423 /* store Params pass it to WDI */
4424 pWdaParams->pWdaContext = pWDA;
4425 pWdaParams->wdaMsgParam = setStaKeyParams;
4426 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4428 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 if(IS_WDI_STATUS_FAILURE(status))
4430 {
4431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4432 "Failure in set STA Key Req WDI API, free all the memory " );
4433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4434 vos_mem_free(pWdaParams) ;
4435 setStaKeyParams->status = eSIR_FAILURE ;
4436 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004438 return CONVERT_WDI2VOS_STATUS(status) ;
4439}
Jeff Johnson295189b2012-06-20 16:38:30 -07004440/*
4441 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4442 * send SET Bcast STA key RSP back to PE
4443 */
4444void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4445{
4446 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4447 tWDA_CbContext *pWDA;
4448 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004450 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 if(NULL == pWdaParams)
4452 {
4453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004454 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004455 VOS_ASSERT(0) ;
4456 return ;
4457 }
4458 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4459 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4461 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004463 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 return ;
4465}
4466
Jeff Johnson295189b2012-06-20 16:38:30 -07004467/*
4468 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4469 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4470 * Encryption)
4471 */
4472VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4473 tSetStaKeyParams *setStaKeyParams )
4474{
4475 WDI_Status status = WDI_STATUS_SUCCESS ;
4476 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4477 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4478 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4479 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004482 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004483 if(NULL == wdiSetStaKeyParam)
4484 {
4485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 VOS_ASSERT(0);
4488 return VOS_STATUS_E_NOMEM;
4489 }
4490 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4491 if(NULL == pWdaParams)
4492 {
4493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004494 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 VOS_ASSERT(0);
4496 vos_mem_free(wdiSetStaKeyParam);
4497 return VOS_STATUS_E_NOMEM;
4498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004500 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 /* copy set STA key params to WDI structure */
4502 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4503 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4504 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4505 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004506 if(setStaKeyParams->encType != eSIR_ED_NONE)
4507 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4509 keyIndex++)
4510 {
4511 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4512 setStaKeyParams->key[keyIndex].keyId;
4513 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4514 setStaKeyParams->key[keyIndex].unicast;
4515 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4516 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004517 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4518 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4519 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4520 setStaKeyParams->key[keyIndex].paeRole;
4521 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4522 setStaKeyParams->key[keyIndex].keyLength;
4523 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4524 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4527 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 }
4529 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 /* Store set key pointer, as this will be used for response */
4531 /* store Params pass it to WDI */
4532 pWdaParams->pWdaContext = pWDA;
4533 pWdaParams->wdaMsgParam = setStaKeyParams;
4534 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4536 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 if(IS_WDI_STATUS_FAILURE(status))
4538 {
4539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4540 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4541 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4542 vos_mem_free(pWdaParams) ;
4543 setStaKeyParams->status = eSIR_FAILURE ;
4544 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 return CONVERT_WDI2VOS_STATUS(status) ;
4547}
Jeff Johnson295189b2012-06-20 16:38:30 -07004548/*
4549 * FUNCTION: WDA_RemoveStaKeyReqCallback
4550 * send SET BSS key RSP back to PE
4551 */
4552void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4553{
4554 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4555 tWDA_CbContext *pWDA;
4556 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004558 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 if(NULL == pWdaParams)
4560 {
4561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004562 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 VOS_ASSERT(0) ;
4564 return ;
4565 }
4566 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4567 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4569 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004570 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004571 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 return ;
4573}
4574
Jeff Johnson295189b2012-06-20 16:38:30 -07004575/*
4576 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4577 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4578 */
4579VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4580 tRemoveStaKeyParams *removeStaKeyParams )
4581{
4582 WDI_Status status = WDI_STATUS_SUCCESS ;
4583 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4584 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4585 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4586 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004588 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 if(NULL == wdiRemoveStaKeyParam)
4590 {
4591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004593 VOS_ASSERT(0);
4594 return VOS_STATUS_E_NOMEM;
4595 }
4596 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4597 if(NULL == pWdaParams)
4598 {
4599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004601 VOS_ASSERT(0);
4602 vos_mem_free(wdiRemoveStaKeyParam);
4603 return VOS_STATUS_E_NOMEM;
4604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 /* copy remove STA key params to WDI structure*/
4606 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4607 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4608 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4609 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4610 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004611 /* Store remove key pointer, as this will be used for response */
4612 /* store Params pass it to WDI */
4613 pWdaParams->pWdaContext = pWDA;
4614 pWdaParams->wdaMsgParam = removeStaKeyParams;
4615 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004616 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4617 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 if(IS_WDI_STATUS_FAILURE(status))
4619 {
4620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4621 "Failure in remove STA Key Req WDI API, free all the memory " );
4622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4623 vos_mem_free(pWdaParams) ;
4624 removeStaKeyParams->status = eSIR_FAILURE ;
4625 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4626 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004627 return CONVERT_WDI2VOS_STATUS(status) ;
4628}
Jeff Johnson295189b2012-06-20 16:38:30 -07004629/*
4630 * FUNCTION: WDA_IsHandleSetLinkStateReq
4631 * Update the WDA state and return the status to handle this message or not
4632 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004633WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4634 tWDA_CbContext *pWDA,
4635 tLinkStateParams *linkStateParams)
4636{
4637 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 switch(linkStateParams->state)
4639 {
4640 case eSIR_LINK_PREASSOC_STATE:
4641 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4642 /*
4643 * set the WDA state to PRE ASSOC
4644 * copy the BSSID into pWDA to use it in join request and return,
4645 * No need to handle these messages.
4646 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004647 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4648 {
4649 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004650 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004651 }
4652 else
4653 {
4654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004655 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004656 VOS_ASSERT(0);
4657 }
4658
4659 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4660 {
4661 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004662 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004663 }
4664 else
4665 {
4666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004667 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004668 VOS_ASSERT(0);
4669 }
4670
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4672 *channel and after ) so reset the WDA state to ready when the second
4673 * time UMAC issue the link state with PREASSOC
4674 */
4675 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4676 {
4677 /* RESET WDA state back to WDA_READY_STATE */
4678 pWDA->wdaState = WDA_READY_STATE;
4679 }
4680 else
4681 {
4682 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4683 }
4684 //populate linkState info in WDACbCtxt
4685 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 default:
4688 if(pWDA->wdaState != WDA_READY_STATE)
4689 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004690 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4691 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4692 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4693 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4694 *the ASSERT in WDA_Stop during module unload.*/
4695 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4696 {
4697 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004698 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004699 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004700 else
4701 {
4702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004703 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004704 status = WDA_IGNORE_SET_LINK_STATE;
4705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 }
4707 break;
4708 }
4709
4710 return status;
4711}
Jeff Johnson295189b2012-06-20 16:38:30 -07004712/*
4713 * FUNCTION: WDA_SetLinkStateCallback
4714 * call back function for set link state from WDI
4715 */
4716void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4717{
4718 tWDA_CbContext *pWDA;
4719 tLinkStateParams *linkStateParams;
4720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004722 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004723 if(NULL == pWdaParams)
4724 {
4725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004726 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 VOS_ASSERT(0) ;
4728 return ;
4729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004732 /*
4733 * In STA mode start the BA activity check timer after association
4734 * and in AP mode start BA activity check timer after BSS start */
4735 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4736 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4737 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4738 {
4739 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004742 /*
4743 * No respone required for WDA_SET_LINK_STATE so free the request
4744 * param here
4745 */
4746 if( pWdaParams != NULL )
4747 {
4748 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4749 {
4750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4751 }
4752 vos_mem_free(pWdaParams);
4753 }
4754 return ;
4755}
Jeff Johnson295189b2012-06-20 16:38:30 -07004756/*
4757 * FUNCTION: WDA_ProcessSetLinkState
4758 * Request to WDI to set the link status.
4759 */
4760VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4761 tLinkStateParams *linkStateParams)
4762{
4763 WDI_Status status = WDI_STATUS_SUCCESS ;
4764 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4765 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4766 sizeof(WDI_SetLinkReqParamsType)) ;
4767 tWDA_ReqParams *pWdaParams ;
4768 tpAniSirGlobal pMac;
4769 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4770
4771 if(NULL == pMac)
4772 {
4773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004774 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004776 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 return VOS_STATUS_E_FAILURE;
4778 }
4779
4780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004781 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004782 if(NULL == wdiSetLinkStateParam)
4783 {
4784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004785 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 VOS_ASSERT(0);
4787 return VOS_STATUS_E_NOMEM;
4788 }
4789 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4790 if(NULL == pWdaParams)
4791 {
4792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004793 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 VOS_ASSERT(0);
4795 vos_mem_free(wdiSetLinkStateParam);
4796 return VOS_STATUS_E_NOMEM;
4797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 if(WDA_IGNORE_SET_LINK_STATE ==
4799 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4800 {
4801 status = WDI_STATUS_E_FAILURE;
4802 }
4803 else
4804 {
4805 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4806 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4808 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004809 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4810 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 pWdaParams->pWdaContext = pWDA;
4812 /* Store remove key pointer, as this will be used for response */
4813 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004814 /* store Params pass it to WDI */
4815 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4816 /* Stop Timer only other than GO role and concurrent session */
4817 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4818 && !vos_concurrent_sessions_running() &&
4819 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4820 {
4821 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004823 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4824 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 if(IS_WDI_STATUS_FAILURE(status))
4826 {
4827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4828 "Failure in set link state Req WDI API, free all the memory " );
4829 }
4830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 if(IS_WDI_STATUS_FAILURE(status))
4832 {
4833 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004834 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004835 vos_mem_free(pWdaParams);
4836 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 return CONVERT_WDI2VOS_STATUS(status) ;
4838}
Jeff Johnson295189b2012-06-20 16:38:30 -07004839/*
4840 * FUNCTION: WDA_GetStatsReqParamsCallback
4841 * send the response to PE with Stats received from WDI
4842 */
4843void WDA_GetStatsReqParamsCallback(
4844 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4845 void* pUserData)
4846{
4847 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4848 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4849
4850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004851 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 pGetPEStatsRspParams =
4853 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4854 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4855
4856 if(NULL == pGetPEStatsRspParams)
4857 {
4858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004860 VOS_ASSERT(0);
4861 return;
4862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4864 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4865 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4866 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4867 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4868
4869 //Fill the Session Id Properly in PE
4870 pGetPEStatsRspParams->sessionId = 0;
4871 pGetPEStatsRspParams->rc =
4872 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4873 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4874 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 vos_mem_copy( pGetPEStatsRspParams + 1,
4876 wdiGetStatsRsp + 1,
4877 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 /* send response to UMAC*/
4879 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4880
4881 return;
4882}
4883
Jeff Johnson295189b2012-06-20 16:38:30 -07004884/*
4885 * FUNCTION: WDA_ProcessGetStatsReq
4886 * Request to WDI to get the statistics
4887 */
4888VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4889 tAniGetPEStatsReq *pGetStatsParams)
4890{
4891 WDI_Status status = WDI_STATUS_SUCCESS ;
4892 WDI_GetStatsReqParamsType wdiGetStatsParam;
4893 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004895 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4897 pGetStatsParams->staId;
4898 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4899 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 status = WDI_GetStatsReq(&wdiGetStatsParam,
4902 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004903 if(IS_WDI_STATUS_FAILURE(status))
4904 {
4905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4906 "Failure in Get Stats Req WDI API, free all the memory " );
4907 pGetPEStatsRspParams =
4908 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4909 if(NULL == pGetPEStatsRspParams)
4910 {
4911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004914 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 return VOS_STATUS_E_NOMEM;
4916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004917 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4918 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4919 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4920 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4921 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4922 (void *)pGetPEStatsRspParams, 0) ;
4923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 /* Free the request message */
4925 vos_mem_free(pGetStatsParams);
4926 return CONVERT_WDI2VOS_STATUS(status);
4927}
Jeff Johnson295189b2012-06-20 16:38:30 -07004928/*
4929 * FUNCTION: WDA_UpdateEDCAParamCallback
4930 * call back function for Update EDCA params from WDI
4931 */
4932void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4933{
4934 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4935 tEdcaParams *pEdcaParams;
4936
4937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004938 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 if(NULL == pWdaParams)
4940 {
4941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004942 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004943 VOS_ASSERT(0) ;
4944 return ;
4945 }
4946 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4948 vos_mem_free(pWdaParams);
4949 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 return ;
4951}
Jeff Johnson295189b2012-06-20 16:38:30 -07004952/*
4953 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4954 * Request to WDI to Update the EDCA params.
4955 */
4956VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
4957 tEdcaParams *pEdcaParams)
4958{
4959 WDI_Status status = WDI_STATUS_SUCCESS ;
4960 WDI_UpdateEDCAParamsType *wdiEdcaParam =
4961 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
4962 sizeof(WDI_UpdateEDCAParamsType)) ;
4963 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004965 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 if(NULL == wdiEdcaParam)
4967 {
4968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004969 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004970 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004971 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004972 return VOS_STATUS_E_NOMEM;
4973 }
4974 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4975 if(NULL == pWdaParams)
4976 {
4977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 VOS_ASSERT(0);
4980 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004981 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004982 return VOS_STATUS_E_NOMEM;
4983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
4985 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
4986 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
4987 &pEdcaParams->acbe);
4988 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
4989 &pEdcaParams->acbk);
4990 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
4991 &pEdcaParams->acvi);
4992 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
4993 &pEdcaParams->acvo);
4994 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 pWdaParams->pWdaContext = pWDA;
4996 /* Store remove key pointer, as this will be used for response */
4997 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004998 /* store Params pass it to WDI */
4999 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005000 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5001 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005002 if(IS_WDI_STATUS_FAILURE(status))
5003 {
5004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5005 "Failure in Update EDCA Params WDI API, free all the memory " );
5006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5007 vos_mem_free(pWdaParams);
5008 vos_mem_free(pEdcaParams);
5009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005010 return CONVERT_WDI2VOS_STATUS(status) ;
5011}
Jeff Johnson295189b2012-06-20 16:38:30 -07005012/*
5013 * FUNCTION: WDA_AddBAReqCallback
5014 * send ADD BA RSP back to PE
5015 */
5016void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5017 void* pUserData)
5018{
5019 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5020 tWDA_CbContext *pWDA;
5021 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005023 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005024 if(NULL == pWdaParams)
5025 {
5026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005027 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005028 VOS_ASSERT(0) ;
5029 return ;
5030 }
5031 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5032 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5034 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005036 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005037 return ;
5038}
5039
Jeff Johnson295189b2012-06-20 16:38:30 -07005040/*
5041 * FUNCTION: WDA_ProcessAddBAReq
5042 * Request to WDI to Update the ADDBA REQ params.
5043 */
5044VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5045 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5046{
Jeff Johnson43971f52012-07-17 12:26:56 -07005047 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5049 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5050 sizeof(WDI_AddBAReqParamsType)) ;
5051 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005053 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 if(NULL == wdiAddBAReqParam)
5055 {
5056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 VOS_ASSERT(0);
5059 return VOS_STATUS_E_NOMEM;
5060 }
5061 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5062 if(NULL == pWdaParams)
5063 {
5064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005065 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 VOS_ASSERT(0);
5067 vos_mem_free(wdiAddBAReqParam);
5068 return VOS_STATUS_E_NOMEM;
5069 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 do
5071 {
5072 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 wdiAddBaInfo->ucSTAIdx = staIdx ;
5074 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5075 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 } while(0) ;
5077 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 pWdaParams->pWdaContext = pWDA;
5079 /* store Params pass it to WDI */
5080 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5081 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005082 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5083 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005084
Jeff Johnson43971f52012-07-17 12:26:56 -07005085 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005086 {
5087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005088 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5089 status = CONVERT_WDI2VOS_STATUS(wstatus);
5090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005091 vos_mem_free(pWdaParams);
5092 pAddBAReqParams->status = eSIR_FAILURE;
5093 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5094 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005095 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005096}
Jeff Johnson295189b2012-06-20 16:38:30 -07005097/*
5098 * FUNCTION: WDA_AddBASessionReqCallback
5099 * send ADD BA SESSION RSP back to PE/(or TL)
5100 */
5101void WDA_AddBASessionReqCallback(
5102 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5103{
5104 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5106 tWDA_CbContext *pWDA;
5107 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005109 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005110 if(NULL == pWdaParams)
5111 {
5112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005113 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005114 VOS_ASSERT(0) ;
5115 return ;
5116 }
5117 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5118 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 if( NULL == pAddBAReqParams )
5120 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005122 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5125 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 return ;
5127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5129 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 /*
5131 * if WDA in update TL state, update TL with BA session parama and send
5132 * another request to HAL(/WDI) (ADD_BA_REQ)
5133 */
5134
5135 if((VOS_STATUS_SUCCESS ==
5136 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5137 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5138 {
5139 /* Update TL with BA info received from HAL/WDI */
5140 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5141 wdiAddBaSession->usBaSessionID,
5142 wdiAddBaSession->ucSTAIdx,
5143 wdiAddBaSession->ucBaTID,
5144 wdiAddBaSession->ucBaBufferSize,
5145 wdiAddBaSession->ucWinSize,
5146 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5148 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5149 }
5150 else
5151 {
5152 pAddBAReqParams->status =
5153 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5154
5155 /* Setting Flag to indicate that Set BA is success */
5156 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5157 {
5158 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5159 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5160 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005162 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 /*Reset the WDA state to READY */
5165 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 return ;
5167}
5168
Jeff Johnson295189b2012-06-20 16:38:30 -07005169/*
5170 * FUNCTION: WDA_ProcessAddBASessionReq
5171 * Request to WDI to Update the ADDBA REQ params.
5172 */
5173VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5174 tAddBAParams *pAddBAReqParams)
5175{
5176 WDI_Status status = WDI_STATUS_SUCCESS ;
5177 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5178 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5179 sizeof(WDI_AddBASessionReqParamsType)) ;
5180 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005182 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 if(NULL == wdiAddBASessionReqParam)
5184 {
5185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 VOS_ASSERT(0);
5188 return VOS_STATUS_E_NOMEM;
5189 }
5190 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5191 if(NULL == pWdaParams)
5192 {
5193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005195 VOS_ASSERT(0);
5196 vos_mem_free(wdiAddBASessionReqParam);
5197 return VOS_STATUS_E_NOMEM;
5198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 /*
5200 * Populate ADD BA parameters and pass these paarmeters to WDI.
5201 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5202 * the state to track if these is BA recipient case or BA initiator
5203 * case.
5204 */
5205 do
5206 {
5207 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5208 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5209 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5210 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5211 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5212 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5213 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005214 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5216 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5217 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5218 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5219 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005220 /* check the BA direction and update state accordingly */
5221 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5222 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5223 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5224
5225 }while(0) ;
5226 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 pWdaParams->pWdaContext = pWDA;
5228 /* Store ADD BA pointer, as this will be used for response */
5229 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5230 /* store Params pass it to WDI */
5231 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005232 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5233 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005234 if(IS_WDI_STATUS_FAILURE(status))
5235 {
5236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5237 "Failure in ADD BA Session REQ Params WDI API, free all the memory " );
5238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5239 vos_mem_free(pWdaParams->wdaMsgParam);
5240 vos_mem_free(pWdaParams);
5241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005243}
Jeff Johnson295189b2012-06-20 16:38:30 -07005244/*
5245 * FUNCTION: WDA_DelBANotifyTL
5246 * send DEL BA IND to TL
5247 */
5248void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5249 tDelBAParams *pDelBAReqParams)
5250{
5251 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5252 //tSirMsgQ msg;
5253 vos_msg_t vosMsg;
5254 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 if(NULL == pDelBAInd)
5256 {
5257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005258 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005259 VOS_ASSERT(0) ;
5260 return;
5261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5263 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5264 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5265 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005266
Jeff Johnson295189b2012-06-20 16:38:30 -07005267
5268 vosMsg.type = WDA_DELETEBA_IND;
5269 vosMsg.bodyptr = pDelBAInd;
5270 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5271 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5272 {
5273 vosStatus = VOS_STATUS_E_BADMSG;
5274 }
5275}
Jeff Johnson295189b2012-06-20 16:38:30 -07005276/*
5277 * FUNCTION: WDA_DelBAReqCallback
5278 * send DEL BA RSP back to PE
5279 */
5280void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5281{
5282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5283 tWDA_CbContext *pWDA;
5284 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005286 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005287 if(NULL == pWdaParams)
5288 {
5289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005290 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005291 VOS_ASSERT(0) ;
5292 return ;
5293 }
5294 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5295 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 /* Notify TL about DEL BA in case of recipinet */
5297 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5298 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5299 {
5300 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005302 /*
5303 * No respone required for WDA_DELBA_IND so just free the request
5304 * param here
5305 */
5306 vos_mem_free(pDelBAReqParams);
5307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5308 vos_mem_free(pWdaParams);
5309 return ;
5310}
5311
Jeff Johnson295189b2012-06-20 16:38:30 -07005312/*
5313 * FUNCTION: WDA_ProcessDelBAReq
5314 * Request to WDI to Update the DELBA REQ params.
5315 */
5316VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5317 tDelBAParams *pDelBAReqParams)
5318{
5319 WDI_Status status = WDI_STATUS_SUCCESS ;
5320 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5321 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5322 sizeof(WDI_DelBAReqParamsType)) ;
5323 tWDA_ReqParams *pWdaParams ;
5324 tANI_U16 staIdx = 0;
5325 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005327 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 if(NULL == wdiDelBAReqParam)
5329 {
5330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005331 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 VOS_ASSERT(0);
5333 return VOS_STATUS_E_NOMEM;
5334 }
5335 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5336 if(NULL == pWdaParams)
5337 {
5338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005340 VOS_ASSERT(0);
5341 vos_mem_free(wdiDelBAReqParam);
5342 return VOS_STATUS_E_NOMEM;
5343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5345 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5346 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5347 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 pWdaParams->pWdaContext = pWDA;
5349 /* Store DEL BA pointer, as this will be used for response */
5350 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005351 /* store Params pass it to WDI */
5352 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5354 * maintained in WDA, so that WDA can retry for another BA session
5355 */
5356 staIdx = pDelBAReqParams->staIdx;
5357 tid = pDelBAReqParams->baTID;
5358 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005359 status = WDI_DelBAReq(wdiDelBAReqParam,
5360 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 if(IS_WDI_STATUS_FAILURE(status))
5362 {
5363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5364 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5366 vos_mem_free(pWdaParams->wdaMsgParam);
5367 vos_mem_free(pWdaParams);
5368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370}
Jeff Johnson295189b2012-06-20 16:38:30 -07005371/*
5372 * FUNCTION: WDA_AddTSReqCallback
5373 * send ADD TS RSP back to PE
5374 */
5375void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5376{
5377 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5378 tWDA_CbContext *pWDA;
5379 tAddTsParams *pAddTsReqParams;
5380
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005382 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 if(NULL == pWdaParams)
5384 {
5385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005386 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 VOS_ASSERT(0) ;
5388 return ;
5389 }
5390 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5391 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5393 vos_mem_free(pWdaParams);
5394
5395 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005396 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 return ;
5398}
5399
Jeff Johnson295189b2012-06-20 16:38:30 -07005400/*
5401 * FUNCTION: WDA_ProcessAddTSReq
5402 * Request to WDI to Update the ADD TS REQ params.
5403 */
5404VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5405 tAddTsParams *pAddTsReqParams)
5406{
5407 WDI_Status status = WDI_STATUS_SUCCESS ;
5408 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5409 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5410 sizeof(WDI_AddTSReqParamsType)) ;
5411 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005413 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 if(NULL == wdiAddTSReqParam)
5415 {
5416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005417 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005418 VOS_ASSERT(0);
5419 return VOS_STATUS_E_NOMEM;
5420 }
5421 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5422 if(NULL == pWdaParams)
5423 {
5424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005425 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005426 VOS_ASSERT(0);
5427 vos_mem_free(wdiAddTSReqParam);
5428 return VOS_STATUS_E_NOMEM;
5429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5431 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 //TS IE
5433 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5434 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5435 pAddTsReqParams->tspec.length;
5436
5437 //TS IE : TS INFO : TRAFFIC
5438 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5439 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5440 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5441 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5442 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5443 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5444 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5445 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5446 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5447 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5448 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5449 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5450 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5451 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5452 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5453 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5454
5455 //TS IE : TS INFO : SCHEDULE
5456 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5457 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5458 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5459 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 //TS IE
5461 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5462 pAddTsReqParams->tspec.nomMsduSz;
5463 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5464 pAddTsReqParams->tspec.maxMsduSz;
5465 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5466 pAddTsReqParams->tspec.minSvcInterval;
5467 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5468 pAddTsReqParams->tspec.maxSvcInterval;
5469 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5470 pAddTsReqParams->tspec.inactInterval;
5471 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5472 pAddTsReqParams->tspec.suspendInterval;
5473 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5474 pAddTsReqParams->tspec.svcStartTime;
5475 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5476 pAddTsReqParams->tspec.minDataRate;
5477 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5478 pAddTsReqParams->tspec.meanDataRate;
5479 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5480 pAddTsReqParams->tspec.peakDataRate;
5481 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5482 pAddTsReqParams->tspec.maxBurstSz;
5483 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5484 pAddTsReqParams->tspec.delayBound;
5485 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5486 pAddTsReqParams->tspec.minPhyRate;
5487 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5488 pAddTsReqParams->tspec.surplusBw;
5489 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5490 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 /* TODO: tAddTsParams doesn't have the following fields */
5492#if 0
5493 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5494 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5495 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5496 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5497#endif
5498 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5499
5500 pWdaParams->pWdaContext = pWDA;
5501 /* Store ADD TS pointer, as this will be used for response */
5502 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 /* store Params pass it to WDI */
5504 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 status = WDI_AddTSReq(wdiAddTSReqParam,
5506 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005507 if(IS_WDI_STATUS_FAILURE(status))
5508 {
5509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5510 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5511 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5512 vos_mem_free(pWdaParams);
5513 pAddTsReqParams->status = eSIR_FAILURE ;
5514 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5515 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005516 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005517}
5518
Jeff Johnson295189b2012-06-20 16:38:30 -07005519/*
5520 * FUNCTION: WDA_DelTSReqCallback
5521 * send DEL TS RSP back to PE
5522 */
5523void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5524{
5525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005527 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5529 vos_mem_free(pWdaParams->wdaMsgParam) ;
5530 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005531 /*
5532 * No respone required for WDA_DEL_TS_REQ so just free the request
5533 * param here
5534 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 return ;
5536}
5537
Jeff Johnson295189b2012-06-20 16:38:30 -07005538/*
5539 * FUNCTION: WDA_ProcessDelTSReq
5540 * Request to WDI to Update the DELTS REQ params.
5541 */
5542VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5543 tDelTsParams *pDelTSReqParams)
5544{
5545 WDI_Status status = WDI_STATUS_SUCCESS ;
5546 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5547 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5548 sizeof(WDI_DelTSReqParamsType)) ;
5549 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005551 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005552 if(NULL == wdiDelTSReqParam)
5553 {
5554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005555 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005556 VOS_ASSERT(0);
5557 return VOS_STATUS_E_NOMEM;
5558 }
5559 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5560 if(NULL == pWdaParams)
5561 {
5562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005564 VOS_ASSERT(0);
5565 vos_mem_free(wdiDelTSReqParam);
5566 return VOS_STATUS_E_NOMEM;
5567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5569 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5570 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5571 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5572 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 pWdaParams->pWdaContext = pWDA;
5574 /* Store DEL TS pointer, as this will be used for response */
5575 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 /* store Params pass it to WDI */
5577 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 status = WDI_DelTSReq(wdiDelTSReqParam,
5579 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005580 if(IS_WDI_STATUS_FAILURE(status))
5581 {
5582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5583 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5585 vos_mem_free(pWdaParams->wdaMsgParam);
5586 vos_mem_free(pWdaParams);
5587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005588 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005589}
Jeff Johnson295189b2012-06-20 16:38:30 -07005590/*
5591 * FUNCTION: WDA_UpdateBeaconParamsCallback
5592 * Free the memory. No need to send any response to PE in this case
5593 */
5594void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5595{
5596 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005598 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005599 if(NULL == pWdaParams)
5600 {
5601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005602 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005603 VOS_ASSERT(0) ;
5604 return ;
5605 }
5606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5607 vos_mem_free(pWdaParams->wdaMsgParam) ;
5608 vos_mem_free(pWdaParams);
5609 /*
5610 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5611 * param here
5612 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 return ;
5614}
Jeff Johnson295189b2012-06-20 16:38:30 -07005615/*
5616 * FUNCTION: WDA_ProcessUpdateBeaconParams
5617 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5618 */
5619VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5620 tUpdateBeaconParams *pUpdateBeaconParams)
5621{
5622 WDI_Status status = WDI_STATUS_SUCCESS ;
5623 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5624 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5625 sizeof(WDI_UpdateBeaconParamsType)) ;
5626 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005628 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 if(NULL == wdiUpdateBeaconParams)
5630 {
5631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005632 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 VOS_ASSERT(0);
5634 return VOS_STATUS_E_NOMEM;
5635 }
5636 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5637 if(NULL == pWdaParams)
5638 {
5639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005641 VOS_ASSERT(0);
5642 vos_mem_free(wdiUpdateBeaconParams);
5643 return VOS_STATUS_E_NOMEM;
5644 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005645 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5646 pUpdateBeaconParams->bssIdx;
5647 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5648 pUpdateBeaconParams->fShortPreamble;
5649 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5650 pUpdateBeaconParams->fShortSlotTime;
5651 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5652 pUpdateBeaconParams->beaconInterval;
5653 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5654 pUpdateBeaconParams->llaCoexist;
5655 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5656 pUpdateBeaconParams->llbCoexist;
5657 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5658 pUpdateBeaconParams->llgCoexist;
5659 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5660 pUpdateBeaconParams->ht20MhzCoexist;
5661 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5662 pUpdateBeaconParams->llnNonGFCoexist;
5663 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5664 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5665 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5666 pUpdateBeaconParams->fRIFSMode;
5667 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5668 pUpdateBeaconParams->paramChangeBitmap;
5669 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5670
5671 pWdaParams->pWdaContext = pWDA;
5672 /* Store UpdateBeacon Req pointer, as this will be used for response */
5673 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005674 /* store Params pass it to WDI */
5675 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005676 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5677 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5678 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005679 if(IS_WDI_STATUS_FAILURE(status))
5680 {
5681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5682 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5684 vos_mem_free(pWdaParams->wdaMsgParam);
5685 vos_mem_free(pWdaParams);
5686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005688}
Jeff Johnson295189b2012-06-20 16:38:30 -07005689#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005690/*
5691 * FUNCTION: WDA_TSMStatsReqCallback
5692 * send TSM Stats RSP back to PE
5693 */
5694void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5695{
5696 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5697 tWDA_CbContext *pWDA = NULL;
5698 tTSMStats *pTsmRspParams = NULL;
5699
5700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005701 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 if(NULL == pWdaParams)
5703 {
5704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005705 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005706 VOS_ASSERT(0) ;
5707 return ;
5708 }
5709 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5710 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005711 if( NULL == pTsmRspParams )
5712 {
5713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005714 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005715 VOS_ASSERT( 0 );
5716 return ;
5717 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5719 vos_mem_free(pWdaParams);
5720
5721 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5722 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5723 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5724 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5725 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5726 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5727 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5728 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5729 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5730 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005732 return ;
5733}
5734
5735
Jeff Johnson295189b2012-06-20 16:38:30 -07005736/*
5737 * FUNCTION: WDA_ProcessTsmStatsReq
5738 * Request to WDI to get the TSM Stats params.
5739 */
5740VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5741 tTSMStats *pTsmStats)
5742{
5743 WDI_Status status = WDI_STATUS_SUCCESS ;
5744 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5745 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005747 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005748 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5749 sizeof(WDI_TSMStatsReqParamsType));
5750 if(NULL == wdiTSMReqParam)
5751 {
5752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005754 VOS_ASSERT(0);
5755 return VOS_STATUS_E_NOMEM;
5756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005757 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5758 if(NULL == pWdaParams)
5759 {
5760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005761 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005762 VOS_ASSERT(0);
5763 vos_mem_free(wdiTSMReqParam);
5764 return VOS_STATUS_E_NOMEM;
5765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005766 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5767 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5768 pTsmStats->bssId,
5769 sizeof(wpt_macAddr));
5770 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5771
5772 pWdaParams->pWdaContext = pWDA;
5773 /* Store TSM Stats pointer, as this will be used for response */
5774 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 /* store Params pass it to WDI */
5776 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005777 status = WDI_TSMStatsReq(wdiTSMReqParam,
5778 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005779 if(IS_WDI_STATUS_FAILURE(status))
5780 {
5781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5782 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5784 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005785 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005787 return CONVERT_WDI2VOS_STATUS(status) ;
5788}
5789#endif
5790/*
5791 * FUNCTION: WDA_SendBeaconParamsCallback
5792 * No need to send any response to PE in this case
5793 */
5794void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5795{
5796
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005799 return ;
5800}
Jeff Johnson295189b2012-06-20 16:38:30 -07005801/*
5802 * FUNCTION: WDA_ProcessSendBeacon
5803 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5804 * start beacon trasmission
5805 */
5806VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5807 tSendbeaconParams *pSendbeaconParams)
5808{
5809 WDI_Status status = WDI_STATUS_SUCCESS ;
5810 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005812 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005813 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5814 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5815 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5816 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5818 pSendbeaconParams->timIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07005819#ifdef WLAN_FEATURE_P2P
5820 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5821 pSendbeaconParams->p2pIeOffset;
5822#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005823 /* Copy the beacon template to local buffer */
5824 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5825 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5826 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5827
Jeff Johnson295189b2012-06-20 16:38:30 -07005828 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5829 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005830 if(IS_WDI_STATUS_FAILURE(status))
5831 {
5832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5833 "Failure in SEND BEACON REQ Params WDI API" );
5834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005835 vos_mem_free(pSendbeaconParams);
5836 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005837}
Jeff Johnson295189b2012-06-20 16:38:30 -07005838/*
5839 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5840 * No need to send any response to PE in this case
5841 */
5842void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5843{
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005845 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005846 return ;
5847}
5848
Jeff Johnson295189b2012-06-20 16:38:30 -07005849/*
5850 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5851 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5852 * send probe response
5853 */
5854VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5855 tSendProbeRespParams *pSendProbeRspParams)
5856{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005857 WDI_Status status = WDI_STATUS_SUCCESS;
5858 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5859 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005861 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005862
5863 if (!wdiSendProbeRspParam)
5864 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5865
Jeff Johnson295189b2012-06-20 16:38:30 -07005866 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005867 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005869 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005871 /* Copy the Probe Response template to local buffer */
5872 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005873 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 pSendProbeRspParams->pProbeRespTemplate,
5875 pSendProbeRspParams->probeRespTemplateLen);
5876 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005877 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5879 WDI_PROBE_REQ_BITMAP_IE_LEN);
5880
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005881 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005882
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005883 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005884 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 if(IS_WDI_STATUS_FAILURE(status))
5886 {
5887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5888 "Failure in SEND Probe RSP Params WDI API" );
5889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005891 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005893}
Jeff Johnson295189b2012-06-20 16:38:30 -07005894#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5895/*
5896 * FUNCTION: WDA_SetMaxTxPowerCallBack
5897 * send the response to PE with power value received from WDI
5898 */
5899void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5900 void* pUserData)
5901{
5902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5903 tWDA_CbContext *pWDA = NULL;
5904 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5905
5906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005907 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 if(NULL == pWdaParams)
5909 {
5910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005911 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 VOS_ASSERT(0) ;
5913 return ;
5914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005915 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5916 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 if( NULL == pMaxTxPowerParams )
5918 {
5919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005920 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005921 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5923 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 return ;
5925 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005926
Jeff Johnson295189b2012-06-20 16:38:30 -07005927
5928 /*need to free memory for the pointers used in the
5929 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5931 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005933
Jeff Johnson295189b2012-06-20 16:38:30 -07005934
5935 /* send response to UMAC*/
5936 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5937
5938 return;
5939}
Jeff Johnson295189b2012-06-20 16:38:30 -07005940/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005941 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 * Request to WDI to send set Max Tx Power Request
5943 */
5944 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5945 tMaxTxPowerParams *MaxTxPowerParams)
5946{
5947 WDI_Status status = WDI_STATUS_SUCCESS;
5948 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5949 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005950
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005952 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005953
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
5955 sizeof(WDI_SetMaxTxPowerParamsType));
5956 if(NULL == wdiSetMaxTxPowerParams)
5957 {
5958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 VOS_ASSERT(0);
5961 return VOS_STATUS_E_NOMEM;
5962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5964 if(NULL == pWdaParams)
5965 {
5966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 vos_mem_free(wdiSetMaxTxPowerParams);
5969 VOS_ASSERT(0);
5970 return VOS_STATUS_E_NOMEM;
5971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005972 /* Copy.Max.Tx.Power Params to WDI structure */
5973 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
5974 MaxTxPowerParams->bssId,
5975 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
5977 MaxTxPowerParams->selfStaMacAddr,
5978 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005979 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
5980 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07005981 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005982 pWdaParams->pWdaContext = pWDA;
5983 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 /* store Params pass it to WDI */
5985 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
5987 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 if(IS_WDI_STATUS_FAILURE(status))
5989 {
5990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5991 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
5992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5993 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005994 /* send response to UMAC*/
5995 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005996 }
5997 return CONVERT_WDI2VOS_STATUS(status);
5998
5999}
Jeff Johnson295189b2012-06-20 16:38:30 -07006000#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006001#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07006002/*
6003 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6004 * Free the memory. No need to send any response to PE in this case
6005 */
6006void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6007{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006008 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6009
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006011 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006012
6013 if(NULL == pWdaParams)
6014 {
6015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006016 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006017 VOS_ASSERT(0) ;
6018 return ;
6019 }
6020
6021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6022 vos_mem_free(pWdaParams->wdaMsgParam) ;
6023 vos_mem_free(pWdaParams);
6024
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 /*
6026 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6027 * so just free the request param here
6028 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006029 return ;
6030}
6031
Jeff Johnson295189b2012-06-20 16:38:30 -07006032/*
6033 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6034 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6035 */
6036VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6037 tP2pPsParams *pP2pPsConfigParams)
6038{
6039 WDI_Status status = WDI_STATUS_SUCCESS ;
6040 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6041 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6042 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006043 tWDA_ReqParams *pWdaParams = NULL;
6044
Jeff Johnson295189b2012-06-20 16:38:30 -07006045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006046 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 if(NULL == wdiSetP2PGONOAReqParam)
6048 {
6049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 VOS_ASSERT(0);
6052 return VOS_STATUS_E_NOMEM;
6053 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006054
6055 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6056 if(NULL == pWdaParams)
6057 {
6058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006059 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006060 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006061 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006062 VOS_ASSERT(0);
6063 return VOS_STATUS_E_NOMEM;
6064 }
6065
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6067 pP2pPsConfigParams->opp_ps;
6068 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6069 pP2pPsConfigParams->ctWindow;
6070 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6071 pP2pPsConfigParams->count;
6072 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6073 pP2pPsConfigParams->duration;
6074 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6075 pP2pPsConfigParams->interval;
6076 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6077 pP2pPsConfigParams->single_noa_duration;
6078 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6079 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006080
Jeff Johnson295189b2012-06-20 16:38:30 -07006081 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6082 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006083 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6084
Jeff Johnson295189b2012-06-20 16:38:30 -07006085 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006086 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6087 pWdaParams->pWdaContext = pWDA;
6088
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006090 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6091
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 if(IS_WDI_STATUS_FAILURE(status))
6093 {
6094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6095 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006096 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6097 vos_mem_free(pWdaParams->wdaMsgParam);
6098 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 return CONVERT_WDI2VOS_STATUS(status);
6101
Jeff Johnson295189b2012-06-20 16:38:30 -07006102}
6103#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006104#ifdef WLAN_FEATURE_VOWIFI_11R
6105/*
6106 * FUNCTION: WDA_AggrAddTSReqCallback
6107 * send ADD AGGREGATED TS RSP back to PE
6108 */
6109void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6110{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6112 tWDA_CbContext *pWDA;
6113 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006114 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006116 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006117 if(NULL == pWdaParams)
6118 {
6119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006120 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006121 VOS_ASSERT(0) ;
6122 return ;
6123 }
6124
6125 pWDA = pWdaParams->pWdaContext;
6126 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006127
6128 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6129 {
6130 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006133
6134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6135 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 return ;
6137}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006138/*
6139 * FUNCTION: WDA_ProcessAddTSReq
6140 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6141 */
6142VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6143 tAggrAddTsParams *pAggrAddTsReqParams)
6144{
6145 WDI_Status status = WDI_STATUS_SUCCESS ;
6146 int i;
6147 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006148 tWDA_ReqParams *pWdaParams = NULL;
6149
6150
Jeff Johnson295189b2012-06-20 16:38:30 -07006151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006152 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6154 sizeof(WDI_AggrAddTSReqParamsType)) ;
6155 if(NULL == wdiAggrAddTSReqParam)
6156 {
6157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 VOS_ASSERT(0);
6160 return VOS_STATUS_E_NOMEM;
6161 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006162
6163
6164 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6165 if(NULL == pWdaParams)
6166 {
6167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006168 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006169 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006170 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006171 VOS_ASSERT(0);
6172 return VOS_STATUS_E_NOMEM;
6173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6175 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6176 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6178 {
6179 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6180 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6181 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6183 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6184 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6185 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6186 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6187 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6188 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6189 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6190 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6191 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6192 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6193 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6194 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6195 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6196 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6197 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6199 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6201 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6202 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6203 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6204 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6205 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6206 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6207 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6208 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6209 pAggrAddTsReqParams->tspec[i].inactInterval;
6210 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6211 pAggrAddTsReqParams->tspec[i].suspendInterval;
6212 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6213 pAggrAddTsReqParams->tspec[i].svcStartTime;
6214 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6215 pAggrAddTsReqParams->tspec[i].minDataRate;
6216 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6217 pAggrAddTsReqParams->tspec[i].meanDataRate;
6218 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6219 pAggrAddTsReqParams->tspec[i].peakDataRate;
6220 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6221 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6222 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6223 pAggrAddTsReqParams->tspec[i].delayBound;
6224 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6225 pAggrAddTsReqParams->tspec[i].minPhyRate;
6226 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6227 pAggrAddTsReqParams->tspec[i].surplusBw;
6228 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6229 pAggrAddTsReqParams->tspec[i].mediumTime;
6230 }
6231
6232 /* TODO: tAggrAddTsParams doesn't have the following fields */
6233#if 0
6234 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6235 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6236 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6237 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6238#endif
6239 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6240
6241 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006242 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006244 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6245
6246 pWdaParams->pWdaContext = pWDA;
6247
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006249 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6250
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 if(IS_WDI_STATUS_FAILURE(status))
6252 {
6253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6254 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6256 vos_mem_free(pWdaParams);
6257
6258 /* send the failure response back to PE*/
6259 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6260 {
6261 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6262 }
6263
6264 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6265 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006267 return CONVERT_WDI2VOS_STATUS(status) ;
6268}
6269#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006270/*
6271 * FUNCTION: WDA_EnterImpsReqCallback
6272 * send Enter IMPS RSP back to PE
6273 */
6274void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6275{
6276 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006278 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006279 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 return ;
6281}
Jeff Johnson295189b2012-06-20 16:38:30 -07006282/*
6283 * FUNCTION: WDA_ProcessEnterImpsReq
6284 * Request to WDI to Enter IMPS power state.
6285 */
6286VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6287{
6288 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006290 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006292 if(IS_WDI_STATUS_FAILURE(status))
6293 {
6294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6295 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006296 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006298 return CONVERT_WDI2VOS_STATUS(status) ;
6299}
Jeff Johnson295189b2012-06-20 16:38:30 -07006300/*
6301 * FUNCTION: WDA_ExitImpsReqCallback
6302 * send Exit IMPS RSP back to PE
6303 */
6304void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6305{
6306 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006308 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 return ;
6311}
Jeff Johnson295189b2012-06-20 16:38:30 -07006312/*
6313 * FUNCTION: WDA_ProcessExitImpsReq
6314 * Request to WDI to Exit IMPS power state.
6315 */
6316VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6317{
6318 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006320 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 if(IS_WDI_STATUS_FAILURE(status))
6323 {
6324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6325 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006326 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006328 return CONVERT_WDI2VOS_STATUS(status) ;
6329}
Jeff Johnson295189b2012-06-20 16:38:30 -07006330/*
6331 * FUNCTION: WDA_EnterBmpsReqCallback
6332 * send Enter BMPS RSP back to PE
6333 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006334void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006335{
6336 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6337 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006338 tEnterBmpsParams *pEnterBmpsRspParams;
6339
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006341 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006342 if(NULL == pWdaParams)
6343 {
6344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006345 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 VOS_ASSERT(0) ;
6347 return ;
6348 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006349
6350 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6351 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6352
6353 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6354 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6355
6356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006358 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6359
Jeff Johnson295189b2012-06-20 16:38:30 -07006360 return ;
6361}
Jeff Johnson295189b2012-06-20 16:38:30 -07006362/*
6363 * FUNCTION: WDA_ProcessEnterBmpsReq
6364 * Request to WDI to Enter BMPS power state.
6365 */
6366VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6367 tEnterBmpsParams *pEnterBmpsReqParams)
6368{
6369 WDI_Status status = WDI_STATUS_SUCCESS;
6370 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6371 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006373 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6375 {
6376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006377 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 VOS_ASSERT(0);
6379 return VOS_STATUS_E_FAILURE;
6380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6382 if (NULL == wdiEnterBmpsReqParams)
6383 {
6384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006387 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6388 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 return VOS_STATUS_E_NOMEM;
6390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006391 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6392 if (NULL == pWdaParams)
6393 {
6394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006395 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 VOS_ASSERT(0);
6397 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006398 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6399 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 return VOS_STATUS_E_NOMEM;
6401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006402 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6403 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6404 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6405 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 // For CCX and 11R Roaming
6407 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6408 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6409 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6410 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006411
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 /* Store param pointer as passed in by caller */
6413 /* store Params pass it to WDI */
6414 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006415 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006416 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006417 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6418 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 if (IS_WDI_STATUS_FAILURE(status))
6420 {
6421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6422 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6423 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006424 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006425 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006426 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006428 return CONVERT_WDI2VOS_STATUS(status);
6429}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006430
6431
6432static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6433 WDI_Status wdiStatus,
6434 tExitBmpsParams *pExitBmpsReqParams)
6435{
6436 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6437
6438 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6439}
6440
6441
Jeff Johnson295189b2012-06-20 16:38:30 -07006442/*
6443 * FUNCTION: WDA_ExitBmpsReqCallback
6444 * send Exit BMPS RSP back to PE
6445 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006446void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006447{
6448 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6449 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006450 tExitBmpsParams *pExitBmpsRspParams;
6451
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006453 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 if(NULL == pWdaParams)
6455 {
6456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006457 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006458 VOS_ASSERT(0) ;
6459 return ;
6460 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006461
6462 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6463 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6464
6465 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6466 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006467
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6469 vos_mem_free(pWdaParams) ;
6470
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006471 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006472 return ;
6473}
Jeff Johnson295189b2012-06-20 16:38:30 -07006474/*
6475 * FUNCTION: WDA_ProcessExitBmpsReq
6476 * Request to WDI to Exit BMPS power state.
6477 */
6478VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6479 tExitBmpsParams *pExitBmpsReqParams)
6480{
6481 WDI_Status status = WDI_STATUS_SUCCESS ;
6482 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6483 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6484 sizeof(WDI_ExitBmpsReqParamsType)) ;
6485 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006487 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 if(NULL == wdiExitBmpsReqParams)
6489 {
6490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006491 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006493 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006494 return VOS_STATUS_E_NOMEM;
6495 }
6496 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6497 if(NULL == pWdaParams)
6498 {
6499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006501 VOS_ASSERT(0);
6502 vos_mem_free(wdiExitBmpsReqParams);
6503 return VOS_STATUS_E_NOMEM;
6504 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006505 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006506
6507 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6508
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6510
6511 /* Store param pointer as passed in by caller */
6512 /* store Params pass it to WDI */
6513 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6514 pWdaParams->pWdaContext = pWDA;
6515 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006516 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6517 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 if(IS_WDI_STATUS_FAILURE(status))
6519 {
6520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6521 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6523 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006524 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006526 return CONVERT_WDI2VOS_STATUS(status) ;
6527}
Jeff Johnson295189b2012-06-20 16:38:30 -07006528/*
6529 * FUNCTION: WDA_EnterUapsdReqCallback
6530 * send Enter UAPSD RSP back to PE
6531 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006532void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006533{
6534 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6535 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006536 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006538 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006539 if(NULL == pWdaParams)
6540 {
6541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006542 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 VOS_ASSERT(0) ;
6544 return ;
6545 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006546
6547 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6548 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6549
6550 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6551 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6552
Jeff Johnson295189b2012-06-20 16:38:30 -07006553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6554 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006555 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006556 return ;
6557}
Jeff Johnson295189b2012-06-20 16:38:30 -07006558/*
6559 * FUNCTION: WDA_ProcessEnterUapsdReq
6560 * Request to WDI to Enter UAPSD power state.
6561 */
6562VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6563 tUapsdParams *pEnterUapsdReqParams)
6564{
6565 WDI_Status status = WDI_STATUS_SUCCESS ;
6566 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6567 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6568 sizeof(WDI_EnterUapsdReqParamsType)) ;
6569 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006571 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006572 if(NULL == wdiEnterUapsdReqParams)
6573 {
6574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006575 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006576 VOS_ASSERT(0);
6577 return VOS_STATUS_E_NOMEM;
6578 }
6579 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6580 if(NULL == pWdaParams)
6581 {
6582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006584 VOS_ASSERT(0);
6585 vos_mem_free(wdiEnterUapsdReqParams);
6586 return VOS_STATUS_E_NOMEM;
6587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006588 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6589 pEnterUapsdReqParams->beDeliveryEnabled;
6590 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6591 pEnterUapsdReqParams->beTriggerEnabled;
6592 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6593 pEnterUapsdReqParams->bkDeliveryEnabled;
6594 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6595 pEnterUapsdReqParams->bkTriggerEnabled;
6596 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6597 pEnterUapsdReqParams->viDeliveryEnabled;
6598 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6599 pEnterUapsdReqParams->viTriggerEnabled;
6600 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6601 pEnterUapsdReqParams->voDeliveryEnabled;
6602 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6603 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006604 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006605
6606 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6607
Jeff Johnson295189b2012-06-20 16:38:30 -07006608 /* Store param pointer as passed in by caller */
6609 /* store Params pass it to WDI */
6610 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6611 pWdaParams->pWdaContext = pWDA;
6612 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006613 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6614 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006615 if(IS_WDI_STATUS_FAILURE(status))
6616 {
6617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6618 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6619 vos_mem_free(pWdaParams->wdaMsgParam) ;
6620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6621 vos_mem_free(pWdaParams) ;
6622 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 return CONVERT_WDI2VOS_STATUS(status) ;
6624}
Jeff Johnson295189b2012-06-20 16:38:30 -07006625/*
6626 * FUNCTION: WDA_ExitUapsdReqCallback
6627 * send Exit UAPSD RSP back to PE
6628 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006629void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006630{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006631
6632 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6633 tWDA_CbContext *pWDA;
6634 tExitUapsdParams *pExitUapsdRspParams;
6635
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006637 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006638 if(NULL == pWdaParams)
6639 {
6640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006641 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006642 VOS_ASSERT(0);
6643 return;
6644 }
6645
6646 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6647 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6648
6649 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6650 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6651
6652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6653 vos_mem_free(pWdaParams) ;
6654
6655 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006656 return ;
6657}
Jeff Johnson295189b2012-06-20 16:38:30 -07006658/*
6659 * FUNCTION: WDA_ProcessExitUapsdReq
6660 * Request to WDI to Exit UAPSD power state.
6661 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006662VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6663 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006664{
6665 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006666 tWDA_ReqParams *pWdaParams ;
6667 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6668 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6669 sizeof(WDI_ExitUapsdReqParamsType)) ;
6670
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006672 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006673
6674 if(NULL == wdiExitUapsdReqParams)
6675 {
6676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006677 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006678 VOS_ASSERT(0);
6679 return VOS_STATUS_E_NOMEM;
6680 }
6681 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6682 if(NULL == pWdaParams)
6683 {
6684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006685 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006686 VOS_ASSERT(0);
6687 vos_mem_free(wdiExitUapsdReqParams);
6688 return VOS_STATUS_E_NOMEM;
6689 }
6690
6691 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6692 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6693
6694 /* Store param pointer as passed in by caller */
6695 /* store Params pass it to WDI */
6696 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6697 pWdaParams->pWdaContext = pWDA;
6698 pWdaParams->wdaMsgParam = pExitUapsdParams;
6699
6700 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006701 if(IS_WDI_STATUS_FAILURE(status))
6702 {
6703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6704 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006705 vos_mem_free(pWdaParams->wdaMsgParam) ;
6706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6707 vos_mem_free(pWdaParams) ;
6708
Jeff Johnson295189b2012-06-20 16:38:30 -07006709 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 return CONVERT_WDI2VOS_STATUS(status) ;
6711}
6712
Jeff Johnson295189b2012-06-20 16:38:30 -07006713/*
6714 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6715 *
6716 */
6717void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6718{
6719 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006721 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 if(NULL == pWdaParams)
6723 {
6724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006725 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 VOS_ASSERT(0) ;
6727 return ;
6728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 if( pWdaParams != NULL )
6730 {
6731 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6732 {
6733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6734 }
6735 if( pWdaParams->wdaMsgParam != NULL )
6736 {
6737 vos_mem_free(pWdaParams->wdaMsgParam) ;
6738 }
6739 vos_mem_free(pWdaParams) ;
6740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 return ;
6742}
Jeff Johnson295189b2012-06-20 16:38:30 -07006743/*
6744 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6745 * Request to WDI to set the power save params at start.
6746 */
6747VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6748 tSirPowerSaveCfg *pPowerSaveCfg)
6749{
6750 WDI_Status status = WDI_STATUS_SUCCESS ;
6751 tHalCfg *tlvStruct = NULL ;
6752 tANI_U8 *tlvStructStart = NULL ;
6753 v_PVOID_t *configParam;
6754 tANI_U32 configParamSize;
6755 tANI_U32 *configDataValue;
6756 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6757 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006759 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6761 {
6762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006763 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006764 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006765 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 return VOS_STATUS_E_FAILURE;
6767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6769 if (NULL == wdiPowerSaveCfg)
6770 {
6771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006773 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006774 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 return VOS_STATUS_E_NOMEM;
6776 }
6777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6778 if(NULL == pWdaParams)
6779 {
6780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 VOS_ASSERT(0);
6783 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006784 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006785 return VOS_STATUS_E_NOMEM;
6786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6788 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 if(NULL == configParam)
6790 {
6791 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006792 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006793 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006794 vos_mem_free(pWdaParams);
6795 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006796 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 return VOS_STATUS_E_NOMEM;
6798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006799 vos_mem_set(configParam, configParamSize, 0);
6800 wdiPowerSaveCfg->pConfigBuffer = configParam;
6801 tlvStruct = (tHalCfg *)configParam;
6802 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006803 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6804 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6805 tlvStruct->length = sizeof(tANI_U32);
6806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6807 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6809 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
6811 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6812 tlvStruct->length = sizeof(tANI_U32);
6813 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6814 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6816 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006817 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
6818 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6819 tlvStruct->length = sizeof(tANI_U32);
6820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6821 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07006822 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6823 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
6825 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6826 tlvStruct->length = sizeof(tANI_U32);
6827 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6828 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6830 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
6832 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6833 tlvStruct->length = sizeof(tANI_U32);
6834 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6835 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6837 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6839 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6840 tlvStruct->length = sizeof(tANI_U32);
6841 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6842 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6844 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6846 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6847 tlvStruct->length = sizeof(tANI_U32);
6848 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6849 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6851 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
6853 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6854 tlvStruct->length = sizeof(tANI_U32);
6855 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6856 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6857 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6858 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6860 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6861 tlvStruct->length = sizeof(tANI_U32);
6862 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6863 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6864 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6865 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6867 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6868 tlvStruct->length = sizeof(tANI_U32);
6869 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6870 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6872 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6874 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6875 tlvStruct->length = sizeof(tANI_U32);
6876 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6877 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006878 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6879 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 /* store Params pass it to WDI */
6883 pWdaParams->wdaMsgParam = configParam;
6884 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6885 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006886 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6887 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 if(IS_WDI_STATUS_FAILURE(status))
6889 {
6890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6891 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6892 vos_mem_free(pWdaParams->wdaMsgParam);
6893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6894 vos_mem_free(pWdaParams);
6895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 return CONVERT_WDI2VOS_STATUS(status);
6898}
Jeff Johnson295189b2012-06-20 16:38:30 -07006899/*
6900 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6901 *
6902 */
6903void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6904{
6905 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006907 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6909 vos_mem_free(pWdaParams);
6910
Jeff Johnson295189b2012-06-20 16:38:30 -07006911 return ;
6912}
Jeff Johnson295189b2012-06-20 16:38:30 -07006913/*
6914 * FUNCTION: WDA_SetUapsdAcParamsReq
6915 * Request to WDI to set the UAPSD params for an ac (sta mode).
6916 */
6917VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6918 tUapsdInfo *pUapsdInfo)
6919{
6920 WDI_Status status = WDI_STATUS_SUCCESS;
6921 tWDA_CbContext *pWDA = NULL ;
6922 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6923 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6924 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6925 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006927 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 if(NULL == wdiUapsdParams)
6929 {
6930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 VOS_ASSERT(0);
6933 return VOS_STATUS_E_NOMEM;
6934 }
6935 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6936 if(NULL == pWdaParams)
6937 {
6938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006940 VOS_ASSERT(0);
6941 vos_mem_free(wdiUapsdParams);
6942 return VOS_STATUS_E_NOMEM;
6943 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6945 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6946 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6947 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6948 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6949 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006950 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 pWdaParams->pWdaContext = pWDA;
6953 /* Store param pointer as passed in by caller */
6954 pWdaParams->wdaMsgParam = pUapsdInfo;
6955 /* store Params pass it to WDI */
6956 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
6958 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
6959 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 if(IS_WDI_STATUS_FAILURE(status))
6961 {
6962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6963 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
6964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6965 vos_mem_free(pWdaParams);
6966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006967 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
6968 return VOS_STATUS_SUCCESS;
6969 else
6970 return VOS_STATUS_E_FAILURE;
6971
Jeff Johnson295189b2012-06-20 16:38:30 -07006972}
6973/*
6974 * FUNCTION: WDA_ClearUapsdAcParamsReq
6975 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
6976 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
6977 * and again enter the UPASD with the modified params. Hence the disable
6978 * function was kept empty.
6979 *
6980 */
6981VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
6982{
6983 /* do nothing */
6984 return VOS_STATUS_SUCCESS;
6985}
Jeff Johnson295189b2012-06-20 16:38:30 -07006986/*
6987 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
6988 *
6989 */
6990void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
6991{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6993
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006995 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006996
6997 if(NULL == pWdaParams)
6998 {
6999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007000 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007001 VOS_ASSERT(0) ;
7002 return ;
7003 }
7004
7005 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7006 vos_mem_free(pWdaParams->wdaMsgParam);
7007 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007008
Jeff Johnson295189b2012-06-20 16:38:30 -07007009 //print a msg, nothing else to do
7010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7011 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 return ;
7013}
Jeff Johnson295189b2012-06-20 16:38:30 -07007014/*
7015 * FUNCTION: WDA_UpdateUapsdParamsReq
7016 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7017 */
7018VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7019 tUpdateUapsdParams* pUpdateUapsdInfo)
7020{
7021 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007022 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7024 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7025 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007026 tWDA_ReqParams *pWdaParams = NULL;
7027
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007029 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 if(NULL == wdiUpdateUapsdParams)
7031 {
7032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007033 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 VOS_ASSERT(0);
7035 return VOS_STATUS_E_NOMEM;
7036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007037 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7038 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7039 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007040
7041 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7042 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 {
7044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007045 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007047 vos_mem_free(pUpdateUapsdInfo);
7048 vos_mem_free(wdiUpdateUapsdParams);
7049 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007052 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007054 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7055 pWdaParams->pWdaContext = pWDA;
7056
Jeff Johnson43971f52012-07-17 12:26:56 -07007057 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007058 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7059 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007060
Jeff Johnson43971f52012-07-17 12:26:56 -07007061 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007062 {
7063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7064 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007065 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7067 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007068 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007070 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007071}
Jeff Johnson295189b2012-06-20 16:38:30 -07007072/*
7073 * FUNCTION: WDA_ConfigureRxpFilterCallback
7074 *
7075 */
7076void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7077{
7078 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007080 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 if(WDI_STATUS_SUCCESS != wdiStatus)
7082 {
7083 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007084 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007086 if(NULL == pWdaParams)
7087 {
7088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007089 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 VOS_ASSERT(0) ;
7091 return ;
7092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7094 vos_mem_free(pWdaParams->wdaMsgParam);
7095 vos_mem_free(pWdaParams);
7096 return ;
7097}
Jeff Johnson295189b2012-06-20 16:38:30 -07007098/*
7099 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7100 *
7101 */
7102VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7103 tSirWlanSetRxpFilters *pWlanSuspendParam)
7104{
Jeff Johnson295189b2012-06-20 16:38:30 -07007105 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007106 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007107 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7108 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7109 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7110 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007113 if(NULL == wdiRxpFilterParams)
7114 {
7115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 VOS_ASSERT(0);
7118 vos_mem_free(pWlanSuspendParam);
7119 return VOS_STATUS_E_NOMEM;
7120 }
7121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7122 if(NULL == pWdaParams)
7123 {
7124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 VOS_ASSERT(0);
7127 vos_mem_free(wdiRxpFilterParams);
7128 vos_mem_free(pWlanSuspendParam);
7129 return VOS_STATUS_E_NOMEM;
7130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7132 pWlanSuspendParam->setMcstBcstFilter;
7133 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7134 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7135
7136 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 pWdaParams->pWdaContext = pWDA;
7138 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7139 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007140 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7142 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007143 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 {
7145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7146 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007147 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7149 vos_mem_free(pWdaParams->wdaMsgParam);
7150 vos_mem_free(pWdaParams);
7151 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007152 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007153}
Jeff Johnson295189b2012-06-20 16:38:30 -07007154/*
7155 * FUNCTION: WDA_WdiIndicationCallback
7156 *
7157 */
7158void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7159 void* pUserData)
7160{
7161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007162 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007163}
Jeff Johnson295189b2012-06-20 16:38:30 -07007164/*
7165 * FUNCTION: WDA_ProcessWlanSuspendInd
7166 *
7167 */
7168VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7169 tSirWlanSuspendParam *pWlanSuspendParam)
7170{
7171 WDI_Status wdiStatus;
7172 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007174 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007175 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7176 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7177 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7178 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7181 if(WDI_STATUS_PENDING == wdiStatus)
7182 {
7183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007184 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 }
7186 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7187 {
7188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007189 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 vos_mem_free(pWlanSuspendParam);
7192 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7193}
7194
Jeff Johnson295189b2012-06-20 16:38:30 -07007195/*
7196 * FUNCTION: WDA_ProcessWlanResumeCallback
7197 *
7198 */
7199void WDA_ProcessWlanResumeCallback(
7200 WDI_SuspendResumeRspParamsType *resumeRspParams,
7201 void* pUserData)
7202{
7203 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007205 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 if(NULL == pWdaParams)
7207 {
7208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007209 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 VOS_ASSERT(0) ;
7211 return ;
7212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007213 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7214 {
7215 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007216 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7219 vos_mem_free(pWdaParams->wdaMsgParam);
7220 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 return ;
7222}
Jeff Johnson295189b2012-06-20 16:38:30 -07007223/*
7224 * FUNCTION: WDA_ProcessWlanResumeReq
7225 *
7226 */
7227VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7228 tSirWlanResumeParam *pWlanResumeParam)
7229{
7230 WDI_Status wdiStatus;
7231 WDI_ResumeParamsType *wdiResumeParams =
7232 (WDI_ResumeParamsType *)vos_mem_malloc(
7233 sizeof(WDI_ResumeParamsType) ) ;
7234 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007236 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 if(NULL == wdiResumeParams)
7238 {
7239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007240 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 VOS_ASSERT(0);
7242 return VOS_STATUS_E_NOMEM;
7243 }
7244 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7245 if(NULL == pWdaParams)
7246 {
7247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 VOS_ASSERT(0);
7250 vos_mem_free(wdiResumeParams);
7251 return VOS_STATUS_E_NOMEM;
7252 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007253 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7254 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 wdiResumeParams->wdiReqStatusCB = NULL;
7257 pWdaParams->wdaMsgParam = pWlanResumeParam;
7258 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7259 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007260 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7261 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7262 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7264 {
7265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7266 "Failure in Host Resume REQ WDI API, free all the memory " );
7267 VOS_ASSERT(0);
7268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7269 vos_mem_free(pWdaParams->wdaMsgParam);
7270 vos_mem_free(pWdaParams);
7271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007272 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7273}
7274
Jeff Johnson295189b2012-06-20 16:38:30 -07007275/*
7276 * FUNCTION: WDA_SetBeaconFilterReqCallback
7277 *
7278 */
7279void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7280{
7281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007283 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007284 if(NULL == pWdaParams)
7285 {
7286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007287 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 VOS_ASSERT(0) ;
7289 return ;
7290 }
7291
7292 vos_mem_free(pWdaParams->wdaMsgParam) ;
7293 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7294 vos_mem_free(pWdaParams) ;
7295 /*
7296 * No respone required for SetBeaconFilter req so just free the request
7297 * param here
7298 */
7299
Jeff Johnson295189b2012-06-20 16:38:30 -07007300 return ;
7301}
Jeff Johnson295189b2012-06-20 16:38:30 -07007302/*
7303 * FUNCTION: WDA_SetBeaconFilterReq
7304 * Request to WDI to send the beacon filtering related information.
7305 */
7306VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7307 tBeaconFilterMsg* pBeaconFilterInfo)
7308{
7309 WDI_Status status = WDI_STATUS_SUCCESS;
7310 tANI_U8 *dstPtr, *srcPtr;
7311 tANI_U8 filterLength;
7312 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7313 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7314 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7315 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007317 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007318 if(NULL == wdiBeaconFilterInfo)
7319 {
7320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007322 VOS_ASSERT(0);
7323 return VOS_STATUS_E_NOMEM;
7324 }
7325 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7326 if(NULL == pWdaParams)
7327 {
7328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007329 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 VOS_ASSERT(0);
7331 vos_mem_free(wdiBeaconFilterInfo);
7332 return VOS_STATUS_E_NOMEM;
7333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007334 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7335 pBeaconFilterInfo->beaconInterval;
7336 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7337 pBeaconFilterInfo->capabilityInfo;
7338 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7339 pBeaconFilterInfo->capabilityMask;
7340 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007341
7342 //Fill the BssIdx
7343 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7344
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 //Fill structure with info contained in the beaconFilterTable
7346 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7347 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7348 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7349 if(WDI_BEACON_FILTER_LEN < filterLength)
7350 {
7351 filterLength = WDI_BEACON_FILTER_LEN;
7352 }
7353 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007354 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7355 /* Store param pointer as passed in by caller */
7356 /* store Params pass it to WDI */
7357 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7358 pWdaParams->pWdaContext = pWDA;
7359 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7360
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7362 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 if(IS_WDI_STATUS_FAILURE(status))
7364 {
7365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7366 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7367 vos_mem_free(pWdaParams->wdaMsgParam) ;
7368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7369 vos_mem_free(pWdaParams) ;
7370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 return CONVERT_WDI2VOS_STATUS(status) ;
7372}
Jeff Johnson295189b2012-06-20 16:38:30 -07007373/*
7374 * FUNCTION: WDA_RemBeaconFilterReqCallback
7375 *
7376 */
7377void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7378{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7380
Jeff Johnson295189b2012-06-20 16:38:30 -07007381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007382 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007383
7384 if(NULL == pWdaParams)
7385 {
7386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007387 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007388 VOS_ASSERT(0) ;
7389 return ;
7390 }
7391
7392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7393 vos_mem_free(pWdaParams->wdaMsgParam);
7394 vos_mem_free(pWdaParams);
7395
Jeff Johnson295189b2012-06-20 16:38:30 -07007396 //print a msg, nothing else to do
7397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7398 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 return ;
7400}
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 // TODO: PE does not have this feature for now implemented,
7402 // but the support for removing beacon filter exists between
7403 // HAL and FW. This function can be called whenever PE defines
7404 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007405/*
7406 * FUNCTION: WDA_RemBeaconFilterReq
7407 * Request to WDI to send the removal of beacon filtering related information.
7408 */
7409VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7410 tRemBeaconFilterMsg* pBeaconFilterInfo)
7411{
7412 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007413 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007414 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7415 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7416 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007417 tWDA_ReqParams *pWdaParams ;
7418
Jeff Johnson295189b2012-06-20 16:38:30 -07007419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007420 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007421 if(NULL == wdiBeaconFilterInfo)
7422 {
7423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007424 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007425 VOS_ASSERT(0);
7426 return VOS_STATUS_E_NOMEM;
7427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007428 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7429 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 //Fill structure with info contained in the ucRemIeId
7431 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7432 pBeaconFilterInfo->ucRemIeId,
7433 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7434 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007435
7436 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7437 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 {
7439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007441 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007442 vos_mem_free(wdiBeaconFilterInfo);
7443 vos_mem_free(pBeaconFilterInfo);
7444 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 }
7446
7447 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007448 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007449 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007450 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7451
7452 pWdaParams->pWdaContext = pWDA;
7453
Jeff Johnson43971f52012-07-17 12:26:56 -07007454 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007455 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007456 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 {
7458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7459 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007460 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7462 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007463 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007465 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007466}
Jeff Johnson295189b2012-06-20 16:38:30 -07007467/*
7468 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7469 *
7470 */
7471void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7472{
7473 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007475 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 if(NULL == pWdaParams)
7477 {
7478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007479 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007480 VOS_ASSERT(0) ;
7481 return ;
7482 }
7483
7484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7485 vos_mem_free(pWdaParams) ;
7486
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 return ;
7488}
Jeff Johnson295189b2012-06-20 16:38:30 -07007489/*
7490 * FUNCTION: WDA_SetRSSIThresholdsReq
7491 * Request to WDI to set the RSSI thresholds (sta mode).
7492 */
7493VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7494{
7495 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007496 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007497 tWDA_CbContext *pWDA = NULL ;
7498 v_PVOID_t pVosContext = NULL;
7499 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7500 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7501 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7502 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007504 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007505 if(NULL == wdiRSSIThresholdsInfo)
7506 {
7507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 VOS_ASSERT(0);
7510 return VOS_STATUS_E_NOMEM;
7511 }
7512 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7513 if(NULL == pWdaParams)
7514 {
7515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007516 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 VOS_ASSERT(0);
7518 vos_mem_free(wdiRSSIThresholdsInfo);
7519 return VOS_STATUS_E_NOMEM;
7520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007521 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007522 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7523 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7524 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7526 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7527 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7529 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7530 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007531 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7533 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7534
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 /* Store param pointer as passed in by caller */
7536 /* store Params pass it to WDI */
7537 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7538 pWdaParams->pWdaContext = pWDA;
7539 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007540 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007542 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007543 {
7544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7545 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007546 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7548 vos_mem_free(pWdaParams) ;
7549 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007550 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007551
7552}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007553/*
7554 * FUNCTION: WDA_HostOffloadReqCallback
7555 *
7556 */
7557void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7558{
7559 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7560
7561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007562 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 if(NULL == pWdaParams)
7564 {
7565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007566 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007567 VOS_ASSERT(0) ;
7568 return ;
7569 }
7570
7571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7572 vos_mem_free(pWdaParams->wdaMsgParam);
7573 vos_mem_free(pWdaParams) ;
7574
7575 //print a msg, nothing else to do
7576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7577 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 return ;
7579}
Jeff Johnson295189b2012-06-20 16:38:30 -07007580/*
7581 * FUNCTION: WDA_ProcessHostOffloadReq
7582 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7583 * to broadcast traffic (sta mode).
7584 */
7585VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7586 tSirHostOffloadReq *pHostOffloadParams)
7587{
7588 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007589 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7591 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7592 sizeof(WDI_HostOffloadReqParamsType)) ;
7593 tWDA_ReqParams *pWdaParams ;
7594
7595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007596 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007597
7598 if(NULL == wdiHostOffloadInfo)
7599 {
7600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007602 VOS_ASSERT(0);
7603 return VOS_STATUS_E_NOMEM;
7604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007605 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7606 if(NULL == pWdaParams)
7607 {
7608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 VOS_ASSERT(0);
7611 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007612 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 return VOS_STATUS_E_NOMEM;
7614 }
7615
7616 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7617 pHostOffloadParams->offloadType;
7618 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7619 pHostOffloadParams->enableOrDisable;
7620
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007621 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7622 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7623
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7625 {
7626 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7627 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7628 pHostOffloadParams->params.hostIpv4Addr,
7629 4);
7630 break;
7631 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7632 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7633 pHostOffloadParams->params.hostIpv6Addr,
7634 16);
7635 break;
7636 case SIR_IPV6_NS_OFFLOAD:
7637 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7638 pHostOffloadParams->params.hostIpv6Addr,
7639 16);
7640
7641#ifdef WLAN_NS_OFFLOAD
7642 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7643 {
7644 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7645 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7646 16);
7647 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7648 }
7649 else
7650 {
7651 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7652 }
7653
7654 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7655 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7656 16);
7657 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7658 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7659 6);
7660
7661 //Only two are supported so let's go through them without a loop
7662 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7663 {
7664 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7665 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7666 16);
7667 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7668 }
7669 else
7670 {
7671 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7672 }
7673
7674 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7675 {
7676 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7677 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7678 16);
7679 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7680 }
7681 else
7682 {
7683 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7684 }
7685 break;
7686#endif //WLAN_NS_OFFLOAD
7687 default:
7688 {
7689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7690 "No Handling for Offload Type %x in WDA "
7691 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7692 //WDA_VOS_ASSERT(0) ;
7693 }
7694 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007695 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007696
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007698 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007699 /* store Params pass it to WDI */
7700 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7701 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007702
Jeff Johnson295189b2012-06-20 16:38:30 -07007703
Jeff Johnson43971f52012-07-17 12:26:56 -07007704 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007705 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7706
Jeff Johnson43971f52012-07-17 12:26:56 -07007707 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007708 {
7709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7710 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007711 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7713 vos_mem_free(pWdaParams->wdaMsgParam);
7714 vos_mem_free(pWdaParams) ;
7715 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007716 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007717
7718}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007719/*
7720 * FUNCTION: WDA_KeepAliveReqCallback
7721 *
7722 */
7723void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7724{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7726
Jeff Johnson295189b2012-06-20 16:38:30 -07007727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007728 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007729
7730 if(NULL == pWdaParams)
7731 {
7732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007733 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007734 VOS_ASSERT(0) ;
7735 return ;
7736 }
7737
7738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7739 vos_mem_free(pWdaParams->wdaMsgParam);
7740 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007741
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 //print a msg, nothing else to do
7743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7744 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 return ;
7746}
Jeff Johnson295189b2012-06-20 16:38:30 -07007747/*
7748 * FUNCTION: WDA_ProcessKeepAliveReq
7749 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7750 * wakeup due to broadcast traffic (sta mode).
7751 */
7752VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7753 tSirKeepAliveReq *pKeepAliveParams)
7754{
7755 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007756 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007757 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7758 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7759 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007760 tWDA_ReqParams *pWdaParams;
7761
Jeff Johnson295189b2012-06-20 16:38:30 -07007762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007763 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007764 if(NULL == wdiKeepAliveInfo)
7765 {
7766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007767 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007769 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 return VOS_STATUS_E_NOMEM;
7771 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007772
7773 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7774 if(NULL == pWdaParams)
7775 {
7776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007777 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007778 VOS_ASSERT(0);
7779 vos_mem_free(wdiKeepAliveInfo);
7780 vos_mem_free(pKeepAliveParams);
7781 return VOS_STATUS_E_NOMEM;
7782 }
7783
Jeff Johnson295189b2012-06-20 16:38:30 -07007784 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7785 pKeepAliveParams->packetType;
7786 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7787 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007788
7789 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7790 pKeepAliveParams->bssId,
7791 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007792
7793 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7794 {
7795 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7796 pKeepAliveParams->hostIpv4Addr,
7797 SIR_IPV4_ADDR_LEN);
7798 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7799 pKeepAliveParams->destIpv4Addr,
7800 SIR_IPV4_ADDR_LEN);
7801 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7802 pKeepAliveParams->destMacAddr,
7803 SIR_MAC_ADDR_LEN);
7804 }
7805 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7806 {
7807 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7808 SIR_IPV4_ADDR_LEN,
7809 0);
7810 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7811 SIR_IPV4_ADDR_LEN,
7812 0);
7813 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7814 SIR_MAC_ADDR_LEN,
7815 0);
7816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007818
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007820 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007821 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007822 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7823 pWdaParams->pWdaContext = pWDA;
7824
Jeff Johnson295189b2012-06-20 16:38:30 -07007825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7826 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7827 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7828 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7829 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7831 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7832 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7833 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7834 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7836 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7837 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7838 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7839 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7840 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7841 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7842 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7844 "TimePeriod %d PacketType %d",
7845 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7846 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007847 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007848 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7849
Jeff Johnson43971f52012-07-17 12:26:56 -07007850 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 {
7852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7853 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007854 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7856 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007857 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007858 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007859 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007860
7861}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007862/*
7863 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7864 *
7865 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007866void WDA_WowlAddBcPtrnReqCallback(
7867 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7868 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007869{
7870 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007872 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 if(NULL == pWdaParams)
7874 {
7875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007876 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 VOS_ASSERT(0) ;
7878 return ;
7879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7881 vos_mem_free(pWdaParams->wdaMsgParam);
7882 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007883 return ;
7884}
Jeff Johnson295189b2012-06-20 16:38:30 -07007885/*
7886 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7887 * Request to WDI to add WOWL Bcast pattern
7888 */
7889VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7890 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7891{
7892 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007893 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7895 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7896 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7897 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007899 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007900 if(NULL == wdiWowlAddBcPtrnInfo)
7901 {
7902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 VOS_ASSERT(0);
7905 return VOS_STATUS_E_NOMEM;
7906 }
7907 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7908 if(NULL == pWdaParams)
7909 {
7910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007911 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 VOS_ASSERT(0);
7913 vos_mem_free(wdiWowlAddBcPtrnInfo);
7914 return VOS_STATUS_E_NOMEM;
7915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7917 pWowlAddBcPtrnParams->ucPatternId;
7918 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7919 pWowlAddBcPtrnParams->ucPatternByteOffset;
7920 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7921 pWowlAddBcPtrnParams->ucPatternMaskSize;
7922 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7923 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007924 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7925 {
7926 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7927 pWowlAddBcPtrnParams->ucPattern,
7928 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7929 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7930 pWowlAddBcPtrnParams->ucPatternMask,
7931 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7932 }
7933 else
7934 {
7935 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7936 pWowlAddBcPtrnParams->ucPattern,
7937 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7938 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7939 pWowlAddBcPtrnParams->ucPatternMask,
7940 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7941
7942 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7943 pWowlAddBcPtrnParams->ucPatternExt,
7944 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7945 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7946 pWowlAddBcPtrnParams->ucPatternMaskExt,
7947 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7948 }
7949
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007950 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7951 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7952
Jeff Johnson295189b2012-06-20 16:38:30 -07007953 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 /* Store param pointer as passed in by caller */
7955 /* store Params pass it to WDI */
7956 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
7957 pWdaParams->pWdaContext = pWDA;
7958 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007959 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007960 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007961 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 {
7963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7964 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007965 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 vos_mem_free(pWdaParams->wdaMsgParam) ;
7967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7968 vos_mem_free(pWdaParams) ;
7969 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007970 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007971
7972}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007973/*
7974 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
7975 *
7976 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007977void WDA_WowlDelBcPtrnReqCallback(
7978 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
7979 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007980{
7981 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007983 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 if(NULL == pWdaParams)
7985 {
7986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007987 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 VOS_ASSERT(0) ;
7989 return ;
7990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7992 vos_mem_free(pWdaParams->wdaMsgParam);
7993 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 return ;
7995}
Jeff Johnson295189b2012-06-20 16:38:30 -07007996/*
7997 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
7998 * Request to WDI to delete WOWL Bcast pattern
7999 */
8000VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8001 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8002{
8003 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008004 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008005 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8006 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8007 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8008 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008010 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008011 if(NULL == wdiWowlDelBcPtrnInfo)
8012 {
8013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008015 VOS_ASSERT(0);
8016 return VOS_STATUS_E_NOMEM;
8017 }
8018 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8019 if(NULL == pWdaParams)
8020 {
8021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 VOS_ASSERT(0);
8024 vos_mem_free(wdiWowlDelBcPtrnInfo);
8025 return VOS_STATUS_E_NOMEM;
8026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8028 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008029
8030 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8031 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8032
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 /* Store param pointer as passed in by caller */
8035 /* store Params pass it to WDI */
8036 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8037 pWdaParams->pWdaContext = pWDA;
8038 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008039 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008040 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008041 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 {
8043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8044 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008045 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008046 vos_mem_free(pWdaParams->wdaMsgParam) ;
8047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8048 vos_mem_free(pWdaParams) ;
8049 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008050 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008051
8052}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008053/*
8054 * FUNCTION: WDA_WowlEnterReqCallback
8055 *
8056 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008057void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008058{
8059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8060 tWDA_CbContext *pWDA;
8061 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008063 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 if(NULL == pWdaParams)
8065 {
8066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008067 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008068 VOS_ASSERT(0) ;
8069 return ;
8070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008071 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8072 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8073
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008074 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8075
Jeff Johnson295189b2012-06-20 16:38:30 -07008076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8077 vos_mem_free(pWdaParams) ;
8078
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008079 pWowlEnterParams->status =
8080 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 return ;
8083}
Jeff Johnson295189b2012-06-20 16:38:30 -07008084/*
8085 * FUNCTION: WDA_ProcessWowlEnterReq
8086 * Request to WDI to enter WOWL
8087 */
8088VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8089 tSirHalWowlEnterParams *pWowlEnterParams)
8090{
8091 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008092 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8094 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8095 sizeof(WDI_WowlEnterReqParamsType)) ;
8096 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 if(NULL == wdiWowlEnterInfo)
8100 {
8101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 VOS_ASSERT(0);
8104 return VOS_STATUS_E_NOMEM;
8105 }
8106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8107 if(NULL == pWdaParams)
8108 {
8109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008111 VOS_ASSERT(0);
8112 vos_mem_free(wdiWowlEnterInfo);
8113 return VOS_STATUS_E_NOMEM;
8114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008115 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8116 pWowlEnterParams->magicPtrn,
8117 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8119 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008120 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8121 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8123 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008124 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8125 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8127 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8129 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008130 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8131 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008132 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8133 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008134#ifdef WLAN_WAKEUP_EVENTS
8135 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8136 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8137
8138 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8139 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8140
8141 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8142 pWowlEnterParams->ucWowNetScanOffloadMatch;
8143
8144 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8145 pWowlEnterParams->ucWowGTKRekeyError;
8146
8147 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8148 pWowlEnterParams->ucWoWBSSConnLoss;
8149#endif // WLAN_WAKEUP_EVENTS
8150
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008151 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8152 pWowlEnterParams->bssIdx;
8153
Jeff Johnson295189b2012-06-20 16:38:30 -07008154 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008155 /* Store param pointer as passed in by caller */
8156 /* store Params pass it to WDI */
8157 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8158 pWdaParams->pWdaContext = pWDA;
8159 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008160 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008161 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008162 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008163 {
8164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8165 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008166 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008167 vos_mem_free(pWdaParams->wdaMsgParam) ;
8168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8169 vos_mem_free(pWdaParams) ;
8170 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008171 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008172
8173}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008174/*
8175 * FUNCTION: WDA_WowlExitReqCallback
8176 *
8177 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008178void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008179{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008180 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8181 tWDA_CbContext *pWDA;
8182 tSirHalWowlExitParams *pWowlExitParams;
8183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008184 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008185 if(NULL == pWdaParams)
8186 {
8187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008188 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008189 VOS_ASSERT(0) ;
8190 return ;
8191 }
8192 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8193 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8194
8195 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8196 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8197
8198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8199 vos_mem_free(pWdaParams) ;
8200
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008202 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008203 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008204 return ;
8205}
Jeff Johnson295189b2012-06-20 16:38:30 -07008206/*
8207 * FUNCTION: WDA_ProcessWowlExitReq
8208 * Request to WDI to add WOWL Bcast pattern
8209 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008210VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8211 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008212{
8213 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008214 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008215 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8216 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8217 sizeof(WDI_WowlExitReqParamsType)) ;
8218 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008220 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008221 if(NULL == wdiWowlExitInfo)
8222 {
8223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008224 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008225 VOS_ASSERT(0);
8226 return VOS_STATUS_E_NOMEM;
8227 }
8228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8229 if(NULL == pWdaParams)
8230 {
8231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008232 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008233 VOS_ASSERT(0);
8234 vos_mem_free(wdiWowlExitInfo);
8235 return VOS_STATUS_E_NOMEM;
8236 }
8237
8238 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8239 pWowlExitParams->bssIdx;
8240
8241 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8242
8243 /* Store param pointer as passed in by caller */
8244 /* store Params pass it to WDI */
8245 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8246 pWdaParams->pWdaContext = pWDA;
8247 pWdaParams->wdaMsgParam = pWowlExitParams;
8248
8249 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8250 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008251
Jeff Johnson43971f52012-07-17 12:26:56 -07008252 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008253 {
8254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8255 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008256 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008257 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8258 vos_mem_free(pWdaParams->wdaMsgParam);
8259 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008260 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008261 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008262}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008263/*
8264 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8265 * Request to WDI to determine whether a given station is capable of
8266 * using HW-based frame translation
8267 */
8268v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8269 tANI_U8 staIdx)
8270{
8271 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8272}
Jeff Johnson295189b2012-06-20 16:38:30 -07008273/*
8274 * FUNCTION: WDA_NvDownloadReqCallback
8275 * send NV Download RSP back to PE
8276 */
8277void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8278 void* pUserData)
8279{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008280
8281 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8282 tWDA_CbContext *pWDA;
8283
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008285 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008286
8287 if(NULL == pWdaParams)
8288 {
8289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008290 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008291 VOS_ASSERT(0) ;
8292 return ;
8293 }
8294
8295 pWDA = pWdaParams->pWdaContext;
8296
Jeff Johnson295189b2012-06-20 16:38:30 -07008297 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8299 vos_mem_free(pWdaParams);
8300
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008302 return ;
8303}
Jeff Johnson295189b2012-06-20 16:38:30 -07008304/*
8305 * FUNCTION: WDA_ProcessNvDownloadReq
8306 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8307 */
8308VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8309{
8310 /* Initialize the local Variables*/
8311 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8312 v_VOID_t *pNvBuffer=NULL;
8313 v_SIZE_t bufferSize = 0;
8314 WDI_Status status = WDI_STATUS_E_FAILURE;
8315 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008316 tWDA_ReqParams *pWdaParams ;
8317
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008319 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 if(NULL == pWDA)
8321 {
8322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008323 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008324 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008325 return VOS_STATUS_E_FAILURE;
8326 }
8327
8328 /* Get the NV structure base address and size from VOS */
8329 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8331 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008332 if(NULL == wdiNvDownloadReqParam)
8333 {
8334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 VOS_ASSERT(0);
8337 return VOS_STATUS_E_NOMEM;
8338 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 /* Copy Params to wdiNvDownloadReqParam*/
8340 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8341 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008342
8343 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8344 if(NULL == pWdaParams)
8345 {
8346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008347 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008348 VOS_ASSERT(0);
8349 vos_mem_free(wdiNvDownloadReqParam);
8350 return VOS_STATUS_E_NOMEM;
8351 }
8352
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008354 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8355 pWdaParams->wdaMsgParam = NULL;
8356 pWdaParams->pWdaContext = pWDA;
8357
8358
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008360
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008362 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8363
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 if(IS_WDI_STATUS_FAILURE(status))
8365 {
8366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8367 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8369 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008372}
8373/*
8374 * FUNCTION: WDA_FlushAcReqCallback
8375 * send Flush AC RSP back to TL
8376 */
8377void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8378{
8379 vos_msg_t wdaMsg = {0} ;
8380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8381 tFlushACReq *pFlushACReqParams;
8382 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008384 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008385 if(NULL == pWdaParams)
8386 {
8387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008388 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008389 VOS_ASSERT(0) ;
8390 return ;
8391 }
8392
8393 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8394 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8395 if(NULL == pFlushACRspParams)
8396 {
8397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008398 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008400 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 return ;
8402 }
8403 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8404 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8405 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8406 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8407 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8408 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 vos_mem_free(pWdaParams->wdaMsgParam) ;
8410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8411 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8413 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8414 // POST message to TL
8415 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8416
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 return ;
8418}
Jeff Johnson295189b2012-06-20 16:38:30 -07008419/*
8420 * FUNCTION: WDA_ProcessFlushAcReq
8421 * Request to WDI to Update the DELBA REQ params.
8422 */
8423VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8424 tFlushACReq *pFlushAcReqParams)
8425{
8426 WDI_Status status = WDI_STATUS_SUCCESS ;
8427 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8428 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8429 sizeof(WDI_FlushAcReqParamsType)) ;
8430 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 if(NULL == wdiFlushAcReqParam)
8432 {
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 VOS_ASSERT(0);
8436 return VOS_STATUS_E_NOMEM;
8437 }
8438 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8439 if(NULL == pWdaParams)
8440 {
8441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008442 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008443 VOS_ASSERT(0);
8444 vos_mem_free(wdiFlushAcReqParam);
8445 return VOS_STATUS_E_NOMEM;
8446 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008448 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008449 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8450 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8451 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8452 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008453 /* Store Flush AC pointer, as this will be used for response */
8454 /* store Params pass it to WDI */
8455 pWdaParams->pWdaContext = pWDA;
8456 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8457 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008458 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8459 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008460 if(IS_WDI_STATUS_FAILURE(status))
8461 {
8462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8463 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8464 vos_mem_free(pWdaParams->wdaMsgParam) ;
8465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8466 vos_mem_free(pWdaParams) ;
8467 //TODO: respond to TL with failure
8468 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008469 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008470}
Jeff Johnson295189b2012-06-20 16:38:30 -07008471/*
8472 * FUNCTION: WDA_BtAmpEventReqCallback
8473 *
8474 */
8475void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8476{
8477 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8478 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008479 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008480
8481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008482 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008483 if(NULL == pWdaParams)
8484 {
8485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008486 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008487 VOS_ASSERT(0) ;
8488 return ;
8489 }
8490 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8491 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8492 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8493 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8494 {
8495 pWDA->wdaAmpSessionOn = VOS_FALSE;
8496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008497 vos_mem_free(pWdaParams->wdaMsgParam) ;
8498 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8499 vos_mem_free(pWdaParams) ;
8500 /*
8501 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8502 * param here
8503 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 return ;
8505}
8506
Jeff Johnson295189b2012-06-20 16:38:30 -07008507/*
8508 * FUNCTION: WDA_ProcessBtAmpEventReq
8509 * Request to WDI to Update with BT AMP events.
8510 */
8511VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8512 tSmeBtAmpEvent *pBtAmpEventParams)
8513{
8514 WDI_Status status = WDI_STATUS_SUCCESS ;
8515 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8516 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8517 sizeof(WDI_BtAmpEventParamsType)) ;
8518 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008520 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008521 if(NULL == wdiBtAmpEventParam)
8522 {
8523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 VOS_ASSERT(0);
8526 return VOS_STATUS_E_NOMEM;
8527 }
8528 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8529 if(NULL == pWdaParams)
8530 {
8531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008533 VOS_ASSERT(0);
8534 vos_mem_free(wdiBtAmpEventParam);
8535 return VOS_STATUS_E_NOMEM;
8536 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008537 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8538 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008540 /* Store BT AMP event pointer, as this will be used for response */
8541 /* store Params pass it to WDI */
8542 pWdaParams->pWdaContext = pWDA;
8543 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8544 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008545 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8546 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008547 if(IS_WDI_STATUS_FAILURE(status))
8548 {
8549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8550 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8551 vos_mem_free(pWdaParams->wdaMsgParam) ;
8552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8553 vos_mem_free(pWdaParams) ;
8554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8556 {
8557 pWDA->wdaAmpSessionOn = VOS_TRUE;
8558 }
8559 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008560}
8561
Jeff Johnson295189b2012-06-20 16:38:30 -07008562/*
8563 * FUNCTION: WDA_FTMCommandReqCallback
8564 * Handle FTM CMD response came from HAL
8565 * Route responce to HDD FTM
8566 */
8567void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8568 void *usrData)
8569{
8570 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008571 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8572 {
8573 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008574 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 return;
8576 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008577 /* Release Current FTM Command Request */
8578 vos_mem_free(pWDA->wdaFTMCmdReq);
8579 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008580 /* Post FTM Responce to HDD FTM */
8581 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008582 return;
8583}
Jeff Johnson295189b2012-06-20 16:38:30 -07008584/*
8585 * FUNCTION: WDA_ProcessFTMCommand
8586 * Send FTM command to WDI
8587 */
8588VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8589 tPttMsgbuffer *pPTTFtmCmd)
8590{
8591 WDI_Status status = WDI_STATUS_SUCCESS;
8592 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 ftmCMDReq = (WDI_FTMCommandReqType *)
8594 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8595 if(NULL == ftmCMDReq)
8596 {
8597 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8598 "WDA FTM Command buffer alloc fail");
8599 return VOS_STATUS_E_NOMEM;
8600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8602 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008603 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008604 /* Send command to WDI */
8605 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008606 return status;
8607}
Jeff Johnsone7245742012-09-05 17:12:55 -07008608#ifdef FEATURE_OEM_DATA_SUPPORT
8609/*
8610 * FUNCTION: WDA_StartOemDataReqCallback
8611 *
8612 */
8613void WDA_StartOemDataReqCallback(
8614 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8615 void* pUserData)
8616{
8617 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008618 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8619 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008620 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008621
Jeff Johnsone7245742012-09-05 17:12:55 -07008622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008623 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008624
8625 if(NULL == pWdaParams)
8626 {
8627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008628 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008629 VOS_ASSERT(0) ;
8630 return ;
8631 }
8632 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8633
Jeff Johnsone7245742012-09-05 17:12:55 -07008634 if(NULL == pWDA)
8635 {
8636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008637 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008638 VOS_ASSERT(0);
8639 return ;
8640 }
8641
8642 /*
8643 * Allocate memory for response params sent to PE
8644 */
8645 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8646
8647 // Check if memory is allocated for OemdataMeasRsp Params.
8648 if(NULL == pOemDataRspParams)
8649 {
8650 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8651 "OEM DATA WDA callback alloc fail");
8652 VOS_ASSERT(0) ;
8653 return;
8654 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008655
Jeff Johnsone7245742012-09-05 17:12:55 -07008656 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8658 vos_mem_free(pWdaParams->wdaMsgParam);
8659 vos_mem_free(pWdaParams) ;
8660
Jeff Johnsone7245742012-09-05 17:12:55 -07008661 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08008662 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07008663 * Also, here success always means that we have atleast one BSSID.
8664 */
8665 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8666
8667 //enable Tx
8668 status = WDA_ResumeDataTx(pWDA);
8669 if(status != VOS_STATUS_SUCCESS)
8670 {
8671 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8672 }
8673 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8674 return ;
8675}
8676/*
8677 * FUNCTION: WDA_ProcessStartOemDataReq
8678 * Send Start Oem Data Req to WDI
8679 */
8680VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8681 tStartOemDataReq *pOemDataReqParams)
8682{
8683 WDI_Status status = WDI_STATUS_SUCCESS;
8684 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008685 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008686
8687 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8688
8689 if(NULL == wdiOemDataReqParams)
8690 {
8691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008693 VOS_ASSERT(0);
8694 return VOS_STATUS_E_NOMEM;
8695 }
8696
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008697 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8698 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8699 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8700 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008701
8702 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8703
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008704 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8705 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008706 {
8707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008708 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008709 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008710 vos_mem_free(pOemDataReqParams);
8711 VOS_ASSERT(0);
8712 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008713 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008714
Bernald44a1ae2013-01-09 08:30:39 -08008715 pWdaParams->pWdaContext = (void*)pWDA;
8716 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
8717 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008718
8719 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8720 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008721
8722 if(IS_WDI_STATUS_FAILURE(status))
8723 {
8724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8725 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8727 vos_mem_free(pWdaParams->wdaMsgParam);
8728 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008729 }
8730 return CONVERT_WDI2VOS_STATUS(status) ;
8731}
8732#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008733/*
8734 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8735 *
8736 */
8737void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8738{
8739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008741 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008742 if(NULL == pWdaParams)
8743 {
8744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008745 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008746 VOS_ASSERT(0) ;
8747 return ;
8748 }
8749
8750 if(NULL != pWdaParams->wdaMsgParam)
8751 {
8752 vos_mem_free(pWdaParams->wdaMsgParam);
8753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008754 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8755 {
8756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8757 }
8758
8759 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008760 return ;
8761}
Jeff Johnson295189b2012-06-20 16:38:30 -07008762#ifdef WLAN_FEATURE_GTK_OFFLOAD
8763/*
8764 * FUNCTION: WDA_HostOffloadReqCallback
8765 *
8766 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008767void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8768 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008769{
8770 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8771
8772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008773 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008774
8775 VOS_ASSERT(NULL != pWdaParams);
8776
8777 vos_mem_free(pWdaParams->wdaMsgParam) ;
8778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8779 vos_mem_free(pWdaParams) ;
8780
8781 //print a msg, nothing else to do
8782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8783 "WDA_GTKOffloadReqCallback invoked " );
8784
8785 return ;
8786}
8787
8788/*
8789 * FUNCTION: WDA_ProcessGTKOffloadReq
8790 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8791 * to broadcast traffic (sta mode).
8792 */
8793VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8794 tpSirGtkOffloadParams pGtkOffloadParams)
8795{
8796 VOS_STATUS status = VOS_STATUS_SUCCESS;
8797 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8798 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8799 sizeof(WDI_GtkOffloadReqMsg)) ;
8800 tWDA_ReqParams *pWdaParams ;
8801
8802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008803 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008804
8805 if(NULL == wdiGtkOffloadReqMsg)
8806 {
8807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008808 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008809 VOS_ASSERT(0);
8810 return VOS_STATUS_E_NOMEM;
8811 }
8812
8813 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8814 if(NULL == pWdaParams)
8815 {
8816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008817 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 VOS_ASSERT(0);
8819 vos_mem_free(wdiGtkOffloadReqMsg);
8820 return VOS_STATUS_E_NOMEM;
8821 }
8822
8823 //
8824 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8825 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008826
8827 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8828 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8829
Jeff Johnson295189b2012-06-20 16:38:30 -07008830 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8831 // Copy KCK
8832 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8833 // Copy KEK
8834 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8835 // Copy KeyReplayCounter
8836 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8837 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8838
8839 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8840
8841 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8842 (NULL == pWDA->wdaWdiApiMsgParam));
8843
8844 /* Store Params pass it to WDI */
8845 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8846 pWdaParams->pWdaContext = pWDA;
8847 /* Store param pointer as passed in by caller */
8848 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8849
8850 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8851
8852 if(IS_WDI_STATUS_FAILURE(status))
8853 {
8854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8855 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8857 vos_mem_free(pWdaParams->wdaMsgParam);
8858 vos_mem_free(pWdaParams);
8859 }
8860
8861 return CONVERT_WDI2VOS_STATUS(status) ;
8862}
8863
8864/*
8865 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8866 *
8867 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008868void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8869 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008870{
8871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8872 tWDA_CbContext *pWDA;
8873 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8874 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8875 tANI_U8 i;
8876 vos_msg_t vosMsg;
8877
8878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008879 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008880
8881 VOS_ASSERT(NULL != pWdaParams);
8882
8883 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8884 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8885
8886 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8887 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8888
8889 /* Message Header */
8890 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8891 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8892
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008893 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8894 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8895 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8896 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8897 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8898 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008899
8900 /* VOS message wrapper */
8901 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8902 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8903 vosMsg.bodyval = 0;
8904
8905 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8906 {
8907 /* free the mem and return */
8908 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8909 }
8910
8911 vos_mem_free(pWdaParams->wdaMsgParam) ;
8912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8913 vos_mem_free(pWdaParams) ;
8914}
8915#endif
8916
8917/*
8918 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8919 * Request to WDI to set Tx Per Tracking configurations
8920 */
8921VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8922{
8923 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008924 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8926 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8927 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8928 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008930 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008931 if(NULL == pwdiSetTxPerTrackingReqParams)
8932 {
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008934 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008935 vos_mem_free(pTxPerTrackingParams);
8936 VOS_ASSERT(0);
8937 return VOS_STATUS_E_NOMEM;
8938 }
8939 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8940 if(NULL == pWdaParams)
8941 {
8942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008943 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008944 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8945 vos_mem_free(pTxPerTrackingParams);
8946 VOS_ASSERT(0);
8947 return VOS_STATUS_E_NOMEM;
8948 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008949 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
8950 pTxPerTrackingParams->ucTxPerTrackingEnable;
8951 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
8952 pTxPerTrackingParams->ucTxPerTrackingPeriod;
8953 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
8954 pTxPerTrackingParams->ucTxPerTrackingRatio;
8955 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
8956 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07008957 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 /* Store param pointer as passed in by caller */
8959 /* store Params pass it to WDI
8960 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
8961 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
8962 pWdaParams->pWdaContext = pWDA;
8963 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008964 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07008965 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008966 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008967 {
8968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8969 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008970 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008971 vos_mem_free(pWdaParams->wdaMsgParam) ;
8972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8973 vos_mem_free(pWdaParams) ;
8974 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008975 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008976
8977}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008978/*
8979 * FUNCTION: WDA_HALDumpCmdCallback
8980 * Send the VOS complete .
8981 */
8982void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
8983 void* pUserData)
8984{
8985 tANI_U8 *buffer = NULL;
8986 tWDA_CbContext *pWDA = NULL;
8987 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008988 if(NULL == pWdaParams)
8989 {
8990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008991 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 VOS_ASSERT(0) ;
8993 return ;
8994 }
8995
8996 pWDA = pWdaParams->pWdaContext;
8997 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 if(wdiRspParams->usBufferLen > 0)
8999 {
9000 /*Copy the Resp data to UMAC supplied buffer*/
9001 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
9002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9004 vos_mem_free(pWdaParams);
9005
9006 /* Indicate VOSS about the start complete */
9007 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009008 return ;
9009}
9010
Jeff Johnson295189b2012-06-20 16:38:30 -07009011/*
9012 * FUNCTION: WDA_ProcessHALDumpCmdReq
9013 * Send Dump command to WDI
9014 */
9015VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9016 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9017 tANI_U32 arg4, tANI_U8 *pBuffer)
9018{
9019 WDI_Status status = WDI_STATUS_SUCCESS;
9020 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9021 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9022 tWDA_ReqParams *pWdaParams ;
9023 pVosContextType pVosContext = NULL;
9024 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009025 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9026 (void *)pMac);
9027
9028 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9029 if(NULL == pWdaParams)
9030 {
9031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009032 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009033 return VOS_STATUS_E_NOMEM;
9034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009035 /* Allocate memory WDI request structure*/
9036 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9037 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9038 if(NULL == wdiHALDumpCmdReqParam)
9039 {
9040 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9041 "WDA HAL DUMP Command buffer alloc fail");
9042 vos_mem_free(pWdaParams);
9043 return WDI_STATUS_E_FAILURE;
9044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009045 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009046 /* Extract the arguments */
9047 wdiHalDumpCmdInfo->command = cmd;
9048 wdiHalDumpCmdInfo->argument1 = arg1;
9049 wdiHalDumpCmdInfo->argument2 = arg2;
9050 wdiHalDumpCmdInfo->argument3 = arg3;
9051 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009052 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009053 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9054
9055 /* Response message will be passed through the buffer */
9056 pWdaParams->wdaMsgParam = (void *)pBuffer;
9057
9058 /* store Params pass it to WDI */
9059 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009060 /* Send command to WDI */
9061 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -08009062 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -07009063 if ( vStatus != VOS_STATUS_SUCCESS )
9064 {
9065 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9066 {
9067 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -08009068 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009069 }
9070 else
9071 {
9072 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009073 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 }
9075 VOS_ASSERT(0);
9076 }
9077 return status;
9078}
Jeff Johnson295189b2012-06-20 16:38:30 -07009079#ifdef WLAN_FEATURE_GTK_OFFLOAD
9080/*
9081 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9082 * Request to WDI to get GTK Offload Information
9083 */
9084VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9085 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9086{
9087 VOS_STATUS status = VOS_STATUS_SUCCESS;
9088 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9089 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9090 tWDA_ReqParams *pWdaParams ;
9091
9092 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9093 {
9094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009095 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 VOS_ASSERT(0);
9097 return VOS_STATUS_E_NOMEM;
9098 }
9099
9100 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9101 if(NULL == pWdaParams)
9102 {
9103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009104 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009105 VOS_ASSERT(0);
9106 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9107 return VOS_STATUS_E_NOMEM;
9108 }
9109
9110 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9111
9112 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9113 (NULL == pWDA->wdaWdiApiMsgParam));
9114
9115 /* Store Params pass it to WDI */
9116 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9117 pWdaParams->pWdaContext = pWDA;
9118 /* Store param pointer as passed in by caller */
9119 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9120
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009121 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9122 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9123
Jeff Johnson295189b2012-06-20 16:38:30 -07009124 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9125
9126 if(IS_WDI_STATUS_FAILURE(status))
9127 {
9128 /* failure returned by WDI API */
9129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9130 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9132 vos_mem_free(pWdaParams) ;
9133 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9134 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9135 }
9136
9137 return CONVERT_WDI2VOS_STATUS(status) ;
9138}
9139#endif // WLAN_FEATURE_GTK_OFFLOAD
9140
9141/*
9142 * -------------------------------------------------------------------------
9143 * DATA interface with WDI for Mgmt Frames
9144 * -------------------------------------------------------------------------
9145 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009146/*
9147 * FUNCTION: WDA_TxComplete
9148 * Callback function for the WDA_TxPacket
9149 */
9150VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9151 VOS_STATUS status )
9152{
9153
9154 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9155 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009156 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009157
9158 if(NULL == wdaContext)
9159 {
9160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9161 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009162 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 VOS_ASSERT(0);
9164 return VOS_STATUS_E_FAILURE;
9165 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009166
9167 /*Check if frame was timed out or not*/
9168 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9169 (v_PVOID_t)&uUserData);
9170
9171 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9172 {
9173 /*Discard frame - no further processing is needed*/
9174 vos_pkt_return_packet(pData);
9175 return VOS_STATUS_SUCCESS;
9176 }
9177
Jeff Johnson295189b2012-06-20 16:38:30 -07009178 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9179 if( NULL!=wdaContext->pTxCbFunc)
9180 {
9181 /*check if packet is freed already*/
9182 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9183 {
9184 wdaContext->pTxCbFunc(pMac, pData);
9185 }
9186 else
9187 {
9188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9189 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009190 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009191 //Return from here since we reaching here because the packet already timeout
9192 return status;
9193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 }
9195
9196 /*
9197 * Trigger the event to bring the HAL TL Tx complete function to come
9198 * out of wait
9199 * Let the coe above to complete the packet first. When this event is set,
9200 * the thread waiting for the event may run and set Vospacket_freed causing the original
9201 * packet not being freed.
9202 */
9203 status = vos_event_set(&wdaContext->txFrameEvent);
9204 if(!VOS_IS_STATUS_SUCCESS(status))
9205 {
9206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9207 "NEW VOS Event Set failed - status = %d \n", status);
9208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009209 return status;
9210}
Jeff Johnson295189b2012-06-20 16:38:30 -07009211/*
9212 * FUNCTION: WDA_TxPacket
9213 * Forward TX management frame to WDI
9214 */
9215VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9216 void *pFrmBuf,
9217 tANI_U16 frmLen,
9218 eFrameType frmType,
9219 eFrameTxDir txDir,
9220 tANI_U8 tid,
9221 pWDATxRxCompFunc pCompFunc,
9222 void *pData,
9223 pWDAAckFnTxComp pAckTxComp,
9224 tANI_U8 txFlag)
9225{
9226 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9227 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9228 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9229 tANI_U8 eventIdx = 0;
9230 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9231 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009232 if((NULL == pWDA)||(NULL == pFrmBuf))
9233 {
9234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9235 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009236 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009237 VOS_ASSERT(0);
9238 return VOS_STATUS_E_FAILURE;
9239 }
9240
9241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9242 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9244 if(NULL == pMac)
9245 {
9246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009247 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009248 VOS_ASSERT(0);
9249 return VOS_STATUS_E_FAILURE;
9250 }
9251
9252
9253
9254 /* store the call back function in WDA context */
9255 pWDA->pTxCbFunc = pCompFunc;
9256 /* store the call back for the function of ackTxComplete */
9257 if( pAckTxComp )
9258 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009259 if( NULL != pWDA->pAckTxCbFunc )
9260 {
9261 /* Already TxComp is active no need to active again */
9262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9263 "There is already one request pending for tx complete\n");
9264 pWDA->pAckTxCbFunc( pMac, 0);
9265 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009266
Jeff Johnsone7245742012-09-05 17:12:55 -07009267 if( VOS_STATUS_SUCCESS !=
9268 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9269 {
9270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9271 "Tx Complete timeout Timer Stop Failed ");
9272 }
9273 else
9274 {
9275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009276 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -07009277 }
9278 }
9279
9280 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9281 pWDA->pAckTxCbFunc = pAckTxComp;
9282 if( VOS_STATUS_SUCCESS !=
9283 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9284 {
9285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9286 "Tx Complete Timer Start Failed ");
9287 pWDA->pAckTxCbFunc = NULL;
9288 return eHAL_STATUS_FAILURE;
9289 }
9290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009291 /* Reset the event to be not signalled */
9292 status = vos_event_reset(&pWDA->txFrameEvent);
9293 if(!VOS_IS_STATUS_SUCCESS(status))
9294 {
9295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9296 "VOS Event reset failed - status = %d\n",status);
9297 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9298 if( pAckTxComp )
9299 {
9300 pWDA->pAckTxCbFunc = NULL;
9301 if( VOS_STATUS_SUCCESS !=
9302 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9303 {
9304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9305 "Tx Complete timeout Timer Stop Failed ");
9306 }
9307 }
9308 return VOS_STATUS_E_FAILURE;
9309 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009310
9311 /* If Peer Sta mask is set don't overwrite to self sta */
9312 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009313 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009314 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009316 else
9317 {
Ganesh K08bce952012-12-13 15:04:41 -08009318 /* Get system role, use the self station if in unknown role or STA role */
9319 systemRole = wdaGetGlobalSystemRole(pMac);
9320 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9321 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009322#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -08009323 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009324#endif
Ganesh K08bce952012-12-13 15:04:41 -08009325 ))
9326 {
9327 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9328 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009330
Jeff Johnsone7245742012-09-05 17:12:55 -07009331 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9332 disassoc frame reaches the HW, HAL has already deleted the peer station */
9333 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009335 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009336 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009337 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009338 /*Send Probe request frames on self sta idx*/
9339 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 /* Since we donot want probe responses to be retried, send probe responses
9342 through the NO_ACK queues */
9343 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9344 {
9345 //probe response is sent out using self station and no retries options.
9346 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9347 }
9348 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9349 {
9350 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9351 }
9352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009353 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9354
9355 /*Set frame tag to 0
9356 We will use the WDA user data in order to tag a frame as expired*/
9357 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9358 (v_PVOID_t)0);
9359
9360
9361 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9362 frmLen, ucTypeSubType, tid,
9363 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9364 {
9365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9366 "Sending Mgmt Frame failed - status = %d\n", status);
9367 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9368 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9369 if( pAckTxComp )
9370 {
9371 pWDA->pAckTxCbFunc = NULL;
9372 if( VOS_STATUS_SUCCESS !=
9373 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9374 {
9375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9376 "Tx Complete timeout Timer Stop Failed ");
9377 }
9378 }
9379 return VOS_STATUS_E_FAILURE;
9380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 /*
9382 * Wait for the event to be set by the TL, to get the response of TX
9383 * complete, this event should be set by the Callback function called by TL
9384 */
9385 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9386 &eventIdx);
9387 if(!VOS_IS_STATUS_SUCCESS(status))
9388 {
9389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9390 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009391 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009392 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9393 after the packet gets completed(packet freed once)*/
9394
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009395 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Gopichand Nakkala0b714452012-12-21 15:34:30 -08009396 WDA_TransportChannelDebug(1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009397
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009398 /*Tag Frame as timed out for later deletion*/
9399 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9400 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9401
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 /* check whether the packet was freed already,so need not free again when
9403 * TL calls the WDA_Txcomplete routine
9404 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009405 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9406 /*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 -07009407 {
9408 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009409 } */
9410
Jeff Johnson295189b2012-06-20 16:38:30 -07009411 if( pAckTxComp )
9412 {
9413 pWDA->pAckTxCbFunc = NULL;
9414 if( VOS_STATUS_SUCCESS !=
9415 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9416 {
9417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9418 "Tx Complete timeout Timer Stop Failed ");
9419 }
9420 }
9421 status = VOS_STATUS_E_FAILURE;
9422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 return status;
9424}
Jeff Johnson295189b2012-06-20 16:38:30 -07009425/*
9426 * FUNCTION: WDA_McProcessMsg
9427 * Trigger DAL-AL to start CFG download
9428 */
9429VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9430{
9431 VOS_STATUS status = VOS_STATUS_SUCCESS;
9432 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009433 if(NULL == pMsg)
9434 {
9435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009436 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009437 VOS_ASSERT(0);
9438 return VOS_STATUS_E_FAILURE;
9439 }
9440
9441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009442 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009443
9444 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9445 if(NULL == pWDA )
9446 {
9447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009448 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009449 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009450 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 return VOS_STATUS_E_FAILURE;
9452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009453 /* Process all the WDA messages.. */
9454 switch( pMsg->type )
9455 {
9456 case WNI_CFG_DNLD_REQ:
9457 {
9458 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009459 /* call WDA complete event if config download success */
9460 if( VOS_IS_STATUS_SUCCESS(status) )
9461 {
9462 vos_WDAComplete_cback(pVosContext);
9463 }
9464 else
9465 {
9466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9467 "WDA Config Download failure" );
9468 }
9469 break ;
9470 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009471 /*
9472 * Init SCAN request from PE, convert it into DAL format
9473 * and send it to DAL
9474 */
9475 case WDA_INIT_SCAN_REQ:
9476 {
9477 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9478 break ;
9479 }
9480 /* start SCAN request from PE */
9481 case WDA_START_SCAN_REQ:
9482 {
9483 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9484 break ;
9485 }
9486 /* end SCAN request from PE */
9487 case WDA_END_SCAN_REQ:
9488 {
9489 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9490 break ;
9491 }
9492 /* end SCAN request from PE */
9493 case WDA_FINISH_SCAN_REQ:
9494 {
9495 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9496 break ;
9497 }
9498 /* join request from PE */
9499 case WDA_CHNL_SWITCH_REQ:
9500 {
9501 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9502 {
9503 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9504 }
9505 else
9506 {
9507 WDA_ProcessChannelSwitchReq(pWDA,
9508 (tSwitchChannelParams*)pMsg->bodyptr) ;
9509 }
9510 break ;
9511 }
9512 /* ADD BSS request from PE */
9513 case WDA_ADD_BSS_REQ:
9514 {
9515 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9516 break ;
9517 }
9518 case WDA_ADD_STA_REQ:
9519 {
9520 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9521 break ;
9522 }
9523 case WDA_DELETE_BSS_REQ:
9524 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009525 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9526 break ;
9527 }
9528 case WDA_DELETE_STA_REQ:
9529 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009530 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9531 break ;
9532 }
9533 case WDA_CONFIG_PARAM_UPDATE_REQ:
9534 {
9535 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9536 break ;
9537 }
9538 case WDA_SET_BSSKEY_REQ:
9539 {
9540 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9541 break ;
9542 }
9543 case WDA_SET_STAKEY_REQ:
9544 {
9545 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9546 break ;
9547 }
9548 case WDA_SET_STA_BCASTKEY_REQ:
9549 {
9550 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9551 break ;
9552 }
9553 case WDA_REMOVE_BSSKEY_REQ:
9554 {
9555 WDA_ProcessRemoveBssKeyReq(pWDA,
9556 (tRemoveBssKeyParams *)pMsg->bodyptr);
9557 break ;
9558 }
9559 case WDA_REMOVE_STAKEY_REQ:
9560 {
9561 WDA_ProcessRemoveStaKeyReq(pWDA,
9562 (tRemoveStaKeyParams *)pMsg->bodyptr);
9563 break ;
9564 }
9565 case WDA_REMOVE_STA_BCASTKEY_REQ:
9566 {
9567 /* TODO: currently UMAC is not sending this request, Add the code for
9568 handling this request when UMAC supports */
9569 break;
9570 }
9571#ifdef FEATURE_WLAN_CCX
9572 case WDA_TSM_STATS_REQ:
9573 {
9574 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9575 break;
9576 }
9577#endif
9578 case WDA_UPDATE_EDCA_PROFILE_IND:
9579 {
9580 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9581 break;
9582 }
9583 case WDA_ADD_TS_REQ:
9584 {
9585 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9586 break;
9587 }
9588 case WDA_DEL_TS_REQ:
9589 {
9590 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9591 break;
9592 }
9593 case WDA_ADDBA_REQ:
9594 {
9595 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9596 break;
9597 }
9598 case WDA_DELBA_IND:
9599 {
9600 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9601 break;
9602 }
9603 case WDA_SET_LINK_STATE:
9604 {
9605 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9606 break;
9607 }
9608 case WDA_GET_STATISTICS_REQ:
9609 {
9610 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9611 break;
9612 }
9613 case WDA_PWR_SAVE_CFG:
9614 {
9615 if(pWDA->wdaState == WDA_READY_STATE)
9616 {
9617 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9618 }
9619 else
9620 {
9621 if(NULL != pMsg->bodyptr)
9622 {
9623 vos_mem_free(pMsg->bodyptr);
9624 }
9625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9626 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9627 }
9628 break;
9629 }
9630 case WDA_ENTER_IMPS_REQ:
9631 {
9632 if(pWDA->wdaState == WDA_READY_STATE)
9633 {
9634 WDA_ProcessEnterImpsReq(pWDA);
9635 }
9636 else
9637 {
9638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9639 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9640 }
9641 break;
9642 }
9643 case WDA_EXIT_IMPS_REQ:
9644 {
9645 if(pWDA->wdaState == WDA_READY_STATE)
9646 {
9647 WDA_ProcessExitImpsReq(pWDA);
9648 }
9649 else
9650 {
9651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9652 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9653 }
9654 break;
9655 }
9656 case WDA_ENTER_BMPS_REQ:
9657 {
9658 if(pWDA->wdaState == WDA_READY_STATE)
9659 {
9660 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9661 }
9662 else
9663 {
9664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9665 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9666 }
9667 break;
9668 }
9669 case WDA_EXIT_BMPS_REQ:
9670 {
9671 if(pWDA->wdaState == WDA_READY_STATE)
9672 {
9673 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9674 }
9675 else
9676 {
9677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9678 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9679 }
9680 break;
9681 }
9682 case WDA_ENTER_UAPSD_REQ:
9683 {
9684 if(pWDA->wdaState == WDA_READY_STATE)
9685 {
9686 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9687 }
9688 else
9689 {
9690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9691 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9692 }
9693 break;
9694 }
9695 case WDA_EXIT_UAPSD_REQ:
9696 {
9697 if(pWDA->wdaState == WDA_READY_STATE)
9698 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009699 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009700 }
9701 else
9702 {
9703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9704 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9705 }
9706 break;
9707 }
9708 case WDA_UPDATE_UAPSD_IND:
9709 {
9710 if(pWDA->wdaState == WDA_READY_STATE)
9711 {
9712 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9713 }
9714 else
9715 {
9716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9717 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9718 }
9719 break;
9720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009721 case WDA_REGISTER_PE_CALLBACK :
9722 {
9723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9724 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9725 /*TODO: store the PE callback */
9726 /* Do Nothing? MSG Body should be freed at here */
9727 if(NULL != pMsg->bodyptr)
9728 {
9729 vos_mem_free(pMsg->bodyptr);
9730 }
9731 break;
9732 }
9733 case WDA_SYS_READY_IND :
9734 {
9735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9736 "Handling msg type WDA_SYS_READY_IND " );
9737 pWDA->wdaState = WDA_READY_STATE;
9738 if(NULL != pMsg->bodyptr)
9739 {
9740 vos_mem_free(pMsg->bodyptr);
9741 }
9742 break;
9743 }
9744 case WDA_BEACON_FILTER_IND :
9745 {
9746 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9747 break;
9748 }
9749 case WDA_BTC_SET_CFG:
9750 {
9751 /*TODO: handle this while dealing with BTC */
9752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9753 "Handling msg type WDA_BTC_SET_CFG " );
9754 /* Do Nothing? MSG Body should be freed at here */
9755 if(NULL != pMsg->bodyptr)
9756 {
9757 vos_mem_free(pMsg->bodyptr);
9758 }
9759 break;
9760 }
9761 case WDA_SIGNAL_BT_EVENT:
9762 {
9763 /*TODO: handle this while dealing with BTC */
9764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9765 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9766 /* Do Nothing? MSG Body should be freed at here */
9767 if(NULL != pMsg->bodyptr)
9768 {
9769 vos_mem_free(pMsg->bodyptr);
9770 }
9771 break;
9772 }
9773 case WDA_CFG_RXP_FILTER_REQ:
9774 {
9775 WDA_ProcessConfigureRxpFilterReq(pWDA,
9776 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9777 break;
9778 }
9779 case WDA_SET_HOST_OFFLOAD:
9780 {
9781 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9782 break;
9783 }
9784 case WDA_SET_KEEP_ALIVE:
9785 {
9786 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9787 break;
9788 }
9789#ifdef WLAN_NS_OFFLOAD
9790 case WDA_SET_NS_OFFLOAD:
9791 {
9792 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9793 break;
9794 }
9795#endif //WLAN_NS_OFFLOAD
9796 case WDA_ADD_STA_SELF_REQ:
9797 {
9798 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9799 break;
9800 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009801 case WDA_DEL_STA_SELF_REQ:
9802 {
9803 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9804 break;
9805 }
9806 case WDA_WOWL_ADD_BCAST_PTRN:
9807 {
9808 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9809 break;
9810 }
9811 case WDA_WOWL_DEL_BCAST_PTRN:
9812 {
9813 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9814 break;
9815 }
9816 case WDA_WOWL_ENTER_REQ:
9817 {
9818 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9819 break;
9820 }
9821 case WDA_WOWL_EXIT_REQ:
9822 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009823 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009824 break;
9825 }
9826 case WDA_TL_FLUSH_AC_REQ:
9827 {
9828 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9829 break;
9830 }
9831 case WDA_SIGNAL_BTAMP_EVENT:
9832 {
9833 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9834 break;
9835 }
9836#ifdef WDA_UT
9837 case WDA_WDI_EVENT_MSG:
9838 {
9839 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9840 break ;
9841 }
9842#endif
9843 case WDA_UPDATE_BEACON_IND:
9844 {
9845 WDA_ProcessUpdateBeaconParams(pWDA,
9846 (tUpdateBeaconParams *)pMsg->bodyptr);
9847 break;
9848 }
9849 case WDA_SEND_BEACON_REQ:
9850 {
9851 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9852 break;
9853 }
9854 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9855 {
9856 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9857 (tSendProbeRespParams *)pMsg->bodyptr);
9858 break;
9859 }
9860#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9861 case WDA_SET_MAX_TX_POWER_REQ:
9862 {
9863 WDA_ProcessSetMaxTxPowerReq(pWDA,
9864 (tMaxTxPowerParams *)pMsg->bodyptr);
9865 break;
9866 }
9867#endif
9868#ifdef WLAN_FEATURE_P2P
9869 case WDA_SET_P2P_GO_NOA_REQ:
9870 {
9871 WDA_ProcessSetP2PGONOAReq(pWDA,
9872 (tP2pPsParams *)pMsg->bodyptr);
9873 break;
9874 }
9875#endif
9876 /* timer related messages */
9877 case WDA_TIMER_BA_ACTIVITY_REQ:
9878 {
9879 WDA_BaCheckActivity(pWDA) ;
9880 break ;
9881 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08009882
9883 /* timer related messages */
9884 case WDA_TIMER_TRAFFIC_STATS_IND:
9885 {
9886 WDA_TimerTrafficStatsInd(pWDA);
9887 break;
9888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009889#ifdef WLAN_FEATURE_VOWIFI_11R
9890 case WDA_AGGR_QOS_REQ:
9891 {
9892 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9893 break;
9894 }
9895#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009896 case WDA_FTM_CMD_REQ:
9897 {
9898 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9899 break ;
9900 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009901#ifdef FEATURE_OEM_DATA_SUPPORT
9902 case WDA_START_OEM_DATA_REQ:
9903 {
9904 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9905 break;
9906 }
9907#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 /* Tx Complete Time out Indication */
9909 case WDA_TX_COMPLETE_TIMEOUT_IND:
9910 {
9911 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9912 break;
9913 }
9914 case WDA_WLAN_SUSPEND_IND:
9915 {
9916 WDA_ProcessWlanSuspendInd(pWDA,
9917 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9918 break;
9919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 case WDA_WLAN_RESUME_REQ:
9921 {
9922 WDA_ProcessWlanResumeReq(pWDA,
9923 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9924 break;
9925 }
9926
9927 case WDA_UPDATE_CF_IND:
9928 {
9929 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9930 pMsg->bodyptr = NULL;
9931 break;
9932 }
9933#ifdef FEATURE_WLAN_SCAN_PNO
9934 case WDA_SET_PNO_REQ:
9935 {
9936 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9937 break;
9938 }
9939 case WDA_UPDATE_SCAN_PARAMS_REQ:
9940 {
9941 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9942 break;
9943 }
9944 case WDA_SET_RSSI_FILTER_REQ:
9945 {
9946 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
9947 break;
9948 }
9949#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 case WDA_SET_TX_PER_TRACKING_REQ:
9951 {
9952 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
9953 break;
9954 }
9955
9956#ifdef WLAN_FEATURE_PACKET_FILTERING
9957 case WDA_8023_MULTICAST_LIST_REQ:
9958 {
9959 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
9960 break;
9961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009962 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
9963 {
9964 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
9965 break;
9966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009967 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
9968 {
9969 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
9970 break;
9971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
9973 {
9974 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
9975 break;
9976 }
9977#endif // WLAN_FEATURE_PACKET_FILTERING
9978
9979
9980 case WDA_TRANSMISSION_CONTROL_IND:
9981 {
9982 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
9983 break;
9984 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009985 case WDA_SET_POWER_PARAMS_REQ:
9986 {
9987 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
9988 break;
9989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009990#ifdef WLAN_FEATURE_GTK_OFFLOAD
9991 case WDA_GTK_OFFLOAD_REQ:
9992 {
9993 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
9994 break;
9995 }
9996
9997 case WDA_GTK_OFFLOAD_GETINFO_REQ:
9998 {
9999 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
10000 break;
10001 }
10002#endif //WLAN_FEATURE_GTK_OFFLOAD
10003
10004 case WDA_SET_TM_LEVEL_REQ:
10005 {
10006 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
10007 break;
10008 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070010009#ifdef WLAN_FEATURE_11AC
10010 case WDA_UPDATE_OP_MODE:
10011 {
10012 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
10013 {
10014 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10015 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10016 else
10017 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10018 " VHT OpMode Feature is Not Supported \n");
10019 }
10020 else
10021 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10022 " 11AC Feature is Not Supported \n");
10023 break;
10024 }
10025#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 default:
10027 {
10028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10029 "No Handling for msg type %x in WDA "
10030 ,pMsg->type);
10031 /* Do Nothing? MSG Body should be freed at here */
10032 if(NULL != pMsg->bodyptr)
10033 {
10034 vos_mem_free(pMsg->bodyptr);
10035 }
10036 //WDA_VOS_ASSERT(0) ;
10037 }
10038 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 return status ;
10040}
10041
Jeff Johnson295189b2012-06-20 16:38:30 -070010042/*
10043 * FUNCTION: WDA_LowLevelIndCallback
10044 * IND API callback from WDI, send Ind to PE
10045 */
10046void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10047 void* pUserData )
10048{
10049 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10050#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10051 tSirRSSINotification rssiNotification;
10052#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010053 if(NULL == pWDA)
10054 {
10055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010056 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010057 VOS_ASSERT(0);
10058 return ;
10059 }
10060
10061 switch(wdiLowLevelInd->wdiIndicationType)
10062 {
10063 case WDI_RSSI_NOTIFICATION_IND:
10064 {
10065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10066 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010067#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10068 rssiNotification.bReserved =
10069 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10070 rssiNotification.bRssiThres1NegCross =
10071 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10072 rssiNotification.bRssiThres1PosCross =
10073 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10074 rssiNotification.bRssiThres2NegCross =
10075 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10076 rssiNotification.bRssiThres2PosCross =
10077 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10078 rssiNotification.bRssiThres3NegCross =
10079 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10080 rssiNotification.bRssiThres3PosCross =
10081 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080010082 rssiNotification.avgRssi = (v_S7_t)
10083 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070010084 WLANTL_BMPSRSSIRegionChangedNotification(
10085 pWDA->pVosContext,
10086 &rssiNotification);
10087#endif
10088 break ;
10089 }
10090 case WDI_MISSED_BEACON_IND:
10091 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010092 tpSirSmeMissedBeaconInd pMissBeacInd =
10093 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10095 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080010097 if(NULL == pMissBeacInd)
10098 {
10099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10100 "%s: VOS MEM Alloc Failure", __func__);
10101 break;
10102 }
10103 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
10104 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
10105 pMissBeacInd->bssIdx =
10106 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
10107 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 break ;
10109 }
10110 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10111 {
10112 /* TODO: Decode Ind and send Ind to PE */
10113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10114 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10115 break ;
10116 }
10117
10118 case WDI_MIC_FAILURE_IND:
10119 {
10120 tpSirSmeMicFailureInd pMicInd =
10121 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10122
10123 if(NULL == pMicInd)
10124 {
10125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010127 break;
10128 }
10129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10130 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010131 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10132 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10133 vos_mem_copy(pMicInd->bssId,
10134 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10135 sizeof(tSirMacAddr));
10136 vos_mem_copy(pMicInd->info.srcMacAddr,
10137 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10138 sizeof(tSirMacAddr));
10139 vos_mem_copy(pMicInd->info.taMacAddr,
10140 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10141 sizeof(tSirMacAddr));
10142 vos_mem_copy(pMicInd->info.dstMacAddr,
10143 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10144 sizeof(tSirMacAddr));
10145 vos_mem_copy(pMicInd->info.rxMacAddr,
10146 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10147 sizeof(tSirMacAddr));
10148 pMicInd->info.multicast =
10149 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10150 pMicInd->info.keyId=
10151 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10152 pMicInd->info.IV1=
10153 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10154 vos_mem_copy(pMicInd->info.TSC,
10155 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10157 (void *)pMicInd , 0) ;
10158 break ;
10159 }
10160 case WDI_FATAL_ERROR_IND:
10161 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010162 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010163 /* TODO: Decode Ind and send Ind to PE */
10164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10165 "Received WDI_FATAL_ERROR_IND from WDI ");
10166 break ;
10167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010168 case WDI_DEL_STA_IND:
10169 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010170 tpDeleteStaContext pDelSTACtx =
10171 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10172
10173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10174 "Received WDI_DEL_STA_IND from WDI ");
10175 if(NULL == pDelSTACtx)
10176 {
10177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010178 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010179 break;
10180 }
10181 vos_mem_copy(pDelSTACtx->addr2,
10182 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10183 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 vos_mem_copy(pDelSTACtx->bssId,
10185 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10186 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010187 pDelSTACtx->assocId =
10188 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10189 pDelSTACtx->reasonCode =
10190 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10191 pDelSTACtx->staId =
10192 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010193 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10194 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010195 break ;
10196 }
10197 case WDI_COEX_IND:
10198 {
10199 tANI_U32 index;
10200 vos_msg_t vosMsg;
10201 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10202 if(NULL == pSmeCoexInd)
10203 {
10204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010205 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010206 break;
10207 }
10208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10209 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010210 /* Message Header */
10211 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10212 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 /* Info from WDI Indication */
10214 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10215 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10216 {
10217 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10218 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010219 /* VOS message wrapper */
10220 vosMsg.type = eWNI_SME_COEX_IND;
10221 vosMsg.bodyptr = (void *)pSmeCoexInd;
10222 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010223 /* Send message to SME */
10224 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10225 {
10226 /* free the mem and return */
10227 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10228 }
10229 else
10230 {
10231 /* DEBUG */
10232 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10233 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10234 pSmeCoexInd->coexIndType,
10235 pSmeCoexInd->coexIndData[0],
10236 pSmeCoexInd->coexIndData[1],
10237 pSmeCoexInd->coexIndData[2],
10238 pSmeCoexInd->coexIndData[3]);
10239 }
10240 break;
10241 }
10242 case WDI_TX_COMPLETE_IND:
10243 {
10244 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10245 /* Calling TxCompleteAck Indication from wda context*/
10246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10247 "Complete Indication received from HAL");
10248 if( pWDA->pAckTxCbFunc )
10249 {
10250 if( VOS_STATUS_SUCCESS !=
10251 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10252 {
10253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10254 "Tx Complete timeout Timer Stop Failed ");
10255 }
10256 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10257 pWDA->pAckTxCbFunc = NULL;
10258 }
10259 else
10260 {
10261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10262 "Tx Complete Indication is received after timeout ");
10263 }
10264 break;
10265 }
10266#ifdef WLAN_FEATURE_P2P
Viral Modid86bde22012-12-10 13:09:21 -080010267 case WDI_P2P_NOA_START_IND :
10268 {
10269 tSirP2PNoaStart *pP2pNoaStart =
10270 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
10271
10272 if (NULL == pP2pNoaStart)
10273 {
10274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10275 "Memory allocation failure, "
10276 "WDI_P2P_NOA_START_IND not forwarded");
10277 break;
10278 }
10279 pP2pNoaStart->status =
10280 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
10281 pP2pNoaStart->bssIdx =
10282 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
10283 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
10284 (void *)pP2pNoaStart , 0) ;
10285 break;
10286 }
10287
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 case WDI_P2P_NOA_ATTR_IND :
10289 {
10290 tSirP2PNoaAttr *pP2pNoaAttr =
10291 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10293 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 if (NULL == pP2pNoaAttr)
10295 {
10296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10297 "Memory allocation failure, "
10298 "WDI_P2P_NOA_ATTR_IND not forwarded");
10299 break;
10300 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010301 pP2pNoaAttr->index =
10302 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10303 pP2pNoaAttr->oppPsFlag =
10304 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10305 pP2pNoaAttr->ctWin =
10306 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10307
10308 pP2pNoaAttr->uNoa1IntervalCnt =
10309 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10310 pP2pNoaAttr->uNoa1Duration =
10311 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10312 pP2pNoaAttr->uNoa1Interval =
10313 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10314 pP2pNoaAttr->uNoa1StartTime =
10315 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010316 pP2pNoaAttr->uNoa2IntervalCnt =
10317 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10318 pP2pNoaAttr->uNoa2Duration =
10319 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10320 pP2pNoaAttr->uNoa2Interval =
10321 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10322 pP2pNoaAttr->uNoa2StartTime =
10323 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010324 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10325 (void *)pP2pNoaAttr , 0) ;
10326 break;
10327 }
10328#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010329#ifdef FEATURE_WLAN_SCAN_PNO
10330 case WDI_PREF_NETWORK_FOUND_IND:
10331 {
10332 vos_msg_t vosMsg;
10333 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10335 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010336 if (NULL == pPrefNetworkFoundInd)
10337 {
10338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10339 "Memory allocation failure, "
10340 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10341 break;
10342 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 /* Message Header */
10344 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10345 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10346
10347 /* Info from WDI Indication */
10348 pPrefNetworkFoundInd->ssId.length =
10349 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010350 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10352 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10353 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010354 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010355 /* VOS message wrapper */
10356 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10357 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10358 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 /* Send message to SME */
10360 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10361 {
10362 /* free the mem and return */
10363 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10364 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 break;
10366 }
10367#endif // FEATURE_WLAN_SCAN_PNO
10368
10369#ifdef WLAN_WAKEUP_EVENTS
10370 case WDI_WAKE_REASON_IND:
10371 {
10372 vos_msg_t vosMsg;
10373 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10374 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10375 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10376
10377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10378 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10379 wdiLowLevelInd->wdiIndicationType,
10380 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10381 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10382 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10383
10384 if (NULL == pWakeReasonInd)
10385 {
10386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10387 "Memory allocation failure, "
10388 "WDI_WAKE_REASON_IND not forwarded");
10389 break;
10390 }
10391
10392 vos_mem_zero(pWakeReasonInd, allocSize);
10393
10394 /* Message Header */
10395 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10396 pWakeReasonInd->mesgLen = allocSize;
10397
10398 /* Info from WDI Indication */
10399 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10400 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10401 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10402 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10403 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10404 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10405 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10406 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10407
10408 /* VOS message wrapper */
10409 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10410 vosMsg.bodyptr = (void *) pWakeReasonInd;
10411 vosMsg.bodyval = 0;
10412
10413 /* Send message to SME */
10414 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10415 {
10416 /* free the mem and return */
10417 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10418 }
10419
10420 break;
10421 }
10422#endif // WLAN_WAKEUP_EVENTS
10423
10424 case WDI_TX_PER_HIT_IND:
10425 {
10426 vos_msg_t vosMsg;
10427 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10428 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10429 /* VOS message wrapper */
10430 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10431 vosMsg.bodyptr = NULL;
10432 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010433 /* Send message to SME */
10434 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10435 {
10436 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10437 }
10438 break;
10439 }
10440
10441 default:
10442 {
10443 /* TODO error */
10444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10445 "Received UNKNOWN Indication from WDI ");
10446 }
10447 }
10448 return ;
10449}
10450
Jeff Johnson295189b2012-06-20 16:38:30 -070010451/*
10452 * BA related processing in WDA.
10453 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010454void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10455 void* pUserData)
10456{
10457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10458 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010459 if(NULL == pWdaParams)
10460 {
10461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010462 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010463 VOS_ASSERT(0) ;
10464 return ;
10465 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010466 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010467 vos_mem_free(pWdaParams->wdaMsgParam) ;
10468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10469 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010471 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010472 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10473 {
10474 tANI_U8 i = 0 ;
10475 tBaActivityInd *baActivityInd = NULL ;
10476 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10477 tANI_U8 allocSize = sizeof(tBaActivityInd)
10478 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10479 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10480 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010482 if(NULL == baActivityInd)
10483 {
10484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010486 VOS_ASSERT(0) ;
10487 return;
10488 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010489 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10490 sizeof(tSirMacAddr)) ;
10491 baActivityInd->baCandidateCnt = baCandidateCount ;
10492
10493 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10494 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10495
10496 for(i = 0 ; i < baCandidateCount ; i++)
10497 {
10498 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010499 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10500 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010501 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10502 {
10503 baCandidate->baInfo[tid].fBaEnable =
10504 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10505 baCandidate->baInfo[tid].startingSeqNum =
10506 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10507 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010508 wdiBaCandidate++ ;
10509 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010510 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010511 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10512 }
10513 else
10514 {
10515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10516 "BA Trigger RSP with Failure received ");
10517 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010518 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010519}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010520
10521
10522/*
10523 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
10524 * during MCC
10525 */
10526void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
10527{
10528 wpt_uint32 enabled;
10529 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
10530 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
10531 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
10532
10533 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10534 != eSIR_SUCCESS)
10535 {
10536 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10537 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10538 return;
10539 }
10540
10541 if(!enabled)
10542 {
10543 return;
10544 }
10545
10546 if(NULL == pWDA)
10547 {
10548 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10549 "%s:WDA context is NULL", __func__);
10550 VOS_ASSERT(0);
10551 return;
10552 }
10553
10554 if(activate)
10555 {
10556 if( VOS_STATUS_SUCCESS !=
10557 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10558 {
10559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10560 "Traffic Stats Timer Start Failed ");
10561 return;
10562 }
10563 WDI_DS_ActivateTrafficStats();
10564 }
10565 else
10566 {
10567 WDI_DS_DeactivateTrafficStats();
10568 WDI_DS_ClearTrafficStats();
10569
10570 if( VOS_STATUS_SUCCESS !=
10571 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10572 {
10573 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10574 "Traffic Stats Timer Stop Failed ");
10575 return;
10576 }
10577 }
10578}
10579
10580/*
10581 * Traffic Stats Timer handler
10582 */
10583void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
10584{
10585 WDI_Status wdiStatus;
10586 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
10587 WDI_TrafficStatsIndType trafficStatsIndParams;
10588 wpt_uint32 length, enabled;
10589 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10590
10591 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10592 != eSIR_SUCCESS)
10593 {
10594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10595 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10596 return;
10597 }
10598
10599 if(!enabled)
10600 {
10601 WDI_DS_DeactivateTrafficStats();
10602 return;
10603 }
10604
10605 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
10606
10607 if(pWdiTrafficStats != NULL)
10608 {
10609 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
10610 trafficStatsIndParams.length = length;
10611 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080010612 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010613 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10614 trafficStatsIndParams.pUserData = pWDA;
10615
10616 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
10617
10618 if(WDI_STATUS_PENDING == wdiStatus)
10619 {
10620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10621 "Pending received for %s:%d ",__func__,__LINE__ );
10622 }
10623 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10624 {
10625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10626 "Failure in %s:%d ",__func__,__LINE__ );
10627 }
10628
10629 WDI_DS_ClearTrafficStats();
10630 }
10631 else
10632 {
10633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10634 "pWdiTrafficStats is Null");
10635 }
10636
10637 if( VOS_STATUS_SUCCESS !=
10638 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10639 {
10640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10641 "Traffic Stats Timer Start Failed ");
10642 return;
10643 }
10644}
10645
Jeff Johnson295189b2012-06-20 16:38:30 -070010646/*
10647 * BA Activity check timer handler
10648 */
10649void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10650{
10651 tANI_U8 curSta = 0 ;
10652 tANI_U8 tid = 0 ;
10653 tANI_U8 size = 0 ;
10654 tANI_U8 baCandidateCount = 0 ;
10655 tANI_U8 newBaCandidate = 0 ;
10656 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10657
10658 if(NULL == pWDA)
10659 {
10660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010661 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010662 VOS_ASSERT(0);
10663 return ;
10664 }
10665 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10666 {
10667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10668 "Inconsistent STA entries in WDA");
10669 VOS_ASSERT(0) ;
10670 }
10671 /* walk through all STA entries and find out TX packet count */
10672 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10673 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080010674#ifdef WLAN_SOFTAP_VSTA_FEATURE
10675 // We can only do BA on "hard" STAs.
10676 if (!(IS_HWSTA_IDX(curSta)))
10677 {
10678 continue;
10679 }
10680#endif //WLAN_SOFTAP_VSTA_FEATURE
10681 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10682 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010683 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010684 tANI_U32 txPktCount = 0 ;
10685 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010686 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010687 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10688 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010689 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10690 curSta, tid, &txPktCount)))
10691 {
10692#if 0
10693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10694 "************* %d:%d, %d ",curSta, txPktCount,
10695 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10696#endif
10697 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010698 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010699 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10700 curSta, tid)))
10701 {
10702 /* get prepare for sending message to HAL */
10703 //baCandidate[baCandidateCount].staIdx = curSta ;
10704 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10705 newBaCandidate = WDA_ENABLE_BA ;
10706 }
10707 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10708 }
10709 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010710 /* fill the entry for all the sta with given TID's */
10711 if(WDA_ENABLE_BA == newBaCandidate)
10712 {
10713 /* move to next BA candidate */
10714 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
10715 size += sizeof(WDI_TriggerBAReqCandidateType) ;
10716 baCandidateCount++ ;
10717 newBaCandidate = WDA_DISABLE_BA ;
10718 }
10719 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010720 /* prepare and send message to hal */
10721 if( 0 < baCandidateCount)
10722 {
10723 WDI_Status status = WDI_STATUS_SUCCESS ;
10724 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
10725 tWDA_ReqParams *pWdaParams =
10726 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010727 if(NULL == pWdaParams)
10728 {
10729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010730 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 VOS_ASSERT(0) ;
10732 return;
10733 }
10734 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
10735 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
10736 if(NULL == wdiTriggerBaReq)
10737 {
10738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010740 VOS_ASSERT(0) ;
10741 vos_mem_free(pWdaParams);
10742 return;
10743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010744 do
10745 {
10746 WDI_TriggerBAReqinfoType *triggerBaInfo =
10747 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
10748 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
10749 /* TEMP_FIX: Need to see if WDI need check for assoc session for
10750 * for each request */
10751 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
10752 triggerBaInfo->ucBASessionID = 0;
10753 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
10754 } while(0) ;
10755 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
10756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010757 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010758 pWdaParams->pWdaContext = pWDA;
10759 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
10760 pWdaParams->wdaMsgParam = NULL;
10761 status = WDI_TriggerBAReq(wdiTriggerBaReq,
10762 WDA_TriggerBaReqCallback, pWdaParams) ;
10763 if(IS_WDI_STATUS_FAILURE(status))
10764 {
10765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10766 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
10767 vos_mem_free(pWdaParams->wdaMsgParam) ;
10768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10769 vos_mem_free(pWdaParams) ;
10770 }
10771 }
10772 else
10773 {
10774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10775 "There is no TID for initiating BA");
10776 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010777 if( VOS_STATUS_SUCCESS !=
10778 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10779 {
10780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10781 "BA Activity Timer Stop Failed ");
10782 return ;
10783 }
10784 if( VOS_STATUS_SUCCESS !=
10785 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10786 {
10787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10788 "BA Activity Timer Start Failed ");
10789 return;
10790 }
10791 return ;
10792}
Jeff Johnson295189b2012-06-20 16:38:30 -070010793/*
10794 * WDA common routine to create timer used by WDA.
10795 */
10796static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
10797{
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10799 tANI_U32 val = 0 ;
10800 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10801
10802 if(NULL == pMac)
10803 {
10804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010805 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010806 VOS_ASSERT(0);
10807 return VOS_STATUS_E_FAILURE;
10808 }
10809 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
10810 != eSIR_SUCCESS)
10811 {
10812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10813 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
10814 return VOS_STATUS_E_FAILURE;
10815 }
10816 val = SYS_MS_TO_TICKS(val) ;
10817
10818 /* BA activity check timer */
10819 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
10820 "BA Activity Check timer", WDA_TimerHandler,
10821 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
10822 if(status != TX_SUCCESS)
10823 {
10824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10825 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010826 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010828 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010829 /* Tx Complete Timeout timer */
10830 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
10831 "Tx Complete Check timer", WDA_TimerHandler,
10832 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010833 if(status != TX_SUCCESS)
10834 {
10835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10836 "Unable to create Tx Complete Timeout timer");
10837 /* Destroy timer of BA activity check timer */
10838 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10839 if(status != TX_SUCCESS)
10840 {
10841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10842 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010843 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010845 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010846 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010847
10848 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
10849
10850 /* Traffic Stats timer */
10851 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
10852 "Traffic Stats timer", WDA_TimerHandler,
10853 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
10854 if(status != TX_SUCCESS)
10855 {
10856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10857 "Unable to create traffic stats timer");
10858 /* Destroy timer of BA activity check timer */
10859 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10860 if(status != TX_SUCCESS)
10861 {
10862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10863 "Unable to Destroy BA activity timer");
10864 }
10865 /* Destroy timer of tx complete timer */
10866 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10867 if(status != TX_SUCCESS)
10868 {
10869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10870 "Unable to Tx complete timer");
10871 }
10872 return VOS_STATUS_E_FAILURE ;
10873 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010874 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010875}
Jeff Johnson295189b2012-06-20 16:38:30 -070010876/*
10877 * WDA common routine to destroy timer used by WDA.
10878 */
10879static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
10880{
10881 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010882 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10883 if(status != TX_SUCCESS)
10884 {
10885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10886 "Unable to Destroy Tx Complete Timeout timer");
10887 return eSIR_FAILURE ;
10888 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010889 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10890 if(status != TX_SUCCESS)
10891 {
10892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10893 "Unable to Destroy BA activity timer");
10894 return eSIR_FAILURE ;
10895 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010896 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
10897 if(status != TX_SUCCESS)
10898 {
10899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10900 "Unable to Destroy traffic stats timer");
10901 return eSIR_FAILURE ;
10902 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010903 return eSIR_SUCCESS ;
10904}
Jeff Johnson295189b2012-06-20 16:38:30 -070010905/*
10906 * WDA timer handler.
10907 */
10908void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
10909{
10910 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
10911 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 /*
10913 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
10914 */
10915 wdaMsg.type = timerInfo ;
10916 wdaMsg.bodyptr = NULL;
10917 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010918 /* post the message.. */
10919 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
10920 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
10921 {
10922 vosStatus = VOS_STATUS_E_BADMSG;
10923 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010924}
Jeff Johnson295189b2012-06-20 16:38:30 -070010925/*
10926 * WDA Tx Complete timeout Indication.
10927 */
10928void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
10929{
10930 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010931 if( pWDA->pAckTxCbFunc )
10932 {
10933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10934 "TxComplete timer expired\n");
10935 pWDA->pAckTxCbFunc( pMac, 0);
10936 pWDA->pAckTxCbFunc = NULL;
10937 }
10938 else
10939 {
10940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10941 "There is no request pending for TxComplete and wait timer expired\n");
10942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010943}
Jeff Johnson295189b2012-06-20 16:38:30 -070010944/*
10945 * WDA Set REG Domain to VOS NV
10946 */
10947eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
10948{
10949 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
10950 {
10951 return eHAL_STATUS_INVALID_PARAMETER;
10952 }
10953 return eHAL_STATUS_SUCCESS;
10954}
Jeff Johnson295189b2012-06-20 16:38:30 -070010955
Jeff Johnson295189b2012-06-20 16:38:30 -070010956#ifdef FEATURE_WLAN_SCAN_PNO
10957/*
10958 * FUNCTION: WDA_PNOScanReqCallback
10959 *
10960 */
10961void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
10962{
10963 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010965 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010966 if(NULL == pWdaParams)
10967 {
10968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010969 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010970 VOS_ASSERT(0) ;
10971 return ;
10972 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010973 if( pWdaParams != NULL )
10974 {
10975 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10976 {
10977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10978 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 if( pWdaParams->wdaMsgParam != NULL)
10980 {
10981 vos_mem_free(pWdaParams->wdaMsgParam);
10982 }
10983
10984 vos_mem_free(pWdaParams) ;
10985 }
10986
10987 return ;
10988}
Jeff Johnson295189b2012-06-20 16:38:30 -070010989/*
10990 * FUNCTION: WDA_UpdateScanParamsCallback
10991 *
10992 */
10993void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
10994{
10995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010997 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010998 if(NULL == pWdaParams)
10999 {
11000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011001 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 VOS_ASSERT(0) ;
11003 return ;
11004 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011005 if( pWdaParams != NULL )
11006 {
11007 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11008 {
11009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11010 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011011 if( pWdaParams->wdaMsgParam != NULL)
11012 {
11013 vos_mem_free(pWdaParams->wdaMsgParam);
11014 }
11015 vos_mem_free(pWdaParams) ;
11016 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011017 return ;
11018}
Jeff Johnson295189b2012-06-20 16:38:30 -070011019/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011020 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11021 * Request to WDI to set Preferred Network List.Offload
11022 */
11023VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
11024 tSirPNOScanReq *pPNOScanReqParams)
11025{
Jeff Johnson43971f52012-07-17 12:26:56 -070011026 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011027 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
11028 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
11029 tWDA_ReqParams *pWdaParams ;
11030 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011032 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 if(NULL == pwdiPNOScanReqInfo)
11034 {
11035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011036 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 VOS_ASSERT(0);
11038 return VOS_STATUS_E_NOMEM;
11039 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011040 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11041 if(NULL == pWdaParams)
11042 {
11043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 VOS_ASSERT(0);
11046 vos_mem_free(pwdiPNOScanReqInfo);
11047 return VOS_STATUS_E_NOMEM;
11048 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011049 //
11050 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
11051 //
11052 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
11053 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070011054 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
11055 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
11056 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011057 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
11058 {
11059 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
11060 &pPNOScanReqParams->aNetworks[i],
11061 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
11062 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011063 /*Scan timer intervals*/
11064 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
11065 &pPNOScanReqParams->scanTimers,
11066 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070011067 /*Probe template for 2.4GHz band*/
11068 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
11069 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11070 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
11072 pPNOScanReqParams->p24GProbeTemplate,
11073 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 /*Probe template for 5GHz band*/
11075 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
11076 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11077 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011078 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
11079 pPNOScanReqParams->p5GProbeTemplate,
11080 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011081 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011082
Jeff Johnson295189b2012-06-20 16:38:30 -070011083 /* Store Params pass it to WDI */
11084 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
11085 pWdaParams->pWdaContext = pWDA;
11086 /* Store param pointer as passed in by caller */
11087 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011088 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
11089 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011090 if(IS_WDI_STATUS_FAILURE(status))
11091 {
11092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11093 "Failure in Set PNO REQ WDI API, free all the memory " );
11094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11095 vos_mem_free(pWdaParams->wdaMsgParam);
11096 pWdaParams->wdaWdiApiMsgParam = NULL;
11097 pWdaParams->wdaMsgParam = NULL;
11098 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011099 return CONVERT_WDI2VOS_STATUS(status) ;
11100}
Jeff Johnson295189b2012-06-20 16:38:30 -070011101/*
11102 * FUNCTION: WDA_RssiFilterCallback
11103 *
11104 */
11105void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
11106{
11107 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11108
11109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011111
11112 VOS_ASSERT(NULL != pWdaParams);
11113
11114 vos_mem_free(pWdaParams->wdaMsgParam) ;
11115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11116 vos_mem_free(pWdaParams) ;
11117
11118 return ;
11119}
11120/*
11121 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11122 * Request to WDI to set Preferred Network List.Offload
11123 */
11124VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
11125 tSirSetRSSIFilterReq* pRssiFilterParams)
11126{
Jeff Johnson43971f52012-07-17 12:26:56 -070011127 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
11129 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
11130 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011132 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011133 if(NULL == pwdiSetRssiFilterReqInfo)
11134 {
11135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011137 VOS_ASSERT(0);
11138 return VOS_STATUS_E_NOMEM;
11139 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011140 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11141 if(NULL == pWdaParams)
11142 {
11143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011144 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 VOS_ASSERT(0);
11146 vos_mem_free(pwdiSetRssiFilterReqInfo);
11147 return VOS_STATUS_E_NOMEM;
11148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011149 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
11150 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011151
Jeff Johnson295189b2012-06-20 16:38:30 -070011152 /* Store Params pass it to WDI */
11153 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
11154 pWdaParams->pWdaContext = pWDA;
11155 /* Store param pointer as passed in by caller */
11156 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011157 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
11158 (WDI_PNOScanCb)WDA_RssiFilterCallback,
11159 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011160 if(IS_WDI_STATUS_FAILURE(status))
11161 {
11162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11163 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
11164 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11165 vos_mem_free(pWdaParams->wdaMsgParam);
11166 pWdaParams->wdaWdiApiMsgParam = NULL;
11167 pWdaParams->wdaMsgParam = NULL;
11168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 return CONVERT_WDI2VOS_STATUS(status) ;
11170}
11171
Jeff Johnson295189b2012-06-20 16:38:30 -070011172/*
11173 * FUNCTION: WDA_ProcessUpdateScanParams
11174 * Request to WDI to update Scan Parameters
11175 */
11176VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
11177 tSirUpdateScanParams *pUpdateScanParams)
11178{
Jeff Johnson43971f52012-07-17 12:26:56 -070011179 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
11181 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
11182 sizeof(WDI_UpdateScanParamsInfoType)) ;
11183 tWDA_ReqParams *pWdaParams ;
11184 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011187 if(NULL == wdiUpdateScanParamsInfoType)
11188 {
11189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 VOS_ASSERT(0);
11192 return VOS_STATUS_E_NOMEM;
11193 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011194 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11195 if ( NULL == pWdaParams )
11196 {
11197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011198 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011199 VOS_ASSERT(0);
11200 vos_mem_free(wdiUpdateScanParamsInfoType);
11201 return VOS_STATUS_E_NOMEM;
11202 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 //
11204 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11205 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11207 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11208 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11209 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11210 "sir struct %d wdi struct %d",
11211 pUpdateScanParams->b11dEnabled,
11212 pUpdateScanParams->b11dResolved,
11213 pUpdateScanParams->ucChannelCount,
11214 pUpdateScanParams->usPassiveMinChTime,
11215 pUpdateScanParams->usPassiveMaxChTime,
11216 pUpdateScanParams->usActiveMinChTime,
11217 pUpdateScanParams->usActiveMaxChTime,
11218 sizeof(tSirUpdateScanParams),
11219 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11220
Jeff Johnson295189b2012-06-20 16:38:30 -070011221 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11222 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011223 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11224 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011225 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11226 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011227 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11228 pUpdateScanParams->usActiveMaxChTime;
11229 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11230 pUpdateScanParams->usActiveMinChTime;
11231 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11232 pUpdateScanParams->usPassiveMaxChTime;
11233 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11234 pUpdateScanParams->usPassiveMinChTime;
11235
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011237 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11238 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011239
Jeff Johnson295189b2012-06-20 16:38:30 -070011240 for ( i = 0; i <
11241 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11242 i++)
11243 {
11244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11245 "Update Scan Parameters channel: %d",
11246 pUpdateScanParams->aChannels[i]);
11247
11248 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11249 pUpdateScanParams->aChannels[i];
11250 }
11251
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011253
Jeff Johnson295189b2012-06-20 16:38:30 -070011254 /* Store Params pass it to WDI */
11255 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11256 pWdaParams->pWdaContext = pWDA;
11257 /* Store param pointer as passed in by caller */
11258 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011259
Jeff Johnson295189b2012-06-20 16:38:30 -070011260
11261
11262 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11263 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11264 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011265 if(IS_WDI_STATUS_FAILURE(status))
11266 {
11267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11268 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11270 vos_mem_free(pWdaParams->wdaMsgParam);
11271 vos_mem_free(pWdaParams);
11272 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011273 return CONVERT_WDI2VOS_STATUS(status) ;
11274}
11275#endif // FEATURE_WLAN_SCAN_PNO
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080011276/*
11277 * FUNCTION: WDA_SetPowerParamsCallback
11278 *
11279 */
11280void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
11281{
11282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11283
11284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11285 "<------ %s " ,__func__);
11286
11287 if(NULL == pWdaParams)
11288 {
11289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11290 "%s: pWdaParams received NULL", __func__);
11291 VOS_ASSERT(0);
11292 return;
11293 }
11294 if( pWdaParams != NULL )
11295 {
11296 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11297 {
11298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11299 }
11300 if( pWdaParams->wdaMsgParam != NULL)
11301 {
11302 vos_mem_free(pWdaParams->wdaMsgParam);
11303 }
11304 vos_mem_free(pWdaParams);
11305 }
11306 return;
11307}
11308
Jeff Johnson295189b2012-06-20 16:38:30 -070011309#ifdef WLAN_FEATURE_PACKET_FILTERING
11310/*
11311 * FUNCTION: WDA_8023MulticastListReqCallback
11312 *
11313 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011314void WDA_8023MulticastListReqCallback(
11315 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11316 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011317{
11318 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011320 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011321 if(NULL == pWdaParams)
11322 {
11323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011324 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011325 VOS_ASSERT(0) ;
11326 return ;
11327 }
11328
11329 vos_mem_free(pWdaParams->wdaMsgParam) ;
11330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11331 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 //print a msg, nothing else to do
11333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11334 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 return ;
11336}
Jeff Johnson295189b2012-06-20 16:38:30 -070011337/*
11338 * FUNCTION: WDA_Process8023MulticastListReq
11339 * Request to WDI to add 8023 Multicast List
11340 */
11341VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11342 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11343{
Jeff Johnson43971f52012-07-17 12:26:56 -070011344 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11346 tWDA_ReqParams *pWdaParams ;
11347 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011349 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011350 pwdiFltPktSetMcListReqParamsType =
11351 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11352 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11353 ) ;
11354 if(NULL == pwdiFltPktSetMcListReqParamsType)
11355 {
11356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 return VOS_STATUS_E_NOMEM;
11359 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011360 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11361 if(NULL == pWdaParams)
11362 {
11363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11366 return VOS_STATUS_E_NOMEM;
11367 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011368
Jeff Johnson295189b2012-06-20 16:38:30 -070011369 //
11370 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11371 //
11372 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011373 pRcvFltMcAddrList->ulMulticastAddrCnt;
11374
11375 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11376 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11377 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11378 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11379
Jeff Johnson295189b2012-06-20 16:38:30 -070011380 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11381 {
11382 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11383 &(pRcvFltMcAddrList->multicastAddr[i]),
11384 sizeof(tSirMacAddr));
11385 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011386 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011387
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 /* Store Params pass it to WDI */
11389 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11390 pWdaParams->pWdaContext = pWDA;
11391 /* Store param pointer as passed in by caller */
11392 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011393 status = WDI_8023MulticastListReq(
11394 pwdiFltPktSetMcListReqParamsType,
11395 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11396 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011397 if(IS_WDI_STATUS_FAILURE(status))
11398 {
11399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11400 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11402 vos_mem_free(pWdaParams->wdaMsgParam);
11403 vos_mem_free(pWdaParams);
11404 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011405 return CONVERT_WDI2VOS_STATUS(status) ;
11406}
Jeff Johnson295189b2012-06-20 16:38:30 -070011407/*
11408 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11409 *
11410 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011411void WDA_ReceiveFilterSetFilterReqCallback(
11412 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11413 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011414{
11415 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011417 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011419 if(NULL == pWdaParams)
11420 {
11421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011422 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011423 VOS_ASSERT(0) ;
11424 return ;
11425 }
11426
11427 vos_mem_free(pWdaParams->wdaMsgParam) ;
11428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11429 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011430 //print a msg, nothing else to do
11431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11432 "WDA_ReceiveFilterSetFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011433 return ;
11434}
Jeff Johnson295189b2012-06-20 16:38:30 -070011435/*
11436 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11437 * Request to WDI to set Receive Filters
11438 */
11439VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11440 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11441{
Jeff Johnson43971f52012-07-17 12:26:56 -070011442 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011443 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11444 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11445 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11446 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11447 tWDA_ReqParams *pWdaParams ;
11448 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011450 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011451 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11452 {
11453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011454 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011455 VOS_ASSERT(0);
11456 return VOS_STATUS_E_NOMEM;
11457 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11459 if(NULL == pWdaParams)
11460 {
11461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011463 VOS_ASSERT(0);
11464 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11465 return VOS_STATUS_E_NOMEM;
11466 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011467 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11468 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11469 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11470 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011471 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11472 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11473
11474 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11475 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011476
11477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11478 "FID %d FT %d NParams %d CT %d",
11479 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11480 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11481 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11482 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011483 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11484 {
11485 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11486 &pRcvPktFilterCfg->paramsData[i],
11487 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11489 "Proto %d Comp Flag %d \n",
11490 pwdiSetRcvPktFilterReqParamsType->
11491 wdiPktFilterCfg.paramsData[i].protocolLayer,
11492 pwdiSetRcvPktFilterReqParamsType->
11493 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11495 "Data Offset %d Data Len %d\n",
11496 pwdiSetRcvPktFilterReqParamsType->
11497 wdiPktFilterCfg.paramsData[i].dataOffset,
11498 pwdiSetRcvPktFilterReqParamsType->
11499 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11501 "CData: %d:%d:%d:%d:%d:%d\n",
11502 pwdiSetRcvPktFilterReqParamsType->
11503 wdiPktFilterCfg.paramsData[i].compareData[0],
11504 pwdiSetRcvPktFilterReqParamsType->
11505 wdiPktFilterCfg.paramsData[i].compareData[1],
11506 pwdiSetRcvPktFilterReqParamsType->
11507 wdiPktFilterCfg.paramsData[i].compareData[2],
11508 pwdiSetRcvPktFilterReqParamsType->
11509 wdiPktFilterCfg.paramsData[i].compareData[3],
11510 pwdiSetRcvPktFilterReqParamsType->
11511 wdiPktFilterCfg.paramsData[i].compareData[4],
11512 pwdiSetRcvPktFilterReqParamsType->
11513 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11515 "MData: %d:%d:%d:%d:%d:%d\n",
11516 pwdiSetRcvPktFilterReqParamsType->
11517 wdiPktFilterCfg.paramsData[i].dataMask[0],
11518 pwdiSetRcvPktFilterReqParamsType->
11519 wdiPktFilterCfg.paramsData[i].dataMask[1],
11520 pwdiSetRcvPktFilterReqParamsType->
11521 wdiPktFilterCfg.paramsData[i].dataMask[2],
11522 pwdiSetRcvPktFilterReqParamsType->
11523 wdiPktFilterCfg.paramsData[i].dataMask[3],
11524 pwdiSetRcvPktFilterReqParamsType->
11525 wdiPktFilterCfg.paramsData[i].dataMask[4],
11526 pwdiSetRcvPktFilterReqParamsType->
11527 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011530 /* Store Params pass it to WDI */
11531 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11532 pWdaParams->pWdaContext = pWDA;
11533 /* Store param pointer as passed in by caller */
11534 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011535 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
11536 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterReqCallback,
11537 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011538 if(IS_WDI_STATUS_FAILURE(status))
11539 {
11540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11541 "Failure in SetFilter(),free all the memory,status %d ",status);
11542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11543 vos_mem_free(pWdaParams->wdaMsgParam);
11544 vos_mem_free(pWdaParams);
11545 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011546 return CONVERT_WDI2VOS_STATUS(status) ;
11547}
Jeff Johnson295189b2012-06-20 16:38:30 -070011548/*
11549 * FUNCTION: WDA_FilterMatchCountReqCallback
11550 *
11551 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011552void WDA_FilterMatchCountReqCallback(
11553 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11554 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011555{
11556 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11557 tWDA_CbContext *pWDA;
11558 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11559 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11560 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11561 tANI_U8 i;
11562 vos_msg_t vosMsg;
11563
11564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011565 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011566 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11567
Jeff Johnsone7245742012-09-05 17:12:55 -070011568 if(NULL == pRcvFltPktMatchCntRsp)
11569 {
11570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011571 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011572 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011573 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011574 return ;
11575 }
11576
Jeff Johnson295189b2012-06-20 16:38:30 -070011577 if(NULL == pWdaParams)
11578 {
11579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011580 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011581 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011582 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011583 return ;
11584 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011585 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11586 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011587 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11588 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11589
11590 /* Message Header */
11591 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11592 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11593
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011594 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011595
11596 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11597 {
11598 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11599 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11600 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011601 /* VOS message wrapper */
11602 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11603 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11604 vosMsg.bodyval = 0;
11605 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11606 {
11607 /* free the mem and return */
11608 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11609 }
11610
11611 vos_mem_free(pWdaParams->wdaMsgParam) ;
11612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11613 vos_mem_free(pWdaParams) ;
11614}
Jeff Johnson295189b2012-06-20 16:38:30 -070011615/*
11616 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11617 * Request to WDI to get PC Filter Match Count
11618 */
11619VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11620{
Jeff Johnson43971f52012-07-17 12:26:56 -070011621 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11623 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11624 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011626 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011627 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11628 {
11629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011630 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011631 VOS_ASSERT(0);
11632 return VOS_STATUS_E_NOMEM;
11633 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011634 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11635 if(NULL == pWdaParams)
11636 {
11637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011638 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011639 VOS_ASSERT(0);
11640 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11641 return VOS_STATUS_E_NOMEM;
11642 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011643
Jeff Johnson295189b2012-06-20 16:38:30 -070011644 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11645
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011646 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11647 pRcvFltPktMatchRsp->bssId,
11648 sizeof(wpt_macAddr));
11649
Jeff Johnson295189b2012-06-20 16:38:30 -070011650 /* Store Params pass it to WDI */
11651 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11652 pWdaParams->pWdaContext = pWDA;
11653 /* Store param pointer as passed in by caller */
11654 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011655 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11656 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11657 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011658 if(IS_WDI_STATUS_FAILURE(status))
11659 {
11660 /* failure returned by WDI API */
11661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11662 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11664 vos_mem_free(pWdaParams) ;
11665 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11666 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011668 return CONVERT_WDI2VOS_STATUS(status) ;
11669}
Jeff Johnson295189b2012-06-20 16:38:30 -070011670/*
11671 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11672 *
11673 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011674void WDA_ReceiveFilterClearFilterReqCallback(
11675 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11676 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011677{
11678 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011680 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011681/* WDA_VOS_ASSERT(NULL != pWdaParams); */
11682 if(NULL == pWdaParams)
11683 {
11684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011685 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011686 VOS_ASSERT(0) ;
11687 return ;
11688 }
11689
11690 vos_mem_free(pWdaParams->wdaMsgParam) ;
11691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11692 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011693 //print a msg, nothing else to do
11694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11695 "WDA_ReceiveFilterClearFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011696 return ;
11697}
Jeff Johnson295189b2012-06-20 16:38:30 -070011698/*
11699 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
11700 * Request to WDI to clear Receive Filters
11701 */
11702VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
11703 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
11704{
Jeff Johnson43971f52012-07-17 12:26:56 -070011705 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011706 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
11707 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
11708 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011710 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011711 if(NULL == pwdiRcvFltPktClearReqParamsType)
11712 {
11713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011714 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011715 VOS_ASSERT(0);
11716 return VOS_STATUS_E_NOMEM;
11717 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011718 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11719 if(NULL == pWdaParams)
11720 {
11721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011722 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011723 VOS_ASSERT(0);
11724 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
11725 return VOS_STATUS_E_NOMEM;
11726 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011727 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
11728 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070011729 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
11730 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
11731 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
11732 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011733
11734 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011735 /* Store Params pass it to WDI */
11736 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
11737 pWdaParams->pWdaContext = pWDA;
11738 /* Store param pointer as passed in by caller */
11739 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011740 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
11741 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterReqCallback,
11742 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011743 if(IS_WDI_STATUS_FAILURE(status))
11744 {
11745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11746 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
11747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080011748 vos_mem_free(pWdaParams->wdaMsgParam);
11749 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011750 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011751 return CONVERT_WDI2VOS_STATUS(status) ;
11752}
11753#endif // WLAN_FEATURE_PACKET_FILTERING
11754
Jeff Johnson295189b2012-06-20 16:38:30 -070011755/*
11756 * FUNCTION: WDA_ProcessSetPowerParamsReq
11757 * Request to WDI to set power params
11758 */
11759VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
11760 tSirSetPowerParamsReq *pPowerParams)
11761{
Jeff Johnson43971f52012-07-17 12:26:56 -070011762 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011763 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
11764 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011765 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011767 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011768 if(NULL == pwdiSetPowerParamsReqInfo)
11769 {
11770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011772 VOS_ASSERT(0);
11773 return VOS_STATUS_E_NOMEM;
11774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11776 if(NULL == pWdaParams)
11777 {
11778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011780 VOS_ASSERT(0);
11781 vos_mem_free(pwdiSetPowerParamsReqInfo);
11782 return VOS_STATUS_E_NOMEM;
11783 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011784
Jeff Johnson295189b2012-06-20 16:38:30 -070011785
11786 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
11787 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
11789 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070011790 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
11791 pPowerParams->uListenInterval;
11792 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
11793 pPowerParams->uBcastMcastFilter;
11794 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
11795 pPowerParams->uEnableBET;
11796 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
11797 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070011798 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011799
Jeff Johnson295189b2012-06-20 16:38:30 -070011800 /* Store Params pass it to WDI */
11801 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
11802 pWdaParams->pWdaContext = pWDA;
11803 /* Store param pointer as passed in by caller */
11804 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011805 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
11806 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
11807 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011808 if(IS_WDI_STATUS_FAILURE(status))
11809 {
11810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11811 "Failure in Set power params REQ WDI API, free all the memory " );
11812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11813 vos_mem_free(pWdaParams->wdaMsgParam);
11814 pWdaParams->wdaWdiApiMsgParam = NULL;
11815 pWdaParams->wdaMsgParam = NULL;
11816 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011817 return CONVERT_WDI2VOS_STATUS(status) ;
11818}
11819
11820/*
11821 * FUNCTION: WDA_SetTmLevelRspCallback
11822 * Set TM Level response
11823 */
11824void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
11825{
11826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11827
11828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011829 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011830
11831 if(NULL == pWdaParams)
11832 {
11833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011834 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 VOS_ASSERT(0) ;
11836 return ;
11837 }
11838
11839 /* Dose not need to send notification to upper layer
11840 * Just free allocated resources */
11841 if( pWdaParams != NULL )
11842 {
11843 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11844 {
11845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11846 }
11847 vos_mem_free(pWdaParams->wdaMsgParam) ;
11848 vos_mem_free(pWdaParams) ;
11849 }
11850}
11851
11852/*
11853 * FUNCTION: WDA_ProcessSetTmLevelReq
11854 * Set TM Level request
11855 */
11856VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
11857 tAniSetTmLevelReq *setTmLevelReq)
11858{
11859 WDI_Status status = WDI_STATUS_SUCCESS ;
11860 tWDA_ReqParams *pWdaParams ;
11861 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
11862 (WDI_SetTmLevelReqType *)vos_mem_malloc(
11863 sizeof(WDI_SetTmLevelReqType)) ;
11864 if(NULL == wdiSetTmLevelReq)
11865 {
11866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011868 VOS_ASSERT(0);
11869 return VOS_STATUS_E_NOMEM;
11870 }
11871
11872 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11873 if(NULL == pWdaParams)
11874 {
11875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011876 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011877 VOS_ASSERT(0);
11878 vos_mem_free(wdiSetTmLevelReq);
11879 return VOS_STATUS_E_NOMEM;
11880 }
11881
11882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011883 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011884
11885 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
11886 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
11887
11888 pWdaParams->pWdaContext = pWDA;
11889 pWdaParams->wdaMsgParam = setTmLevelReq;
11890 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
11891
11892 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
11893 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
11894
11895 if(IS_WDI_STATUS_FAILURE(status))
11896 {
11897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080011898 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070011899 vos_mem_free(pWdaParams->wdaMsgParam) ;
11900 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11901 vos_mem_free(pWdaParams) ;
11902 }
11903
11904 return CONVERT_WDI2VOS_STATUS(status) ;
11905}
11906
11907VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
11908 tpTxControlParams pTxCtrlParam)
11909{
11910 VOS_STATUS wdaStatus;
11911
11912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011913 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011914 if( pTxCtrlParam == NULL )
11915 {
11916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011917 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011918 return VOS_STATUS_E_FAILURE;
11919 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011920 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
11921 {
11922 wdaStatus = WDA_SuspendDataTx(pWDA);
11923 }
11924 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
11925 {
11926 wdaStatus = WDA_ResumeDataTx(pWDA);
11927 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011928 return wdaStatus;
11929}
11930
11931 /* FUNCTION WDA_featureCapsExchange
11932 * WDA API to invoke capability exchange between host and FW.
11933 */
11934void WDA_featureCapsExchange(v_PVOID_t pVosContext)
11935{
11936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011937 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011938 WDI_featureCapsExchangeReq( NULL, pVosContext);
11939}
11940
Yathish9f22e662012-12-10 14:21:35 -080011941/* FUNCTION WDA_disableCapablityFeature
11942 * WDA API to diable Active mode offload in host.
11943 */
11944void WDA_disableCapablityFeature(tANI_U8 feature_index)
11945{
11946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11947 "%s:enter", __func__ );
11948 WDI_disableCapablityFeature(feature_index);
11949}
11950
Jeff Johnson295189b2012-06-20 16:38:30 -070011951 /* FUNCTION WDA_getHostWlanFeatCaps
11952 * Wrapper for WDI API, that will return if the feature (enum value).passed
11953 * to this API is supported or not in Host
11954 * return value
11955 * 0 - implies feature is NOT Supported
11956 * any non zero value - implies feature is SUPPORTED
11957 */
11958tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
11959{
11960 return WDI_getHostWlanFeatCaps(featEnumValue);
11961}
11962
11963 /* FUNCTION WDA_getFwWlanFeatCaps
11964 * Wrapper for WDI API, that will return if the feature (enum value).passed
11965 * to this API is supported or not in FW
11966 * return value
11967 * 0 - implies feature is NOT Supported
11968 * any non zero value - implies feature is SUPPORTED
11969 */
11970tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
11971{
11972 return WDI_getFwWlanFeatCaps(featEnumValue);
11973}
11974
11975/*
11976 * FUNCTION: WDA_shutdown
11977 * Shutdown WDA/WDI without handshaking with Riva.
11978 * Synchronous function.
11979 */
11980VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
11981{
11982 WDI_Status wdiStatus;
11983 //tANI_U8 eventIdx = 0;
11984 VOS_STATUS status = VOS_STATUS_SUCCESS;
11985 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 if (NULL == pWDA)
11987 {
11988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011989 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011990 VOS_ASSERT(0);
11991 return VOS_STATUS_E_FAILURE;
11992 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011993 /* FTM mode stay START_STATE */
11994 if( (WDA_READY_STATE != pWDA->wdaState) &&
11995 (WDA_INIT_STATE != pWDA->wdaState) &&
11996 (WDA_START_STATE != pWDA->wdaState) )
11997 {
11998 VOS_ASSERT(0);
11999 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012000
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012001 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
12002 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070012003 {
12004 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012005 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012006 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012007
Jeff Johnson295189b2012-06-20 16:38:30 -070012008 /* call WDI shutdown */
12009 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070012010 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
12011 {
12012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12013 "error in WDA Stop" );
12014 status = VOS_STATUS_E_FAILURE;
12015 }
12016 /* WDI stop is synchrnous, shutdown is complete when it returns */
12017 pWDA->wdaState = WDA_STOP_STATE;
12018
Jeff Johnson295189b2012-06-20 16:38:30 -070012019 /* shutdown should perform the stop & close actions. */
12020 /* Destroy the event */
12021 status = vos_event_destroy(&pWDA->txFrameEvent);
12022 if(!VOS_IS_STATUS_SUCCESS(status))
12023 {
12024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12025 "VOS Event destroy failed - status = %d\n", status);
12026 status = VOS_STATUS_E_FAILURE;
12027 }
12028 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
12029 if(!VOS_IS_STATUS_SUCCESS(status))
12030 {
12031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12032 "VOS Event destroy failed - status = %d\n", status);
12033 status = VOS_STATUS_E_FAILURE;
12034 }
12035 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
12036 if(!VOS_IS_STATUS_SUCCESS(status))
12037 {
12038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12039 "VOS Event destroy failed - status = %d\n", status);
12040 status = VOS_STATUS_E_FAILURE;
12041 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012042 /* free WDA context */
12043 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
12044 if ( !VOS_IS_STATUS_SUCCESS(status) )
12045 {
12046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12047 "error in WDA close " );
12048 status = VOS_STATUS_E_FAILURE;
12049 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012050 return status;
12051}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012052
Jeff Johnsone7245742012-09-05 17:12:55 -070012053/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012054 * FUNCTION: WDA_setNeedShutdown
12055 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070012056 */
12057
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012058void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070012059{
12060 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012061 if(pWDA == NULL)
12062 {
12063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12064 "Could not get the WDA Context pointer" );
12065 return;
12066 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012067 pWDA->needShutdown = TRUE;
12068}
12069/*
12070 * FUNCTION: WDA_needShutdown
12071 * WDA needs a shutdown
12072 */
12073
12074v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
12075{
12076 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012077 if(pWDA == NULL)
12078 {
12079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12080 "Could not get the WDA Context pointer" );
12081 return 0;
12082 }
12083 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070012084}
12085
Mohit Khanna4a70d262012-09-11 16:30:12 -070012086#ifdef WLAN_FEATURE_11AC
12087/*
12088 * FUNCTION: WDA_SetBeaconFilterReqCallback
12089 *
12090 */
12091void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
12092{
12093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012095 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012096 if(NULL == pWdaParams)
12097 {
12098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012099 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012100 VOS_ASSERT(0) ;
12101 return ;
12102 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012103
Mohit Khanna4a70d262012-09-11 16:30:12 -070012104 vos_mem_free(pWdaParams->wdaMsgParam) ;
12105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12106 vos_mem_free(pWdaParams) ;
12107 /*
12108 * No respone required for SetBeaconFilter req so just free the request
12109 * param here
12110 */
12111
12112 return ;
12113}
12114
12115VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
12116 tUpdateVHTOpMode *pData)
12117{
12118 WDI_Status status = WDI_STATUS_SUCCESS ;
12119 tWDA_ReqParams *pWdaParams ;
12120 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
12121 sizeof(WDI_UpdateVHTOpMode)) ;
12122 if(NULL == wdiTemp)
12123 {
12124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012125 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012126 VOS_ASSERT(0);
12127 return VOS_STATUS_E_NOMEM;
12128 }
12129 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12130 if(NULL == pWdaParams)
12131 {
12132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012133 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012134 VOS_ASSERT(0);
12135 vos_mem_free(wdiTemp);
12136 return VOS_STATUS_E_NOMEM;
12137 }
12138
12139 wdiTemp->opMode = pData->opMode;
12140 wdiTemp->staId = pData->staId;
12141
12142 pWdaParams->pWdaContext = pWDA;
12143 /* Store Req pointer, as this will be used for response */
12144 pWdaParams->wdaMsgParam = (void *)pData;
12145 /* store Params pass it to WDI */
12146 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
12147
12148 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
12149
12150 if(IS_WDI_STATUS_FAILURE(status))
12151 {
12152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12153 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
12154 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12155 vos_mem_free(pWdaParams->wdaMsgParam);
12156 vos_mem_free(pWdaParams);
12157 }
12158 return CONVERT_WDI2VOS_STATUS(status) ;
12159}
12160#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012161
12162/*==========================================================================
12163 FUNCTION WDA_TransportChannelDebug
12164
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070012165 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012166 Display Transport Channel debugging information
12167 User may request to display DXE channel snapshot
12168 Or if host driver detects any abnormal stcuk may display
12169
12170 PARAMETERS
Jeff Johnsonb88db982012-12-10 13:34:59 -080012171 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012172 enableStallDetect : Enable stall detect feature
12173 This feature will take effect to data performance
12174 Not integrate till fully verification
12175
12176 RETURN VALUE
12177 NONE
12178
12179===========================================================================*/
12180void WDA_TransportChannelDebug
12181(
12182 v_BOOL_t displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012183 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012184)
12185{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012186 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012187 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012188}