blob: fe90ef4154f95896fbe2f28323a2a4254219cd97 [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#if defined( FEATURE_WLAN_INTEGRATED_SOC )
Jeff Johnson295189b2012-06-20 16:38:30 -070070#include "vos_mq.h"
71#include "vos_api.h"
72#include "vos_packet.h"
73#include "vos_nvitem.h"
74#include "sirApi.h"
75#include "wlan_qct_pal_packet.h"
76#include "wlan_qct_wda.h"
77#include "wlan_qct_wda_msg.h"
78#include "wlan_qct_wdi_cfg.h"
79#include "wlan_qct_wdi.h"
80#include "wlan_qct_wdi_ds.h"
81#include "wlan_hal_cfg.h"
82/**********************/
83#include "wniApi.h"
84#include "cfgApi.h"
85#include "limApi.h"
86#include "wlan_qct_tl.h"
87#include "wlan_qct_tli_ba.h"
88#include "limUtils.h"
89#include "btcApi.h"
90#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070091#ifdef ANI_MANF_DIAG
92#include "pttMsgApi.h"
93#include "wlan_qct_sys.h"
94#endif /* ANI_MANF_DIAG */
Jeff Johnson295189b2012-06-20 16:38:30 -070095/* Used MACRO's */
96/* Get WDA context from vOSS module */
97#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
98#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
99#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
100#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -0700101#define CONVERT_WDI2SIR_STATUS(x) \
102 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
103
104#define IS_WDI_STATUS_FAILURE(status) \
105 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700106#define CONVERT_WDI2VOS_STATUS(x) \
107 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
108
109/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700110#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700112#define WDA_GET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
114
115#define WDA_SET_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
117
118#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
119 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
121 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700122/* timer related Macros */
123#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
124 tx_timer_create(a, b, c, d, e, f, g)
125#define WDA_START_TIMER(a) tx_timer_activate(a)
126#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
127#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700128#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129
130#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
131 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700133#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700134#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700135#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800136#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700137
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700138#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700139
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700140#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700141#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
142 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
143 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
144
145#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
146#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800147#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
148
Jeff Johnson295189b2012-06-20 16:38:30 -0700149/* extern declarations */
150extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -0700151/* forward declarations */
152void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
153 void *pBodyptr, tANI_U32 bodyVal) ;
154VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
155 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700156VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
157VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
158
159extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
160 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
161void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
162 tANI_U32 *pConfig) ;
163void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
164 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
165void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
166 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
167void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
168 void* pUserData ) ;
169static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
170static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
171void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800172void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700174#ifdef WLAN_FEATURE_VOWIFI_11R
175VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
176#endif /* WLAN_FEATURE_VOWIFI_11R */
177
Jeff Johnson295189b2012-06-20 16:38:30 -0700178void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
179void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
180VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700181#ifdef FEATURE_WLAN_SCAN_PNO
182static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
183static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
184static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
185#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -0700186#ifdef WLAN_FEATURE_PACKET_FILTERING
187static VOS_STATUS WDA_Process8023MulticastListReq (
188 tWDA_CbContext *pWDA,
189 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
190 );
191static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
192 tWDA_CbContext *pWDA,
193 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
194 );
195static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
196 tWDA_CbContext *pWDA,
197 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
198 );
199static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
200 tWDA_CbContext *pWDA,
201 tSirRcvFltPktClearParam *pRcvFltPktClearParam
202 );
203#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700204VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700205static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
206 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700207VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
208 v_U8_t *pDefaultKeyId,
209 v_U8_t *pNumKeys,
210 WDI_KeysType *pWdiKeys );
211
212#ifdef WLAN_FEATURE_GTK_OFFLOAD
213static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
214static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
215#endif // WLAN_FEATURE_GTK_OFFLOAD
216
217VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
218 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700219#ifdef WLAN_FEATURE_11AC
220VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
221 tUpdateVHTOpMode *pData);
222#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700223/*
224 * FUNCTION: WDA_open
225 * Allocate the WDA context
226 */
227VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
228 tMacOpenParameters *pMacParams )
229{
230 tWDA_CbContext *wdaContext;
231 VOS_STATUS status;
232 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700233 /* Allocate WDA context */
234 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
235 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
236 if(!VOS_IS_STATUS_SUCCESS(status))
237 {
238 return VOS_STATUS_E_NOMEM;
239 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700240 /*__asm int 3;*/
241 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
242
243 /* Initialize data structures */
244 wdaContext->pVosContext = pVosContext;
245 wdaContext->wdaState = WDA_INIT_STATE;
246 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
247
248 /* Initialize WDA-WDI synchronization event */
249 status = vos_event_init(&wdaContext->wdaWdiEvent);
250 if(!VOS_IS_STATUS_SUCCESS(status))
251 {
252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
253 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800254 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700255 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700256 /* Init Frame transfer event */
257 status = vos_event_init(&wdaContext->txFrameEvent);
258 if(!VOS_IS_STATUS_SUCCESS(status))
259 {
260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
261 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800262 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700263 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700264 status = vos_event_init(&wdaContext->suspendDataTxEvent);
265 if(!VOS_IS_STATUS_SUCCESS(status))
266 {
267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
268 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800269 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700270 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700271 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
272 if(!VOS_IS_STATUS_SUCCESS(status))
273 {
274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
275 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800276 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700277 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700278 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700279 wdaContext->driverMode = pMacParams->driverType;
280 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
281 &wdiDevCapability, pMacParams->driverType))
282 {
283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
284 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800285 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700286 }
287 else
288 {
289 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
290 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
291 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700292 /* update max STA in WDA used for BA */
293 wdaContext->wdaMaxSta = pMacParams->maxStation;
294 /* store the frameTransRequired flag in wdaContext, to send this to HAL
295 * in WDA_Start
296 */
297 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
298 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700299 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800300
301error:
302 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
303 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700304}
305
Jeff Johnson295189b2012-06-20 16:38:30 -0700306/*
307 * FUNCTION: WDA_preStart
308 * Trigger DAL-AL to start CFG download
309 */
310VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
311{
312 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
313 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700314 /*
315 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
316 */
317 wdaMsg.type = WNI_CFG_DNLD_REQ ;
318 wdaMsg.bodyptr = NULL;
319 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 /* post the message.. */
321 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
322 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
323 {
324 vosStatus = VOS_STATUS_E_BADMSG;
325 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700326 return( vosStatus );
327}
Jeff Johnson295189b2012-06-20 16:38:30 -0700328/*
329 * FUNCTION: WDA_wdiStartCallback
330 * Once WDI_Start is finished, WDI start callback will be called by WDI
331 * to indicate completion of WDI_Start.
332 */
333void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
334 void *pVosContext)
335{
336 tWDA_CbContext *wdaContext;
337 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700338 if (NULL == pVosContext)
339 {
340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700341 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700342 return;
343 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700344 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
345 if (NULL == wdaContext)
346 {
347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700348 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700349 return;
350 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700351 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
352 {
353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700354 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700355 }
356 else
357 {
358 wdaContext->wdaState = WDA_START_STATE;
359 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700360 /* extract and save version information from the Start Response */
361 wdaContext->wcnssWlanCompiledVersion.major =
362 wdiRspParams->wlanCompiledVersion.major;
363 wdaContext->wcnssWlanCompiledVersion.minor =
364 wdiRspParams->wlanCompiledVersion.minor;
365 wdaContext->wcnssWlanCompiledVersion.version =
366 wdiRspParams->wlanCompiledVersion.version;
367 wdaContext->wcnssWlanCompiledVersion.revision =
368 wdiRspParams->wlanCompiledVersion.revision;
369 wdaContext->wcnssWlanReportedVersion.major =
370 wdiRspParams->wlanReportedVersion.major;
371 wdaContext->wcnssWlanReportedVersion.minor =
372 wdiRspParams->wlanReportedVersion.minor;
373 wdaContext->wcnssWlanReportedVersion.version =
374 wdiRspParams->wlanReportedVersion.version;
375 wdaContext->wcnssWlanReportedVersion.revision =
376 wdiRspParams->wlanReportedVersion.revision;
377 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
378 wdiRspParams->wcnssSoftwareVersion,
379 sizeof(wdaContext->wcnssSoftwareVersionString));
380 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
381 wdiRspParams->wcnssHardwareVersion,
382 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 /* Notify WDA_start that WDI_Start has completed */
384 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700385 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700386 {
387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700388 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 return;
391}
392
Jeff Johnson295189b2012-06-20 16:38:30 -0700393/*
394 * FUNCTION: WDA_start
395 * Prepare TLV configuration and call WDI_Start.
396 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700397VOS_STATUS WDA_start(v_PVOID_t pVosContext)
398{
399 tWDA_CbContext *wdaContext;
400 VOS_STATUS status;
401 WDI_Status wdiStatus;
402 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700403 if (NULL == pVosContext)
404 {
405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700406 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700407 return VOS_STATUS_E_FAILURE;
408 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
410 if (NULL == wdaContext)
411 {
412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700413 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 return VOS_STATUS_E_FAILURE;
415 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 /* Non-FTM mode, WDA status for START must be INIT
417 * FTM mode, WDA Status for START can be INIT or STOP */
418 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
419 (WDA_STOP_STATE != wdaContext->wdaState) )
420 {
421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
422 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700423 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 return VOS_STATUS_E_FAILURE;
425 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 /* initialize the wdiStartParam. Note that we can create this on
427 the stack since we won't exit until WDI_Start() completes or
428 times out */
429 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 /* prepare the config TLV for the WDI */
432 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
433 if ( !VOS_IS_STATUS_SUCCESS(status) )
434 {
435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700436 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700437 return VOS_STATUS_E_FAILURE;
438 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 /* note from here onwards if an error occurs we must
440 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
442 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
443 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 /* initialize the WDA-WDI synchronization event */
445 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 /* call WDI start */
447 wdiStatus = WDI_Start(&wdiStartParam,
448 (WDI_StartRspCb)WDA_wdiStartCallback,
449 (v_VOID_t *)pVosContext);
450 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
451 {
452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700453 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 vos_mem_free(wdiStartParam.pConfigBuffer);
455 return VOS_STATUS_E_FAILURE;
456 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 /* wait for WDI start to invoke our callback */
458 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
459 WDA_WDI_START_TIMEOUT );
460 if ( !VOS_IS_STATUS_SUCCESS(status) )
461 {
462 if ( VOS_STATUS_E_TIMEOUT == status )
463 {
464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700465 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700466 }
467 else
468 {
469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
470 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700471 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 }
473 vos_mem_free(wdiStartParam.pConfigBuffer);
474 return VOS_STATUS_E_FAILURE;
475 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 /* we no longer need the config TLV */
478 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700479 /* if we are not in the START state then WDI_Start() failed */
480 if (WDA_START_STATE != wdaContext->wdaState)
481 {
482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700483 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700484 return VOS_STATUS_E_FAILURE;
485 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 /* FTM mode does not need to monitor BA activity */
487 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
488 {
489 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800490 if(VOS_STATUS_SUCCESS == status)
491 {
492 wdaContext->wdaTimersCreated = VOS_TRUE;
493 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 return status;
496}
497
Jeff Johnson295189b2012-06-20 16:38:30 -0700498/*
499 * FUNCTION: WDA_prepareConfigTLV
500 * Function to prepare CFG for DAL(WDA)
501 */
502VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
503 WDI_StartReqParamsType *wdiStartParams )
504{
505 /* get pMac to acess CFG data base */
506 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
507 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
508 tHalCfg *tlvStruct = NULL ;
509 tANI_U8 *tlvStructStart = NULL ;
510 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
511 v_PVOID_t *configParam;
512 tANI_U32 configParamSize;
513 tANI_U32 *configDataValue;
514 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 if ((NULL == pMac)||(NULL == wdaContext))
516 {
517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700518 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 VOS_ASSERT(0);
520 return VOS_STATUS_E_FAILURE;
521 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700522 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
523 WNI_CFG_STA_ID_LEN +
524 WNI_CFG_EDCA_WME_ACBK_LEN +
525 WNI_CFG_EDCA_WME_ACBE_LEN +
526 WNI_CFG_EDCA_WME_ACVI_LEN +
527 WNI_CFG_EDCA_WME_ACVO_LEN +
528 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700529 /* malloc memory for all configs in one shot */
530 configParam = vos_mem_malloc(configParamSize);
531
532 if(NULL == configParam )
533 {
534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700535 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 VOS_ASSERT(0) ;
537 return VOS_STATUS_E_NOMEM;
538 }
539 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 tlvStruct = (tHalCfg *)configParam;
542 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 /* TODO: Remove Later */
544 /* QWLAN_HAL_CFG_STA_ID */
545 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
546 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
547 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
548 eSIR_SUCCESS)
549 {
550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
551 "Failed to get value for WNI_CFG_STA_ID");
552 goto handle_failure;
553 }
554 tlvStruct->length = strLength ;
555 /* calculate the pad bytes to have the CFG in aligned format */
556 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
557 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700558 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
559 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
561 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
562 tlvStruct->length = sizeof(tANI_U32);
563 configDataValue = (tANI_U32 *)(tlvStruct + 1);
564 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
565 != eSIR_SUCCESS)
566 {
567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
568 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
569 goto handle_failure;
570 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700571 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
572 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700573 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
574 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
575 tlvStruct->length = sizeof(tANI_U32);
576 configDataValue = (tANI_U32 *)(tlvStruct + 1);
577 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
578 eSIR_SUCCESS)
579 {
580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
581 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
582 goto handle_failure;
583 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
585 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
587 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
588 tlvStruct->length = sizeof(tANI_U32);
589 configDataValue = (tANI_U32 *)(tlvStruct + 1);
590 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
591 != eSIR_SUCCESS)
592 {
593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
594 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
595 goto handle_failure;
596 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700597 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
598 + sizeof(tHalCfg) + tlvStruct->length)) ;
599
600 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
601 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
602 tlvStruct->length = sizeof(tANI_U32);
603 configDataValue = (tANI_U32 *)(tlvStruct + 1);
604 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
605 configDataValue ) != eSIR_SUCCESS)
606 {
607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
608 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
609 goto handle_failure;
610 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
612 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 /* QWLAN_HAL_CFG_CAL_PERIOD */
614 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
615 tlvStruct->length = sizeof(tANI_U32);
616 configDataValue = (tANI_U32 *)(tlvStruct + 1);
617 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
618 != eSIR_SUCCESS)
619 {
620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
621 "Failed to get value for WNI_CFG_CAL_PERIOD");
622 goto handle_failure;
623 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700624 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
625 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700626 /* QWLAN_HAL_CFG_CAL_CONTROL */
627 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
628 tlvStruct->length = sizeof(tANI_U32);
629 configDataValue = (tANI_U32 *)(tlvStruct + 1);
630 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
631 != eSIR_SUCCESS)
632 {
633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
634 "Failed to get value for WNI_CFG_CAL_CONTROL");
635 goto handle_failure;
636 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700637 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
638 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700639 /* QWLAN_HAL_CFG_PROXIMITY */
640 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
641 tlvStruct->length = sizeof(tANI_U32);
642 configDataValue = (tANI_U32 *)(tlvStruct + 1);
643 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
644 != eSIR_SUCCESS)
645 {
646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
647 "Failed to get value for WNI_CFG_PROXIMITY");
648 goto handle_failure;
649 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700650 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
651 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
653 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
654 tlvStruct->length = sizeof(tANI_U32);
655 configDataValue = (tANI_U32 *)(tlvStruct + 1);
656 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
657 != eSIR_SUCCESS)
658 {
659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
660 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
661 goto handle_failure;
662 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700663 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
664 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700665 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
666 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
667 tlvStruct->length = sizeof(tANI_U32);
668 configDataValue = (tANI_U32 *)(tlvStruct + 1);
669 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
670 eSIR_SUCCESS)
671 {
672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
673 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
674 goto handle_failure;
675 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700676 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
677 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
679 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
680 tlvStruct->length = sizeof(tANI_U32);
681 configDataValue = (tANI_U32 *)(tlvStruct + 1);
682 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
683 configDataValue ) != eSIR_SUCCESS)
684 {
685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
686 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
687 goto handle_failure;
688 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700689 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
690 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700691 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
692 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
693 tlvStruct->length = sizeof(tANI_U32);
694 configDataValue = (tANI_U32 *)(tlvStruct + 1);
695 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
696 eSIR_SUCCESS)
697 {
698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
699 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
700 goto handle_failure;
701 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700702 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
703 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700704 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
705 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
706 tlvStruct->length = sizeof(tANI_U32);
707 configDataValue = (tANI_U32 *)(tlvStruct + 1);
708 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
709 eSIR_SUCCESS)
710 {
711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
712 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
713 goto handle_failure;
714 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700715 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
716 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700717 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
718 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
719 tlvStruct->length = sizeof(tANI_U32);
720 configDataValue = (tANI_U32 *)(tlvStruct + 1);
721 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
722 eSIR_SUCCESS)
723 {
724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
725 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
726 goto handle_failure;
727 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700728 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
729 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700730 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
731 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
732 tlvStruct->length = sizeof(tANI_U32);
733 configDataValue = (tANI_U32 *)(tlvStruct + 1);
734 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
735 configDataValue ) != eSIR_SUCCESS)
736 {
737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
738 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
739 goto handle_failure;
740 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700741 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
742 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700743 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
744 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
745 tlvStruct->length = sizeof(tANI_U32);
746 configDataValue = (tANI_U32 *)(tlvStruct + 1);
747 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
748 configDataValue ) != eSIR_SUCCESS)
749 {
750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
751 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
752 goto handle_failure;
753 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700754 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
755 + sizeof(tHalCfg) + tlvStruct->length));
756
757 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
758 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
759 tlvStruct->length = sizeof(tANI_U32);
760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
761 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
762 configDataValue ) != eSIR_SUCCESS)
763 {
764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
765 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
766 goto handle_failure;
767 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700768 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
769 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700770 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
771 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
772 tlvStruct->length = sizeof(tANI_U32);
773 configDataValue = (tANI_U32 *)(tlvStruct + 1);
774 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
775 configDataValue ) != eSIR_SUCCESS)
776 {
777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
778 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
779 goto handle_failure;
780 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700781 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
782 + sizeof(tHalCfg) + tlvStruct->length));
783
784 /* QWLAN_HAL_CFG_FIXED_RATE */
785 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
786 tlvStruct->length = sizeof(tANI_U32);
787 configDataValue = (tANI_U32 *)(tlvStruct + 1);
788 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
789 != eSIR_SUCCESS)
790 {
791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
792 "Failed to get value for WNI_CFG_FIXED_RATE");
793 goto handle_failure;
794 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700795 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
796 + sizeof(tHalCfg) + tlvStruct->length));
797
798 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
799 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
800 tlvStruct->length = sizeof(tANI_U32);
801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
802 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
803 != eSIR_SUCCESS)
804 {
805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
806 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
807 goto handle_failure;
808 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700809 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
810 + sizeof(tHalCfg) + tlvStruct->length));
811
812 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
813 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
814 tlvStruct->length = sizeof(tANI_U32);
815 configDataValue = (tANI_U32 *)(tlvStruct + 1);
816 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
817 configDataValue ) != eSIR_SUCCESS)
818 {
819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
820 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
821 goto handle_failure;
822 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700823 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
824 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
826 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
827 tlvStruct->length = sizeof(tANI_U32);
828 configDataValue = (tANI_U32 *)(tlvStruct + 1);
829 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
830 configDataValue ) != eSIR_SUCCESS)
831 {
832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
833 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
834 goto handle_failure;
835 }
836 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
837 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700838 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
839 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
840 tlvStruct->length = sizeof(tANI_U32);
841 configDataValue = (tANI_U32 *)(tlvStruct + 1);
842 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
843 configDataValue ) != eSIR_SUCCESS)
844 {
845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
846 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
847 goto handle_failure;
848 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700849 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
850 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700851 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
852 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
853 tlvStruct->length = sizeof(tANI_U32);
854 configDataValue = (tANI_U32 *)(tlvStruct + 1);
855 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
856 configDataValue ) != eSIR_SUCCESS)
857 {
858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
859 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
860 goto handle_failure;
861 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700862 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
863 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700864 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
865 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
866 tlvStruct->length = sizeof(tANI_U32);
867 configDataValue = (tANI_U32 *)(tlvStruct + 1);
868 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
869 configDataValue ) != eSIR_SUCCESS)
870 {
871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
872 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
873 goto handle_failure;
874 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700875 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
876 + sizeof(tHalCfg) + tlvStruct->length);
877
878#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
879 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
880 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
881 tlvStruct->length = sizeof(tANI_U32);
882 configDataValue = (tANI_U32 *)(tlvStruct + 1);
883 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
884 configDataValue ) != eSIR_SUCCESS)
885 {
886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
887 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
888 goto handle_failure;
889 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700890 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
891 + sizeof(tHalCfg) + tlvStruct->length);
892#endif
893 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
894 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
895 tlvStruct->length = sizeof(tANI_U32);
896 configDataValue = (tANI_U32 *)(tlvStruct + 1);
897 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
898 configDataValue ) != eSIR_SUCCESS)
899 {
900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
901 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
902 goto handle_failure;
903 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700904 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
905 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
907 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
908 tlvStruct->length = sizeof(tANI_U32);
909 configDataValue = (tANI_U32 *)(tlvStruct + 1);
910 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
911 eSIR_SUCCESS)
912 {
913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
914 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
915 goto handle_failure;
916 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700917 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
918 + sizeof(tHalCfg) + tlvStruct->length);
919
920 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
921 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
922 tlvStruct->length = sizeof(tANI_U32);
923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
924 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
925 configDataValue ) != eSIR_SUCCESS)
926 {
927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
928 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
929 goto handle_failure;
930 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700931 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
932 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
934 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
935 tlvStruct->length = sizeof(tANI_U32);
936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
937 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
938 configDataValue ) != eSIR_SUCCESS)
939 {
940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
941 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
942 goto handle_failure;
943 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700944 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
945 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
947 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
948 tlvStruct->length = sizeof(tANI_U32);
949 configDataValue = (tANI_U32 *)(tlvStruct + 1);
950 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
951 configDataValue ) != eSIR_SUCCESS)
952 {
953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
954 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
955 goto handle_failure;
956 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700957 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
958 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700959 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
960 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
961 tlvStruct->length = sizeof(tANI_U32);
962 configDataValue = (tANI_U32 *)(tlvStruct + 1);
963 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
964 configDataValue ) != eSIR_SUCCESS)
965 {
966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
967 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
968 goto handle_failure;
969 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700970 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
971 + sizeof(tHalCfg) + tlvStruct->length);
972
973 /* QWLAN_HAL_CFG_STATS_PERIOD */
974 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
975 tlvStruct->length = sizeof(tANI_U32);
976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
977 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
978 eSIR_SUCCESS)
979 {
980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
981 "Failed to get value for WNI_CFG_STATS_PERIOD");
982 goto handle_failure;
983 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700984 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
985 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
987 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
988 tlvStruct->length = sizeof(tANI_U32);
989 configDataValue = (tANI_U32 *)(tlvStruct + 1);
990 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
991 eSIR_SUCCESS)
992 {
993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
994 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
995 goto handle_failure;
996 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700997 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
998 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700999 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1000 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1001 tlvStruct->length = sizeof(tANI_U32);
1002 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1003 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1004 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001005 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1006 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001007 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1008 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1009 tlvStruct->length = sizeof(tANI_U32);
1010 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1011 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1012 != eSIR_SUCCESS)
1013 {
1014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1015 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1016 goto handle_failure;
1017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001018 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1019 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001020 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1021 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1022 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1023 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1024 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1025 &strLength) != eSIR_SUCCESS)
1026 {
1027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1028 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1029 goto handle_failure;
1030 }
1031 tlvStruct->length = strLength;
1032 /* calculate the pad bytes to have the CFG in aligned format */
1033 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1034 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001035 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1036 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001037 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1038 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1039 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1040 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1041 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1042 &strLength) != eSIR_SUCCESS)
1043 {
1044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1045 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1046 goto handle_failure;
1047 }
1048 tlvStruct->length = strLength;
1049 /* calculate the pad bytes to have the CFG in aligned format */
1050 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1051 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1053 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1055 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1056 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1058 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1059 &strLength) != eSIR_SUCCESS)
1060 {
1061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1062 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1063 goto handle_failure;
1064 }
1065 tlvStruct->length = strLength;
1066 /* calculate the pad bytes to have the CFG in aligned format */
1067 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1068 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1070 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1072 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1073 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1075 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1076 &strLength) != eSIR_SUCCESS)
1077 {
1078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1079 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1080 goto handle_failure;
1081 }
1082 tlvStruct->length = strLength;
1083 /* calculate the pad bytes to have the CFG in aligned format */
1084 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1085 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001086 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1087 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001088 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1089 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1090 tlvStruct->length = sizeof(tANI_U32);
1091 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1092 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1093 != eSIR_SUCCESS)
1094 {
1095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1096 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1097 goto handle_failure;
1098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001099 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1100 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001101 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1102 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1103 tlvStruct->length = sizeof(tANI_U32);
1104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1105 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1106 != eSIR_SUCCESS)
1107 {
1108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1109 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1110 goto handle_failure;
1111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1113 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001114 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1115 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1116 tlvStruct->length = sizeof(tANI_U32);
1117 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1118 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1119 != eSIR_SUCCESS)
1120 {
1121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1122 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1123 goto handle_failure;
1124 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001125 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1126 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001127 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1128 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1129 tlvStruct->length = sizeof(tANI_U32);
1130 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1131 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1132 != eSIR_SUCCESS)
1133 {
1134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1135 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1136 goto handle_failure;
1137 }
1138 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1139 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001140 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1141 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1142 tlvStruct->length = sizeof(tANI_U32);
1143 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1144 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1145 != eSIR_SUCCESS)
1146 {
1147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1148 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1149 goto handle_failure;
1150 }
1151 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1152 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001153 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1154 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1155 tlvStruct->length = sizeof(tANI_U32);
1156 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1157 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1158 != eSIR_SUCCESS)
1159 {
1160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1161 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1162 goto handle_failure;
1163 }
1164 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1165 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001166 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1167 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1168 tlvStruct->length = sizeof(tANI_U32);
1169 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1170 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1171 != eSIR_SUCCESS)
1172 {
1173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1174 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1175 goto handle_failure;
1176 }
1177 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1178 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001179 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1180 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1181 tlvStruct->length = sizeof(tANI_U32);
1182 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1183 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1184 != eSIR_SUCCESS)
1185 {
1186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1187 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1188 goto handle_failure;
1189 }
1190 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1191 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001192 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1193 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1194 tlvStruct->length = sizeof(tANI_U32);
1195 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1196 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1197 != eSIR_SUCCESS)
1198 {
1199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1200 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1201 goto handle_failure;
1202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001203 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1204 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001205 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1206 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1207 tlvStruct->length = sizeof(tANI_U32);
1208 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1209 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1210 != eSIR_SUCCESS)
1211 {
1212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1213 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1214 goto handle_failure;
1215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001216 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1217 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001218 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1219 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1220 tlvStruct->length = sizeof(tANI_U32);
1221 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1222 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1223 != eSIR_SUCCESS)
1224 {
1225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1226 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1227 goto handle_failure;
1228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001229 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1230 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001231 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1232 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1233 * into FW, so the parameters are added here.
1234 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1236 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1237 tlvStruct->length = sizeof(tANI_U32);
1238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1239 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1240 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1241 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001242 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1243 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1244 tlvStruct->length = sizeof(tANI_U32);
1245 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1246 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1247 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1248 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001249 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1250 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1251 tlvStruct->length = sizeof(tANI_U32);
1252 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1253 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1254 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1255 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001256 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1257 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1258 tlvStruct->length = sizeof(tANI_U32);
1259 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1260 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1262 + sizeof(tHalCfg) + tlvStruct->length) ;
1263
1264 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1265 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1266 tlvStruct->length = sizeof(tANI_U32);
1267 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1268 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1269 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1270 + sizeof(tHalCfg) + tlvStruct->length) ;
1271
1272 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1273 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1278 + sizeof(tHalCfg) + tlvStruct->length) ;
1279
1280 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
1287
1288 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1289 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1294 + sizeof(tHalCfg) + tlvStruct->length) ;
1295
1296 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1329 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
1335
1336 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1337 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1338 tlvStruct->length = sizeof(tANI_U32);
1339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1340 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
1343
1344 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1345 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1346 tlvStruct->length = sizeof(tANI_U32);
1347 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1348 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1349 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1350 + sizeof(tHalCfg) + tlvStruct->length) ;
1351
1352 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1353 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1354 tlvStruct->length = sizeof(tANI_U32);
1355 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1356 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1357 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1358 + sizeof(tHalCfg) + tlvStruct->length) ;
1359
1360 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001361 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1362 tlvStruct->length = sizeof(tANI_U32);
1363 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1364 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1365 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1366 wcnssCompiledApiVersion.minor,
1367 wcnssCompiledApiVersion.version,
1368 wcnssCompiledApiVersion.revision);
1369 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1370 + sizeof(tHalCfg) + tlvStruct->length) ;
1371
Jeff Johnsond13512a2012-07-17 11:42:19 -07001372 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1373 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1374 tlvStruct->length = sizeof(tANI_U32);
1375 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1376 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1377 configDataValue ) != eSIR_SUCCESS)
1378 {
1379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1380 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1381 goto handle_failure;
1382 }
1383
1384 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1385 + sizeof(tHalCfg) + tlvStruct->length) ;
1386 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1387 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1391 configDataValue ) != eSIR_SUCCESS)
1392 {
1393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1394 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1395 goto handle_failure;
1396 }
1397
1398 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1399 + sizeof(tHalCfg) + tlvStruct->length) ;
1400
1401 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1402 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1403 tlvStruct->length = sizeof(tANI_U32);
1404 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1405 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1406 != eSIR_SUCCESS)
1407 {
1408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1409 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1410 goto handle_failure;
1411 }
1412
1413 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1414 + sizeof(tHalCfg) + tlvStruct->length) ;
1415
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001416 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1417 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1418 tlvStruct->length = sizeof(tANI_U32);
1419 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1420 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1421 != eSIR_SUCCESS)
1422 {
1423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1424 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1425 goto handle_failure;
1426 }
1427
1428 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1429 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001430#ifdef WLAN_SOFTAP_VSTA_FEATURE
1431 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1435 != eSIR_SUCCESS)
1436 {
1437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1438 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1439 goto handle_failure;
1440 }
1441
1442 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1443 + sizeof(tHalCfg) + tlvStruct->length) ;
1444#endif
1445
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001446 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1447 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1448 tlvStruct->length = sizeof(tANI_U32);
1449 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1450
1451 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1452 != eSIR_SUCCESS)
1453 {
1454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1455 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1456 goto handle_failure;
1457 }
1458
1459 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1460 + sizeof(tHalCfg) + tlvStruct->length) ;
1461
Jeff Johnson295189b2012-06-20 16:38:30 -07001462 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001463#ifdef WLAN_DEBUG
1464 {
1465 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1467 "****** Dumping CFG TLV ***** ");
1468 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1469 {
1470 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1471 "%02x %02x %02x %02x %02x %02x %02x %02x",
1472 tlvStructStart[i],
1473 tlvStructStart[i+1],
1474 tlvStructStart[i+2],
1475 tlvStructStart[i+3],
1476 tlvStructStart[i+4],
1477 tlvStructStart[i+5],
1478 tlvStructStart[i+6],
1479 tlvStructStart[i+7]);
1480 }
1481 /* Dump the bytes in the last line*/
1482 for (; i < wdiStartParams->usConfigBufferLen; i++)
1483 {
1484 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1485 "%02x ",tlvStructStart[i]);
1486 }
1487 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1488 "**************************** ");
1489 }
1490#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001491 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001492handle_failure:
1493 vos_mem_free(configParam);
1494 return VOS_STATUS_E_FAILURE;
1495}
Jeff Johnson295189b2012-06-20 16:38:30 -07001496/*
1497 * FUNCTION: WDA_wdiCompleteCB
1498 * call the voss call back function
1499 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001500void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001501{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1503 tWDA_CbContext *wdaContext;
1504
1505 if(NULL == pWdaParams)
1506 {
1507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001508 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001509 VOS_ASSERT(0) ;
1510 return ;
1511 }
1512
1513 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1514
Jeff Johnson295189b2012-06-20 16:38:30 -07001515 if (NULL == wdaContext)
1516 {
1517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001518 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001519 return ;
1520 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001521
Jeff Johnson295189b2012-06-20 16:38:30 -07001522 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001523 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001524 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001526 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001527 vos_mem_free(pWdaParams);
1528
Jeff Johnson295189b2012-06-20 16:38:30 -07001529 if(WDI_STATUS_SUCCESS != status)
1530 {
1531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1532 "WDI stop callback returned failure" );
1533 VOS_ASSERT(0) ;
1534 }
1535 else
1536 {
1537 wdaContext->wdaState = WDA_STOP_STATE;
1538 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001539
Jeff Johnson295189b2012-06-20 16:38:30 -07001540 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001541 vos_WDAComplete_cback(wdaContext->pVosContext);
1542
Jeff Johnson295189b2012-06-20 16:38:30 -07001543 return ;
1544}
Jeff Johnson295189b2012-06-20 16:38:30 -07001545/*
1546 * FUNCTION: WDA_stop
1547 * call WDI_stop
1548 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001549VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1550{
1551 WDI_Status wdiStatus;
1552 VOS_STATUS status = VOS_STATUS_SUCCESS;
1553 WDI_StopReqParamsType *wdiStopReq;
1554 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001555 tWDA_ReqParams *pWdaParams ;
1556
Jeff Johnson295189b2012-06-20 16:38:30 -07001557 if (NULL == pWDA)
1558 {
1559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001560 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001561 VOS_ASSERT(0);
1562 return VOS_STATUS_E_FAILURE;
1563 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001564 if (pWDA->wdiFailed == true)
1565 {
1566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001567 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001568 return VOS_STATUS_E_ALREADY;
1569 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001570
Jeff Johnson295189b2012-06-20 16:38:30 -07001571 /* FTM mode stay START_STATE */
1572 if( (WDA_READY_STATE != pWDA->wdaState) &&
1573 (WDA_INIT_STATE != pWDA->wdaState) &&
1574 (WDA_START_STATE != pWDA->wdaState) )
1575 {
1576 VOS_ASSERT(0);
1577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001578 wdiStopReq = (WDI_StopReqParamsType *)
1579 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1580 if(NULL == wdiStopReq)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001584 VOS_ASSERT(0);
1585 return VOS_STATUS_E_NOMEM;
1586 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001587
Jeff Johnson295189b2012-06-20 16:38:30 -07001588 wdiStopReq->wdiStopReason = reason;
1589 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001590
1591 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1592 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001593 {
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 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001598 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001599 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001600
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001601 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1602 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001603 {
1604 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001605 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001606 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001607
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001608 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1609 pWdaParams->wdaMsgParam = NULL;
1610 pWdaParams->pWdaContext = pWDA;
1611
Jeff Johnson295189b2012-06-20 16:38:30 -07001612 /* call WDI stop */
1613 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001614 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1615
Jeff Johnson295189b2012-06-20 16:38:30 -07001616 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1621 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001622 status = VOS_STATUS_E_FAILURE;
1623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 return status;
1625}
Jeff Johnson295189b2012-06-20 16:38:30 -07001626/*
1627 * FUNCTION: WDA_close
1628 * call WDI_close and free the WDA context
1629 */
1630VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1631{
Jeff Johnson43971f52012-07-17 12:26:56 -07001632 VOS_STATUS status = VOS_STATUS_SUCCESS;
1633 WDI_Status wstatus;
1634 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001635 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001636 if (NULL == wdaContext)
1637 {
1638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001639 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001640 return VOS_STATUS_E_FAILURE;
1641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001642 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1643 (WDA_STOP_STATE != wdaContext->wdaState))
1644 {
1645 VOS_ASSERT(0);
1646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001647 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001648 wstatus = WDI_Close();
1649 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001650 {
1651 status = VOS_STATUS_E_FAILURE;
1652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001653 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001654 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001655 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1656 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "WDI Sync Event destroy failed - status = %d\n", status);
1660 status = VOS_STATUS_E_FAILURE;
1661 }
1662
Jeff Johnson43971f52012-07-17 12:26:56 -07001663 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001664 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001665 {
1666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1667 "VOS Event destroy failed - status = %d\n", status);
1668 status = VOS_STATUS_E_FAILURE;
1669 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001670 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001671 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001672 {
1673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "VOS Event destroy failed - status = %d\n", status);
1675 status = VOS_STATUS_E_FAILURE;
1676 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001677 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001678 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001679 {
1680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1681 "VOS Event destroy failed - status = %d\n", status);
1682 status = VOS_STATUS_E_FAILURE;
1683 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001684 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001685 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001686 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001687 {
1688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1689 "error in WDA close " );
1690 status = VOS_STATUS_E_FAILURE;
1691 }
1692 return status;
1693}
Jeff Johnson295189b2012-06-20 16:38:30 -07001694/*
1695 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1696 * returns 1 if the compiled version is greater than or equal to the input version
1697 */
1698
1699uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1700{
1701 VOS_STATUS status = VOS_STATUS_SUCCESS;
1702 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1703 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001704 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001705 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1706 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1707 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1708 (compiledVersion.revision >= revision)))
1709 return 1;
1710 else
1711 return 0;
1712}
Jeff Johnson295189b2012-06-20 16:38:30 -07001713/*
1714 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1715 * returns 1 if the compiled version is greater than or equal to the input version
1716 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001717uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1718{
1719 VOS_STATUS status = VOS_STATUS_SUCCESS;
1720 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1721 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001722 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001723 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1724 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1725 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1726 (reportedVersion.revision >= revision)))
1727 return 1;
1728 else
1729 return 0;
1730}
Jeff Johnson295189b2012-06-20 16:38:30 -07001731/*
1732 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1733 * Returns the version of the WCNSS WLAN API with which the HOST
1734 * device driver was compiled
1735 */
1736VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1737 tSirVersionType *pVersion)
1738{
1739 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001740 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001741 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001742 if ((NULL == pvosGCtx) || (NULL == pVersion))
1743 {
1744 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001745 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001746 VOS_ASSERT(0);
1747 return VOS_STATUS_E_FAILURE;
1748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001749 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1750 if (NULL == pWDA )
1751 {
1752 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001753 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001754 VOS_ASSERT(0);
1755 return VOS_STATUS_E_FAILURE;
1756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001757 *pVersion = pWDA->wcnssWlanCompiledVersion;
1758 return VOS_STATUS_SUCCESS;
1759}
Jeff Johnson295189b2012-06-20 16:38:30 -07001760/*
1761 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1762 * Returns the version of the WCNSS WLAN API with which the WCNSS
1763 * device driver was compiled
1764 */
1765VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1766 tSirVersionType *pVersion)
1767{
1768 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001770 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001771 if ((NULL == pvosGCtx) || (NULL == pVersion))
1772 {
1773 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001774 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001775 VOS_ASSERT(0);
1776 return VOS_STATUS_E_FAILURE;
1777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001778 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1779 if (NULL == pWDA )
1780 {
1781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001782 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001783 VOS_ASSERT(0);
1784 return VOS_STATUS_E_FAILURE;
1785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001786 *pVersion = pWDA->wcnssWlanReportedVersion;
1787 return VOS_STATUS_SUCCESS;
1788}
Jeff Johnson295189b2012-06-20 16:38:30 -07001789/*
1790 * FUNCTION: WDA_GetWcnssSoftwareVersion
1791 * Returns the WCNSS Software version string
1792 */
1793VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1794 tANI_U8 *pVersion,
1795 tANI_U32 versionBufferSize)
1796{
1797 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001799 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001800 if ((NULL == pvosGCtx) || (NULL == pVersion))
1801 {
1802 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001803 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001804 VOS_ASSERT(0);
1805 return VOS_STATUS_E_FAILURE;
1806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001807 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1808 if (NULL == pWDA )
1809 {
1810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001811 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001812 VOS_ASSERT(0);
1813 return VOS_STATUS_E_FAILURE;
1814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001815 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1816 return VOS_STATUS_SUCCESS;
1817}
Jeff Johnson295189b2012-06-20 16:38:30 -07001818/*
1819 * FUNCTION: WDA_GetWcnssHardwareVersion
1820 * Returns the WCNSS Hardware version string
1821 */
1822VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1823 tANI_U8 *pVersion,
1824 tANI_U32 versionBufferSize)
1825{
1826 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001828 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001829 if ((NULL == pvosGCtx) || (NULL == pVersion))
1830 {
1831 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001832 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001833 VOS_ASSERT(0);
1834 return VOS_STATUS_E_FAILURE;
1835 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001836 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1837 if (NULL == pWDA )
1838 {
1839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001840 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001841 VOS_ASSERT(0);
1842 return VOS_STATUS_E_FAILURE;
1843 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001844 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1845 return VOS_STATUS_SUCCESS;
1846}
Jeff Johnson295189b2012-06-20 16:38:30 -07001847/*
1848 * FUNCTION: WDA_WniCfgDnld
1849 * Trigger CFG Download
1850 */
1851VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1852{
1853 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001854 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001855 v_VOID_t *pFileImage = NULL;
1856 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001857 v_VOID_t *pCfgBinary = NULL;
1858 v_SIZE_t cbCfgBinarySize = 0;
1859
1860 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 if (NULL == pMac )
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001864 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001865 VOS_ASSERT(0);
1866 return VOS_STATUS_E_FAILURE;
1867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001868 /* get the number of bytes in the CFG Binary... */
1869 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1870 &cbFileImageSize );
1871 if ( VOS_STATUS_E_NOMEM != vosStatus )
1872 {
1873 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1874 "Error obtaining binary size" );
1875 goto fail;
1876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001877 // malloc a buffer to read in the Configuration binary file.
1878 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001879 if ( NULL == pFileImage )
1880 {
1881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1882 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1883 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001884 vosStatus = VOS_STATUS_E_NOMEM;
1885 goto fail;
1886 }
1887
1888 /* Get the entire CFG file image... */
1889 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1890 &cbFileImageSize );
1891 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1892 {
1893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1894 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1895 cbFileImageSize );
1896 goto fail;
1897 }
1898
1899 /*
1900 * Validate the binary image. This function will return a pointer
1901 * and length where the CFG binary is located within the binary image file.
1902 */
1903 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1904 &pCfgBinary, &cbCfgBinarySize );
1905 if ( VOS_FALSE == bStatus )
1906 {
1907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1908 "Error: Cannot find STA CFG in binary image file" );
1909 vosStatus = VOS_STATUS_E_FAILURE;
1910 goto fail;
1911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001912 /*
1913 * TODO: call the config download function
1914 * for now calling the existing cfg download API
1915 */
1916 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001917 if( pFileImage != NULL )
1918 {
1919 vos_mem_free( pFileImage );
1920 }
1921 return vosStatus;
1922
1923fail:
1924 if(pCfgBinary != NULL)
1925 vos_mem_free( pFileImage );
1926
1927 return vosStatus;
1928}
Jeff Johnson295189b2012-06-20 16:38:30 -07001929/* -----------------------------------------------------------------
1930 * WDI interface
1931 * -----------------------------------------------------------------
1932 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001933/*
1934 * FUNCTION: WDA_suspendDataTxCallback
1935 * call back function called from TL after suspend Transmission
1936 */
1937VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1938 v_U8_t* ucSTAId,
1939 VOS_STATUS vosStatus)
1940{
1941 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001943 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001944 if (NULL == pWDA )
1945 {
1946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001947 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001948 VOS_ASSERT(0);
1949 return VOS_STATUS_E_FAILURE;
1950 }
1951 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1952 {
1953 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1954 }
1955 else
1956 {
1957 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001959 /* Trigger the event to bring the WDA TL suspend function to come
1960 * out of wait*/
1961 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1962 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1963 {
1964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1965 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001967 /* If TL suspended had timedout before this callback was called, resume back
1968 * TL.*/
1969 if (pWDA->txSuspendTimedOut)
1970 {
1971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1972 "Late TLSuspendCallback, resuming TL back again\n");
1973 WDA_ResumeDataTx(pWDA);
1974 pWDA->txSuspendTimedOut = FALSE;
1975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001976 return VOS_STATUS_SUCCESS;
1977}
Jeff Johnson295189b2012-06-20 16:38:30 -07001978/*
1979 * FUNCTION: WDA_suspendDataTx
1980 * Update TL to suspend the data Transmission
1981 */
1982VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1983{
1984 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1985 tANI_U8 eventIdx = 0;
1986 tANI_U8 ucSTAId = 0;
1987
1988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001989 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001990 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001991 if (pWDA->txSuspendTimedOut)
1992 {
1993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1994 "TL suspend timedout previously, CB not called yet\n");
1995 return status;
1996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001997 /* Reset the event to be not signalled */
1998 status = vos_event_reset(&pWDA->suspendDataTxEvent);
1999 if(!VOS_IS_STATUS_SUCCESS(status))
2000 {
2001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2002 "VOS Event reset failed - status = %d\n",status);
2003 return VOS_STATUS_E_FAILURE;
2004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002005 /*Indicate TL to suspend transmission for all Sta Id */
2006 ucSTAId = WLAN_ALL_STA;
2007 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
2008 WDA_SuspendDataTxCallback);
2009 if(status != VOS_STATUS_SUCCESS)
2010 {
2011 return status;
2012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 /* Wait for the event to be set by the TL, to get the response of
2014 * suspending the TX queues, this event should be set by the Callback
2015 * function called by TL*/
2016 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2017 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2018 if(!VOS_IS_STATUS_SUCCESS(status))
2019 {
2020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2021 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002022 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002023 /* Set this flag to true when TL suspend times out, so that when TL
2024 * suspend eventually happens and calls the callback, TL can be resumed
2025 * right away by looking at this flag when true.*/
2026 pWDA->txSuspendTimedOut = TRUE;
2027 }
2028 else
2029 {
2030 pWDA->txSuspendTimedOut = FALSE;
2031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002032 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2033 {
2034 status = VOS_STATUS_SUCCESS;
2035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002036 return status;
2037}
Jeff Johnson295189b2012-06-20 16:38:30 -07002038/*
2039 * FUNCTION: WDA_resumeDataTx
2040 * Update TL to resume the data Transmission
2041 */
2042VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2043{
2044 VOS_STATUS status = VOS_STATUS_SUCCESS;
2045 tANI_U8 ucSTAId = 0;
2046
2047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002048 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002049 ucSTAId = WLAN_ALL_STA;
2050 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
2051 return status;
2052}
Jeff Johnson295189b2012-06-20 16:38:30 -07002053/*
2054 * FUNCTION: WDA_InitScanReqCallback
2055 * Trigger Init SCAN callback
2056 */
2057void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2058{
2059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2060 tWDA_CbContext *pWDA;
2061 tInitScanParams *pWDA_ScanParam ;
2062 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002064 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002065 if(NULL == pWdaParams)
2066 {
2067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002068 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002069 VOS_ASSERT(0) ;
2070 return ;
2071 }
2072 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2073 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002074 if(NULL == pWDA_ScanParam)
2075 {
2076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002077 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002078 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2080 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 return ;
2082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002083 if(WDI_STATUS_SUCCESS != wdiStatus)
2084 {
2085 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002086 if(VOS_STATUS_SUCCESS != status)
2087 {
2088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002089 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002090 }
2091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 /* free WDI command buffer */
2093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002094 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002095
Jeff Johnson295189b2012-06-20 16:38:30 -07002096
2097 /* assign status to scan params */
2098 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002099 /* send SCAN RSP message back to PE */
2100 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 return ;
2102}
2103
2104/*
2105 * FUNCTION: WDA_ProcessInitScanReq
2106 * Trigger Init SCAN in DAL
2107 */
2108VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2109 tInitScanParams *initScanParams)
2110{
2111 WDI_Status status = WDI_STATUS_SUCCESS ;
2112 WDI_InitScanReqParamsType *wdiInitScanParam =
2113 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2114 sizeof(WDI_InitScanReqParamsType)) ;
2115 tWDA_ReqParams *pWdaParams;
2116 tANI_U8 i = 0;
2117
2118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002119 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002120 if(NULL == wdiInitScanParam)
2121 {
2122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002123 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002124 VOS_ASSERT(0);
2125 return VOS_STATUS_E_NOMEM;
2126 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002127 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2128 if(NULL == pWdaParams)
2129 {
2130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002132 VOS_ASSERT(0);
2133 vos_mem_free(wdiInitScanParam);
2134 return VOS_STATUS_E_NOMEM;
2135 }
2136
2137 /* Copy init Scan params to WDI structure */
2138 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2139 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2140 sizeof(tSirMacAddr)) ;
2141 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2142 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2143 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
2144#ifdef WLAN_FEATURE_P2P
2145 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2146 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
2147#else
2148 wdiInitScanParam->wdiReqInfo.bUseNOA = 0;
2149 wdiInitScanParam->wdiReqInfo.scanDuration = 0;
2150#endif
2151 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2152 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002153 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2154 {
2155 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2156 initScanParams->scanEntry.bssIdx[i] ;
2157 }
2158
2159 /* if Frame length, copy macMgmtHdr or WDI structure */
2160 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2161 {
2162 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2163 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2164 }
2165 wdiInitScanParam->wdiReqStatusCB = NULL ;
2166
Jeff Johnson295189b2012-06-20 16:38:30 -07002167 /* Store Init Req pointer, as this will be used for response */
2168 pWdaParams->pWdaContext = pWDA;
2169 pWdaParams->wdaMsgParam = initScanParams;
2170 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 /* first try to suspend TX */
2172 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002173 if(WDI_STATUS_SUCCESS != status)
2174 {
2175 goto handleWdiFailure;
2176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002177 /* call DAL API to pass init scan request to DAL */
2178 status = WDI_InitScanReq(wdiInitScanParam,
2179 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 if(IS_WDI_STATUS_FAILURE(status))
2181 {
2182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2183 "error in WDA Init Scan, Resume Tx " );
2184 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 VOS_ASSERT(0) ;
2186
2187 goto handleWdiFailure;
2188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002190handleWdiFailure:
2191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2192 "Failure in WDI Api, free all the memory " );
2193 /* free WDI command buffer */
2194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2195 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 /* send Failure to PE */
2197 initScanParams->status = eSIR_FAILURE ;
2198 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 return CONVERT_WDI2VOS_STATUS(status) ;
2200}
2201
Jeff Johnson295189b2012-06-20 16:38:30 -07002202/*
2203 * FUNCTION: WDA_StartScanReqCallback
2204 * send Start SCAN RSP back to PE
2205 */
2206void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2207 void* pUserData)
2208{
2209 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2210 tWDA_CbContext *pWDA;
2211 tStartScanParams *pWDA_ScanParam;
2212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002213 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 if(NULL == pWdaParams)
2215 {
2216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002217 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 VOS_ASSERT(0) ;
2219 return ;
2220 }
2221 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2222 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002223 if(NULL == pWDA_ScanParam)
2224 {
2225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002226 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002228 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 return ;
2230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2232 {
2233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002234 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002236 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002237 return ;
2238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2240 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002241
Jeff Johnson295189b2012-06-20 16:38:30 -07002242
2243 /* assign status to scan params */
2244 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(pScanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 /* send SCAN RSP message back to PE */
2246 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 return ;
2248}
2249
Jeff Johnson295189b2012-06-20 16:38:30 -07002250/*
2251 * FUNCTION: WDA_ProcessStartScanReq
2252 * Trigger start SCAN in WDI
2253 */
2254VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2255 tStartScanParams *startScanParams)
2256{
2257 WDI_Status status = WDI_STATUS_SUCCESS;
2258 WDI_StartScanReqParamsType *wdiStartScanParams =
2259 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2260 sizeof(WDI_StartScanReqParamsType)) ;
2261 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002263 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 if(NULL == wdiStartScanParams)
2265 {
2266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002268 VOS_ASSERT(0);
2269 return VOS_STATUS_E_NOMEM;
2270 }
2271 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2272 if(NULL == pWdaParams)
2273 {
2274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002275 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 VOS_ASSERT(0);
2277 vos_mem_free(wdiStartScanParams);
2278 return VOS_STATUS_E_NOMEM;
2279 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002280 /* Copy init Scan params to WDI structure */
2281 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2282 wdiStartScanParams->wdiReqStatusCB = NULL ;
2283
Jeff Johnson295189b2012-06-20 16:38:30 -07002284 /* Store Init Req pointer, as this will be used for response */
2285 /* store Params pass it to WDI */
2286 pWdaParams->pWdaContext = pWDA;
2287 pWdaParams->wdaMsgParam = startScanParams;
2288 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 /* call DAL API to pass init scan request to DAL */
2290 status = WDI_StartScanReq(wdiStartScanParams,
2291 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002292 /* failure returned by WDI API */
2293 if(IS_WDI_STATUS_FAILURE(status))
2294 {
2295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2296 "Failure in Start Scan WDI API, free all the memory "
2297 "It should be due to previous abort scan." );
2298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2299 vos_mem_free(pWdaParams) ;
2300 startScanParams->status = eSIR_FAILURE ;
2301 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 return CONVERT_WDI2VOS_STATUS(status) ;
2304}
Jeff Johnson295189b2012-06-20 16:38:30 -07002305/*
2306 * FUNCTION: WDA_EndScanReqCallback
2307 * END SCAN callback
2308 */
2309void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2310{
2311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2312 tWDA_CbContext *pWDA;
2313 tEndScanParams *endScanParam;
2314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 if(NULL == pWdaParams)
2317 {
2318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002319 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 VOS_ASSERT(0) ;
2321 return ;
2322 }
2323 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2324 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 if(NULL == endScanParam)
2326 {
2327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002328 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2331 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 return ;
2333 }
2334
2335 /* Free WDI command buffer */
2336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2337 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002338 /* assign status to scan params */
2339 endScanParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002340 /* send response back to PE */
2341 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2342 return ;
2343}
2344
Jeff Johnson295189b2012-06-20 16:38:30 -07002345/*
2346 * FUNCTION: WDA_ProcessEndScanReq
2347 * Trigger END SCAN in WDI
2348 */
2349VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2350 tEndScanParams *endScanParams)
2351{
2352 WDI_Status status = WDI_STATUS_SUCCESS;
2353 WDI_EndScanReqParamsType *wdiEndScanParams =
2354 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2355 sizeof(WDI_EndScanReqParamsType)) ;
2356 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002358 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 if(NULL == wdiEndScanParams)
2360 {
2361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002362 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 VOS_ASSERT(0);
2364 return VOS_STATUS_E_NOMEM;
2365 }
2366 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2367 if(NULL == pWdaParams)
2368 {
2369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 VOS_ASSERT(0);
2372 vos_mem_free(wdiEndScanParams);
2373 return VOS_STATUS_E_NOMEM;
2374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002375 /* Copy init Scan params to WDI structure */
2376 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2377 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002378 /* Store Init Req pointer, as this will be used for response */
2379 /* store Params pass it to WDI */
2380 pWdaParams->pWdaContext = pWDA;
2381 pWdaParams->wdaMsgParam = endScanParams;
2382 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 /* call DAL API to pass init scan request to DAL */
2384 status = WDI_EndScanReq(wdiEndScanParams,
2385 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 if(IS_WDI_STATUS_FAILURE(status))
2387 {
2388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2389 "Failure in End Scan WDI API, free all the memory "
2390 "It should be due to previous abort scan." );
2391 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2392 vos_mem_free(pWdaParams) ;
2393 endScanParams->status = eSIR_FAILURE ;
2394 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 return CONVERT_WDI2VOS_STATUS(status) ;
2397}
Jeff Johnson295189b2012-06-20 16:38:30 -07002398/*
2399 * FUNCTION: WDA_FinishScanReqCallback
2400 * Trigger Finish SCAN callback
2401 */
2402void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2403{
2404 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2405 tWDA_CbContext *pWDA;
2406 tFinishScanParams *finishScanParam;
2407 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002409 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002410 if(NULL == pWdaParams)
2411 {
2412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002413 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 VOS_ASSERT(0) ;
2415 return ;
2416 }
2417
2418 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2419 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 if(NULL == finishScanParam)
2421 {
2422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002423 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2426 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002427 return ;
2428 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2430 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002431 /*
2432 * Now Resume TX, if we reached here means, TX is already suspended, we
2433 * have to resume it unconditionaly
2434 */
2435 status = WDA_ResumeDataTx(pWDA) ;
2436
2437 if(VOS_STATUS_SUCCESS != status)
2438 {
2439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002440 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002442 finishScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2444 return ;
2445}
Jeff Johnson295189b2012-06-20 16:38:30 -07002446/*
2447 * FUNCTION: WDA_ProcessFinshScanReq
2448 * Trigger Finish SCAN in WDI
2449 */
2450VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2451 tFinishScanParams *finishScanParams)
2452{
2453 WDI_Status status = WDI_STATUS_SUCCESS;
2454 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2455 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2456 sizeof(WDI_FinishScanReqParamsType)) ;
2457 tWDA_ReqParams *pWdaParams ;
2458 tANI_U8 i = 0;
2459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002460 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 if(NULL == wdiFinishScanParams)
2462 {
2463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002465 VOS_ASSERT(0);
2466 return VOS_STATUS_E_NOMEM;
2467 }
2468 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2469 if(NULL == pWdaParams)
2470 {
2471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 VOS_ASSERT(0);
2474 vos_mem_free(wdiFinishScanParams);
2475 return VOS_STATUS_E_NOMEM;
2476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 /* Copy init Scan params to WDI structure */
2478 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2479 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2480 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2482 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2483 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2484 finishScanParams->frameLength ;
2485 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2486 finishScanParams->currentOperChannel ;
2487 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2488 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2489 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2491 {
2492 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2493 finishScanParams->scanEntry.bssIdx[i] ;
2494 }
2495
2496
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 /* if Frame length, copy macMgmtHdr ro WDI structure */
2498 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2499 {
2500 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2501 &finishScanParams->macMgmtHdr,
2502 sizeof(WDI_MacMgmtHdr)) ;
2503 }
2504 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 /* Store Init Req pointer, as this will be used for response */
2506 /* store Params pass it to WDI */
2507 pWdaParams->pWdaContext = pWDA;
2508 pWdaParams->wdaMsgParam = finishScanParams;
2509 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 /* call DAL API to pass init scan request to DAL */
2511 status = WDI_FinishScanReq(wdiFinishScanParams,
2512 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002513
Jeff Johnson295189b2012-06-20 16:38:30 -07002514
2515 /*
2516 * WDI API returns failure..
2517 */
2518 if(IS_WDI_STATUS_FAILURE( status))
2519 {
2520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2521 "Failure in Finish Scan WDI API, free all the memory " );
2522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2523 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 finishScanParams->status = eSIR_FAILURE ;
2525 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002527 return CONVERT_WDI2VOS_STATUS(status) ;
2528}
Jeff Johnson295189b2012-06-20 16:38:30 -07002529/*---------------------------------------------------------------------
2530 * ASSOC API's
2531 *---------------------------------------------------------------------
2532 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002533/*
2534 * FUNCTION: WDA_JoinReqCallback
2535 * Trigger Init SCAN callback
2536 */
2537void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2538{
2539 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2540 tWDA_CbContext *pWDA;
2541 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002543 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 if(NULL == pWdaParams)
2545 {
2546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002547 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 VOS_ASSERT(0) ;
2549 return ;
2550 }
2551 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2552 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2554 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 /* reset macBSSID */
2556 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 /* reset macSTASelf */
2558 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 joinReqParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002560 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 return ;
2562}
Jeff Johnson295189b2012-06-20 16:38:30 -07002563/*
2564 * FUNCTION: WDA_ProcessJoinReq
2565 * Trigger Join REQ in WDI
2566 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002567VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2568 tSwitchChannelParams* joinReqParam)
2569{
2570 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 WDI_JoinReqParamsType *wdiJoinReqParam =
2572 (WDI_JoinReqParamsType *)vos_mem_malloc(
2573 sizeof(WDI_JoinReqParamsType)) ;
2574 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002576 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 if(NULL == wdiJoinReqParam)
2578 {
2579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002582 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 return VOS_STATUS_E_NOMEM;
2584 }
2585 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2586 if(NULL == pWdaParams)
2587 {
2588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 VOS_ASSERT(0);
2591 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002592 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002593 return VOS_STATUS_E_NOMEM;
2594 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002595
2596 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2597 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2598 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2599 {
2600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2601 "%s: received join request when BSSID or self-STA is NULL "
2602 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002603 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002604 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2605 VOS_ASSERT(0);
2606 vos_mem_free(wdiJoinReqParam);
2607 vos_mem_free(pWdaParams);
2608 joinReqParam->status = eSIR_FAILURE ;
2609 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2610 return VOS_STATUS_E_INVAL;
2611 }
2612
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 /* copy the BSSID for pWDA */
2614 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2615 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2617 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2619 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002620#ifdef WLAN_FEATURE_VOWIFI
2621 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2622 joinReqParam->maxTxPower ;
2623#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2625 joinReqParam->localPowerConstraint ;
2626#endif
2627 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2628 joinReqParam->secondaryChannelOffset ;
2629 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2630
2631 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 /* Store Init Req pointer, as this will be used for response */
2633 /* store Params pass it to WDI */
2634 pWdaParams->pWdaContext = pWDA;
2635 pWdaParams->wdaMsgParam = joinReqParam;
2636 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002637 status = WDI_JoinReq(wdiJoinReqParam,
2638 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 if(IS_WDI_STATUS_FAILURE(status))
2640 {
2641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2642 "Failure in Join WDI API, free all the memory " );
2643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2644 vos_mem_free(pWdaParams) ;
2645 joinReqParam->status = eSIR_FAILURE ;
2646 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 return CONVERT_WDI2VOS_STATUS(status) ;
2649}
Jeff Johnson295189b2012-06-20 16:38:30 -07002650/*
2651 * FUNCTION: WDA_SwitchChannelReqCallback
2652 * send Switch channel RSP back to PE
2653 */
2654void WDA_SwitchChannelReqCallback(
2655 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2656{
2657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2658 tWDA_CbContext *pWDA;
2659 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002661 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 if(NULL == pWdaParams)
2663 {
2664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002665 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 VOS_ASSERT(0) ;
2667 return ;
2668 }
2669 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2670 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2671
2672#ifdef WLAN_FEATURE_VOWIFI
2673 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2674#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2676 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 pSwitchChanParams->status =
2678 CONVERT_WDI2SIR_STATUS(wdiSwitchChanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002680 return ;
2681}
Jeff Johnson295189b2012-06-20 16:38:30 -07002682/*
2683 * FUNCTION: WDA_ProcessChannelSwitchReq
2684 * Request to WDI to switch channel REQ params.
2685 */
2686VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2687 tSwitchChannelParams *pSwitchChanParams)
2688{
2689 WDI_Status status = WDI_STATUS_SUCCESS ;
2690 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2691 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2692 sizeof(WDI_SwitchChReqParamsType)) ;
2693 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002695 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 if(NULL == wdiSwitchChanParam)
2697 {
2698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002699 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 VOS_ASSERT(0);
2701 return VOS_STATUS_E_NOMEM;
2702 }
2703 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2704 if(NULL == pWdaParams)
2705 {
2706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 VOS_ASSERT(0);
2709 vos_mem_free(wdiSwitchChanParam);
2710 return VOS_STATUS_E_NOMEM;
2711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2713#ifndef WLAN_FEATURE_VOWIFI
2714 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2715 pSwitchChanParams->localPowerConstraint;
2716#endif
2717 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2718 pSwitchChanParams->secondaryChannelOffset;
2719 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 /* Store req pointer, as this will be used for response */
2721 /* store Params pass it to WDI */
2722 pWdaParams->pWdaContext = pWDA;
2723 pWdaParams->wdaMsgParam = pSwitchChanParams;
2724 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002725#ifdef WLAN_FEATURE_VOWIFI
2726 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2727 = pSwitchChanParams->maxTxPower;
2728 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2729 pSwitchChanParams ->selfStaMacAddr,
2730 sizeof(tSirMacAddr));
2731#endif
2732 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2733 pSwitchChanParams->bssId,
2734 sizeof(tSirMacAddr));
2735
2736 status = WDI_SwitchChReq(wdiSwitchChanParam,
2737 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 if(IS_WDI_STATUS_FAILURE(status))
2739 {
2740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2741 "Failure in process channel switch Req WDI API, free all the memory " );
2742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2743 vos_mem_free(pWdaParams) ;
2744 pSwitchChanParams->status = eSIR_FAILURE ;
2745 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 return CONVERT_WDI2VOS_STATUS(status) ;
2748}
Jeff Johnson295189b2012-06-20 16:38:30 -07002749/*
2750 * FUNCTION: WDA_ConfigBssReqCallback
2751 * config BSS Req Callback, called by WDI
2752 */
2753void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2754 ,void* pUserData)
2755{
2756 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2757 tWDA_CbContext *pWDA;
2758 tAddBssParams *configBssReqParam;
2759 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002761 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 if(NULL == pWdaParams)
2763 {
2764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002765 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002766 VOS_ASSERT(0) ;
2767 return ;
2768 }
2769 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2770 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2771 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 configBssReqParam->status =
2773 CONVERT_WDI2SIR_STATUS(wdiConfigBssRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2775 {
2776 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2777 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2779 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2780 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2781
2782 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2783 {
2784 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2785 {
2786 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2787 staConfigBssParam->staType = STA_ENTRY_BSSID;
2788 }
2789 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2790 (staConfigBssParam->staType == STA_ENTRY_SELF))
2791 {
2792 /* This is the 1st add BSS Req for the BTAMP STA */
2793 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2794 staConfigBssParam->staType = STA_ENTRY_BSSID;
2795 }
2796 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2797 (staConfigBssParam->staType == STA_ENTRY_PEER))
2798 {
2799 /* This is the 2nd ADD BSS Request that is sent
2800 * on the BTAMP STA side. The Sta type is
2801 * set to STA_ENTRY_PEER here.*/
2802 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2803 }
2804 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2805 (staConfigBssParam->staType == STA_ENTRY_SELF))
2806 {
2807 /* statype is already set by PE.
2808 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2809 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2810 staConfigBssParam->staType = STA_ENTRY_BSSID;
2811 }
2812 else
2813 {
2814 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2815 staConfigBssParam->staType = STA_ENTRY_PEER;
2816 }
2817 }
2818 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2819 {
2820 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2821 staConfigBssParam->staType = STA_ENTRY_SELF;
2822 }
2823 else
2824 {
2825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2826 "Invalid operation mode specified");
2827 VOS_ASSERT(0);
2828 }
2829
2830 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2835 sizeof(tSirMacAddr));
2836 staConfigBssParam->txChannelWidthSet =
2837 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002838 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2839 staConfigBssParam->htCapable)
2840 {
2841 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2842 wdiConfigBssRsp->ucBSSIdx;
2843 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2844 WDA_VALID_STA_INDEX ;
2845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2847 wdiConfigBssRsp->ucBSSIdx,
2848 wdiConfigBssRsp->ucSTAIdx))
2849 {
2850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002851 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 VOS_ASSERT(0) ;
2853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2855 {
2856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002857 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 VOS_ASSERT(0) ;
2859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002860#ifdef WLAN_FEATURE_VOWIFI
2861 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2862#endif
2863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2865 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002866 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002867 return ;
2868}
Jeff Johnson295189b2012-06-20 16:38:30 -07002869/*
2870 * FUNCTION: WDA_UpdateEdcaParamsForAC
2871 * Update WDI EDCA params with PE edca params
2872 */
2873void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2874 WDI_EdcaParamRecord *wdiEdcaParam,
2875 tSirMacEdcaParamRecord *macEdcaParam)
2876{
2877 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2878 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2879 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2880 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2881 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2882 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2883}
Jeff Johnson295189b2012-06-20 16:38:30 -07002884/*
2885 * FUNCTION: WDA_ProcessConfigBssReq
2886 * Configure BSS before starting Assoc with AP
2887 */
2888VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2889 tAddBssParams* configBssReqParam)
2890{
2891 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2893 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2894 sizeof(WDI_ConfigBSSReqParamsType)) ;
2895 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002897 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 if(NULL == wdiConfigBssReqParam)
2899 {
2900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002901 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 VOS_ASSERT(0);
2903 return VOS_STATUS_E_NOMEM;
2904 }
2905 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2906 if(NULL == pWdaParams)
2907 {
2908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 VOS_ASSERT(0);
2911 vos_mem_free(wdiConfigBssReqParam);
2912 return VOS_STATUS_E_NOMEM;
2913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002915 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2916 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 /* Store Init Req pointer, as this will be used for response */
2918 /* store Params pass it to WDI */
2919 pWdaParams->pWdaContext = pWDA;
2920 pWdaParams->wdaMsgParam = configBssReqParam;
2921 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2923 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 if(IS_WDI_STATUS_FAILURE(status))
2925 {
2926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2927 "Failure in Config BSS WDI API, free all the memory " );
2928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2929 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 return CONVERT_WDI2VOS_STATUS(status) ;
2934}
Jeff Johnson295189b2012-06-20 16:38:30 -07002935#ifdef ENABLE_HAL_COMBINED_MESSAGES
2936/*
2937 * FUNCTION: WDA_PostAssocReqCallback
2938 * Post ASSOC req callback, send RSP back to PE
2939 */
2940void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2941 void* pUserData)
2942{
2943 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2944 tPostAssocParams *postAssocReqParam =
2945 (tPostAssocParams *)pWDA->wdaMsgParam ;
2946 /*STA context within the BSS Params*/
2947 tAddStaParams *staPostAssocParam =
2948 &postAssocReqParam->addBssParams.staContext ;
2949 /*STA Params for self STA*/
2950 tAddStaParams *selfStaPostAssocParam =
2951 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002954 postAssocReqParam->status =
2955 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2957 {
2958 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2959 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2960 sizeof(tSirMacAddr)) ;
2961 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2962 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2963 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2965 }
2966 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2967 pWDA->wdaWdiApiMsgParam = NULL;
2968 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 return ;
2971}
Jeff Johnson295189b2012-06-20 16:38:30 -07002972/*
2973 * FUNCTION: WDA_ProcessPostAssocReq
2974 * Trigger POST ASSOC processing in WDI
2975 */
2976VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2977 tPostAssocParams *postAssocReqParam)
2978{
Jeff Johnson295189b2012-06-20 16:38:30 -07002979 WDI_Status status = WDI_STATUS_SUCCESS ;
2980
2981 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2982 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2983 sizeof(WDI_PostAssocReqParamsType)) ;
2984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002985 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002986
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 if(NULL == wdiPostAssocReqParam)
2988 {
2989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002990 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 VOS_ASSERT(0);
2992 return VOS_STATUS_E_NOMEM;
2993 }
2994
2995 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
2996 {
2997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002998 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 VOS_ASSERT(0);
3000 return VOS_STATUS_E_FAILURE;
3001 }
3002
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 /* update BSS params into WDI structure */
3004 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3005 &postAssocReqParam->addBssParams) ;
3006 /* update STA params into WDI structure */
3007 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3008 &postAssocReqParam->addStaParams) ;
3009
3010 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3011 postAssocReqParam->addBssParams.highPerformance;
3012 WDA_UpdateEdcaParamsForAC(pWDA,
3013 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3014 &postAssocReqParam->addBssParams.acbe);
3015 WDA_UpdateEdcaParamsForAC(pWDA,
3016 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3017 &postAssocReqParam->addBssParams.acbk);
3018 WDA_UpdateEdcaParamsForAC(pWDA,
3019 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3020 &postAssocReqParam->addBssParams.acvi);
3021 WDA_UpdateEdcaParamsForAC(pWDA,
3022 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3023 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 /* Store Init Req pointer, as this will be used for response */
3025 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 /* store Params pass it to WDI */
3027 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3029 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 if(IS_WDI_STATUS_FAILURE(status))
3031 {
3032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3033 "Failure in Post Assoc WDI API, free all the memory " );
3034 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3035 pWDA->wdaWdiApiMsgParam = NULL;
3036 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 return CONVERT_WDI2VOS_STATUS(status) ;
3041}
3042#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003043/*
3044 * FUNCTION: WDA_AddStaReqCallback
3045 * ADD STA req callback, send RSP back to PE
3046 */
3047void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3048 void* pUserData)
3049{
3050 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3051 tWDA_CbContext *pWDA;
3052 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003054 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 if(NULL == pWdaParams)
3056 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 VOS_ASSERT(0) ;
3059 return ;
3060 }
3061 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3062 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 addStaReqParam->status =
3064 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3066 {
3067 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3068 /*TODO: UMAC structure doesn't have these fields*/
3069 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3070 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3071 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3072 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3073 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3074 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003075#ifdef FEATURE_WLAN_TDLS
3076 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3077 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3078#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003079 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003080#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003081 {
3082 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3083 wdiConfigStaRsp->ucBssIdx;
3084 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3085 WDA_VALID_STA_INDEX ;
3086 }
3087 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3088 {
3089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003090 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 VOS_ASSERT(0) ;
3092 return ;
3093 }
3094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3096 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003098 return ;
3099}
Jeff Johnson295189b2012-06-20 16:38:30 -07003100/*
3101 * FUNCTION: WDA_ConfigStaReq
3102 * Trigger Config STA processing in WDI
3103 */
3104VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3105 tAddStaParams *addStaReqParam)
3106{
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003108 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3109 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3110 sizeof(WDI_ConfigSTAReqParamsType)) ;
3111 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003113 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 if(NULL == wdiConfigStaReqParam)
3115 {
3116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 VOS_ASSERT(0);
3119 return VOS_STATUS_E_NOMEM;
3120 }
3121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3122 if(NULL == pWdaParams)
3123 {
3124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 VOS_ASSERT(0);
3127 vos_mem_free(wdiConfigStaReqParam);
3128 return VOS_STATUS_E_NOMEM;
3129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 /* update STA params into WDI structure */
3132 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3133 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003134 /* Store Init Req pointer, as this will be used for response */
3135 /* store Params pass it to WDI */
3136 pWdaParams->pWdaContext = pWDA;
3137 pWdaParams->wdaMsgParam = addStaReqParam;
3138 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3140 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 if(IS_WDI_STATUS_FAILURE(status))
3142 {
3143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3144 "Failure in Config STA WDI API, free all the memory " );
3145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3146 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 return CONVERT_WDI2VOS_STATUS(status) ;
3151}
Jeff Johnson295189b2012-06-20 16:38:30 -07003152/*
3153 * FUNCTION: WDA_DelBSSReqCallback
3154 * Dens DEL BSS RSP back to PE
3155 */
3156void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3157 void* pUserData)
3158{
3159 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3160 tWDA_CbContext *pWDA;
3161 tDeleteBssParams *delBssReqParam;
3162 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003164 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 if(NULL == pWdaParams)
3166 {
3167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003168 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 VOS_ASSERT(0) ;
3170 return ;
3171 }
3172 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3173 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3176 {
3177 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3178 sizeof(tSirMacAddr)) ;
3179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3181 {
3182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003183 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 VOS_ASSERT(0) ;
3185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3187 {
3188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003189 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 VOS_ASSERT(0) ;
3191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3193 {
3194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003195 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003196 VOS_ASSERT(0) ;
3197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3199 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 /* reset the the system role*/
3201 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3202
3203 /* Reset the BA related information */
3204 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3205 {
3206 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3207 {
3208 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3209 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3210 /* Reset framesTxed counters here */
3211 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3212 {
3213 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3214 }
3215 }
3216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 return ;
3219}
3220
Jeff Johnson295189b2012-06-20 16:38:30 -07003221/*
3222 * FUNCTION: WDA_ProcessDelBssReq
3223 * Init DEL BSS req with WDI
3224 */
3225VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3226 tDeleteBssParams *delBssParam)
3227{
3228 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3230 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3231 sizeof(WDI_DelBSSReqParamsType)) ;
3232 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003234 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003235 if(NULL == wdiDelBssReqParam)
3236 {
3237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 VOS_ASSERT(0);
3240 return VOS_STATUS_E_NOMEM;
3241 }
3242 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3243 if(NULL == pWdaParams)
3244 {
3245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003247 VOS_ASSERT(0);
3248 vos_mem_free(wdiDelBssReqParam);
3249 return VOS_STATUS_E_NOMEM;
3250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3252 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3253
3254 /* Store Init Req pointer, as this will be used for response */
3255 /* store Params pass it to WDI */
3256 pWdaParams->pWdaContext = pWDA;
3257 pWdaParams->wdaMsgParam = delBssParam;
3258 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 status = WDI_DelBSSReq(wdiDelBssReqParam,
3260 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 if(IS_WDI_STATUS_FAILURE(status))
3262 {
3263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3264 "Failure in Del BSS WDI API, free all the memory " );
3265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3266 vos_mem_free(pWdaParams) ;
3267 delBssParam->status = eSIR_FAILURE ;
3268 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3269 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 return CONVERT_WDI2VOS_STATUS(status) ;
3271}
Jeff Johnson295189b2012-06-20 16:38:30 -07003272/*
3273 * FUNCTION: WDA_DelSTAReqCallback
3274 * Dens DEL STA RSP back to PE
3275 */
3276void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3277 void* pUserData)
3278{
3279 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3280 tWDA_CbContext *pWDA;
3281 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003283 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 if(NULL == pWdaParams)
3285 {
3286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003287 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 VOS_ASSERT(0) ;
3289 return ;
3290 }
3291 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3292 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003294 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3295 {
3296 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3297 {
3298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003299 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_ASSERT(0) ;
3301 }
3302 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3303 }
3304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3305 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 /*Reset the BA information corresponding to this STAIdx */
3307 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3308 WDA_INVALID_STA_INDEX;
3309 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3310
3311 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 return ;
3313}
Jeff Johnson295189b2012-06-20 16:38:30 -07003314/*
3315 * FUNCTION: WDA_ProcessDelStaReq
3316 * Init DEL STA req with WDI
3317 */
3318VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3319 tDeleteStaParams *delStaParam)
3320{
3321 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003322 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3323 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3324 sizeof(WDI_DelSTAReqParamsType)) ;
3325 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003327 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 if(NULL == wdiDelStaReqParam)
3329 {
3330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003331 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 VOS_ASSERT(0);
3333 return VOS_STATUS_E_NOMEM;
3334 }
3335 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3336 if(NULL == pWdaParams)
3337 {
3338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 VOS_ASSERT(0);
3341 vos_mem_free(wdiDelStaReqParam);
3342 return VOS_STATUS_E_NOMEM;
3343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3345 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 /* Store Init Req pointer, as this will be used for response */
3347 /* store Params pass it to WDI */
3348 pWdaParams->pWdaContext = pWDA;
3349 pWdaParams->wdaMsgParam = delStaParam;
3350 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 status = WDI_DelSTAReq(wdiDelStaReqParam,
3352 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 if(IS_WDI_STATUS_FAILURE(status))
3354 {
3355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3356 "Failure in Del STA WDI API, free all the memory status = %d",
3357 status );
3358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3359 vos_mem_free(pWdaParams) ;
3360 delStaParam->status = eSIR_FAILURE ;
3361 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 return CONVERT_WDI2VOS_STATUS(status) ;
3364}
Jeff Johnson295189b2012-06-20 16:38:30 -07003365void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3366{
3367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3368 tWDA_CbContext *pWDA;
3369 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003371 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003372 if(NULL == pWdaParams)
3373 {
3374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003375 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003376 VOS_ASSERT(0) ;
3377 return ;
3378 }
3379 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3380 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3382 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3384 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3385 pwdiAddSTASelfRsp->macSelfSta,
3386 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 return ;
3389}
Jeff Johnson295189b2012-06-20 16:38:30 -07003390/*
3391 * FUNCTION: WDA_ProcessAddStaSelfReq
3392 *
3393 */
3394VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3395{
3396 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003397 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3399 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3400 sizeof(WDI_AddSTASelfReqParamsType)) ;
3401 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003403 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003404 if( NULL == wdiAddStaSelfReq )
3405 {
3406 VOS_ASSERT( 0 );
3407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003408 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003409 return( VOS_STATUS_E_NOMEM );
3410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 if( NULL == pWdaParams )
3413 {
3414 VOS_ASSERT( 0 );
3415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003416 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 vos_mem_free(wdiAddStaSelfReq) ;
3418 return( VOS_STATUS_E_NOMEM );
3419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3422 /* Store Init Req pointer, as this will be used for response */
3423 /* store Params pass it to WDI */
3424 pWdaParams->pWdaContext = pWDA;
3425 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3426 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003427 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003428
Jeff Johnson43971f52012-07-17 12:26:56 -07003429 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003430 {
3431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3432 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003433 wstatus );
3434 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3436 vos_mem_free(pWdaParams) ;
3437 pAddStaSelfReq->status = eSIR_FAILURE ;
3438 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3439 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003440 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003441}
Jeff Johnson295189b2012-06-20 16:38:30 -07003442/*
3443 * FUNCTION: WDA_DelSTASelfRespCallback
3444 *
3445 */
3446void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3447 wdiDelStaSelfRspParams , void* pUserData)
3448{
3449 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3450 tWDA_CbContext *pWDA;
3451 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003453 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 if (NULL == pWdaParams)
3455 {
3456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003457 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 VOS_ASSERT(0);
3459 return;
3460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003461 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3462 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 delStaSelfParams->status =
3464 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3465
3466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3467 vos_mem_free(pWdaParams) ;
3468
3469 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 return ;
3471}
Jeff Johnson295189b2012-06-20 16:38:30 -07003472/*
3473 * FUNCTION: WDA_DelSTASelfReqCallback
3474 *
3475 */
3476void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3477 void* pUserData)
3478{
3479 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3480 tWDA_CbContext *pWDA;
3481 tDelStaSelfParams *delStaSelfParams;
3482
3483 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3484 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003485 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003486
3487 if (NULL == pWdaParams)
3488 {
3489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003490 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 VOS_ASSERT(0);
3492 return;
3493 }
3494
3495 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3496 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3497
3498 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3499
3500 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3501 {
3502 VOS_ASSERT(0);
3503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3504 vos_mem_free(pWdaParams) ;
3505 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3506 }
3507
3508 return ;
3509}
3510
3511/*
3512 * FUNCTION: WDA_DelSTASelfReq
3513 * Trigger Config STA processing in WDI
3514 */
3515VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3516 tDelStaSelfParams* pDelStaSelfReqParam)
3517{
3518 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003519 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 tWDA_ReqParams *pWdaParams = NULL;
3521 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3522 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3523 sizeof(WDI_DelSTASelfReqParamsType)) ;
3524
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003526 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 if( NULL == wdiDelStaSelfReq )
3528 {
3529 VOS_ASSERT( 0 );
3530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003531 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 return( VOS_STATUS_E_NOMEM );
3533 }
3534
3535 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3536 if( NULL == pWdaParams )
3537 {
3538 VOS_ASSERT( 0 );
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003540 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 vos_mem_free(wdiDelStaSelfReq) ;
3542 return( VOS_STATUS_E_NOMEM );
3543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 pWdaParams->pWdaContext = pWDA;
3545 /* Store param pointer as passed in by caller */
3546 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3547 /* store Params pass it to WDI */
3548 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3550 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3551
3552 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3553 wdiDelStaSelfReq->pUserData = pWdaParams;
3554
Jeff Johnson43971f52012-07-17 12:26:56 -07003555 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3557
Jeff Johnson43971f52012-07-17 12:26:56 -07003558 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 {
3560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3561 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3562 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003563 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3565 vos_mem_free(pWdaParams) ;
3566 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3567 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3568 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003569 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003570}
3571
Jeff Johnson295189b2012-06-20 16:38:30 -07003572/*
3573 * FUNCTION: WDA_SendMsg
3574 * Send Message back to PE
3575 */
3576void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3577 void *pBodyptr, tANI_U32 bodyVal)
3578{
3579 tSirMsgQ msg = {0} ;
3580 tANI_U32 status = VOS_STATUS_SUCCESS ;
3581 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003582 msg.type = msgType;
3583 msg.bodyval = bodyVal;
3584 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003585 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 if (VOS_STATUS_SUCCESS != status)
3587 {
3588 if(NULL != pBodyptr)
3589 {
3590 vos_mem_free(pBodyptr);
3591 }
3592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003593 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003594 VOS_ASSERT(0) ;
3595 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 return ;
3597}
Jeff Johnson295189b2012-06-20 16:38:30 -07003598/*
3599 * FUNCTION: WDA_UpdateBSSParams
3600 * Translated WDA/PE BSS info into WDI BSS info..
3601 */
3602void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3603 WDI_ConfigBSSReqInfoType *wdiBssParams,
3604 tAddBssParams *wdaBssParams)
3605{
3606 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 /* copy bssReq Params to WDI structure */
3608 vos_mem_copy(wdiBssParams->macBSSID,
3609 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3610 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3611 sizeof(tSirMacAddr)) ;
3612 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3613 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3614 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 wdiBssParams->ucShortSlotTimeSupported =
3616 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3618 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3619 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3620 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3621 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3622
3623 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3624 wdiBssParams->ucTXOPProtectionFullSupport =
3625 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3627 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003628 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3630 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3631 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3632 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3633
3634 /* copy SSID into WDI structure */
3635 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3636 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3637 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003638 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3639 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003641#ifdef WLAN_FEATURE_VOWIFI
3642 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3643#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003645 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003646#ifdef WLAN_FEATURE_VOWIFI_11R
3647 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 if(wdiBssParams->bExtSetStaKeyParamValid)
3649 {
3650 /* copy set STA key params to WDI structure */
3651 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3652 wdaBssParams->extSetStaKeyParam.staIdx;
3653 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3654 wdaBssParams->extSetStaKeyParam.encType;
3655 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3656 wdaBssParams->extSetStaKeyParam.wepType;
3657 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3658 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3660 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003661 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3663 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3664 {
3665 WDA_GetWepKeysFromCfg( pWDA,
3666 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3667 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3668 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3669 }
3670 else
3671 {
3672#ifdef WLAN_SOFTAP_FEATURE
3673 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3674 keyIndex++)
3675 {
3676 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3677 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3678 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3679 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3680 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3681 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3683 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3684 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3685 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3686 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3687 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3688 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3689 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3692 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3693#else
3694 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyId =
3695 wdaBssParams->extSetStaKeyParam.key.keyId;
3696 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].unicast =
3697 wdaBssParams->extSetStaKeyParam.key.unicast;
3698 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyDirection =
3699 wdaBssParams->extSetStaKeyParam.key.keyDirection;
3700 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyRsc,
3701 wdaBssParams->extSetStaKeyParam.key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
3702 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].paeRole =
3703 wdaBssParams->extSetStaKeyParam.key.paeRole;
3704 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyLength =
3705 wdaBssParams->extSetStaKeyParam.key.keyLength;
3706 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].key,
3707 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
3708 SIR_MAC_MAX_KEY_LENGTH);
3709 wdiBssParams->wdiExtSetKeyParam.ucNumKeys = 1;
3710#endif
3711 }
3712 }
3713 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3714 }
3715 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3716 {
3717 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3718 sizeof(wdaBssParams->extSetStaKeyParam) );
3719 }
3720#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003721#ifdef WLAN_FEATURE_11AC
3722 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3723 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3724#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003725
3726 return ;
3727}
Jeff Johnson295189b2012-06-20 16:38:30 -07003728/*
3729 * FUNCTION: WDA_UpdateSTAParams
3730 * Translated WDA/PE BSS info into WDI BSS info..
3731 */
3732void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3733 WDI_ConfigStaReqInfoType *wdiStaParams,
3734 tAddStaParams *wdaStaParams)
3735{
3736 tANI_U8 i = 0;
3737 /* Update STA params */
3738 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3739 sizeof(tSirMacAddr)) ;
3740 wdiStaParams->usAssocId = wdaStaParams->assocId;
3741 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3742
3743 wdiStaParams->ucShortPreambleSupported =
3744 wdaStaParams->shortPreambleSupported;
3745 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3746 sizeof(tSirMacAddr)) ;
3747 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3748
3749 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3750
3751 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3752 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3753 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3754 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3755 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3756 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3757 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3758
3759 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3760 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 wdiStaParams->wdiSupportedRates.opRateMode =
3762 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3764 {
3765 wdiStaParams->wdiSupportedRates.llbRates[i] =
3766 wdaStaParams->supportedRates.llbRates[i];
3767 }
3768 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3769 {
3770 wdiStaParams->wdiSupportedRates.llaRates[i] =
3771 wdaStaParams->supportedRates.llaRates[i];
3772 }
3773 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3774 {
3775 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3776 wdaStaParams->supportedRates.aniLegacyRates[i];
3777 }
3778 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3779 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003780#ifdef WLAN_FEATURE_11AC
3781 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3782 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3783 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3784 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3785#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003786 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3787 {
3788 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3789 wdaStaParams->supportedRates.supportedMCSSet[i];
3790 }
3791 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3792 wdaStaParams->supportedRates.rxHighestDataRate;
3793
3794 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3795
3796 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3797
3798 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3799 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3800 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3801
3802 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3803 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3804 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3805 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3806#ifdef WLAN_FEATURE_P2P
3807 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3808#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003809#ifdef WLAN_FEATURE_11AC
3810 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3811 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003812 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003813#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003814 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3815 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 return ;
3817}
Jeff Johnson295189b2012-06-20 16:38:30 -07003818/*
3819 * -------------------------------------------------------------------------
3820 * CFG update to WDI
3821 * -------------------------------------------------------------------------
3822 */
3823
3824 /*
3825 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3826 * Convert the WNI CFG ID to HAL CFG ID
3827 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003828static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003829{
3830 switch(wniCfgId)
3831 {
3832 case WNI_CFG_STA_ID:
3833 return QWLAN_HAL_CFG_STA_ID;
3834 case WNI_CFG_CURRENT_TX_ANTENNA:
3835 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3836 case WNI_CFG_CURRENT_RX_ANTENNA:
3837 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3838 case WNI_CFG_LOW_GAIN_OVERRIDE:
3839 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3840 case WNI_CFG_POWER_STATE_PER_CHAIN:
3841 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3842 case WNI_CFG_CAL_PERIOD:
3843 return QWLAN_HAL_CFG_CAL_PERIOD;
3844 case WNI_CFG_CAL_CONTROL:
3845 return QWLAN_HAL_CFG_CAL_CONTROL;
3846 case WNI_CFG_PROXIMITY:
3847 return QWLAN_HAL_CFG_PROXIMITY;
3848 case WNI_CFG_NETWORK_DENSITY:
3849 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3850 case WNI_CFG_MAX_MEDIUM_TIME:
3851 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3852 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3853 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3854 case WNI_CFG_RTS_THRESHOLD:
3855 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3856 case WNI_CFG_SHORT_RETRY_LIMIT:
3857 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3858 case WNI_CFG_LONG_RETRY_LIMIT:
3859 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3860 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3861 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3862 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3863 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3864 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3865 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3866 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3867 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3868 case WNI_CFG_FIXED_RATE:
3869 return QWLAN_HAL_CFG_FIXED_RATE;
3870 case WNI_CFG_RETRYRATE_POLICY:
3871 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3872 case WNI_CFG_RETRYRATE_SECONDARY:
3873 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3874 case WNI_CFG_RETRYRATE_TERTIARY:
3875 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3876 case WNI_CFG_FORCE_POLICY_PROTECTION:
3877 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3878 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3879 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3880 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3881 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3882 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3883 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3884 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3885 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3886 case WNI_CFG_MAX_BA_SESSIONS:
3887 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3888 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3889 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3890 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3891 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3892 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3893 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3894 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3895 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3896 case WNI_CFG_STATS_PERIOD:
3897 return QWLAN_HAL_CFG_STATS_PERIOD;
3898 case WNI_CFG_CFP_MAX_DURATION:
3899 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3900#if 0 /*This is not part of CFG*/
3901 case WNI_CFG_FRAME_TRANS_ENABLED:
3902 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3903#endif
3904 case WNI_CFG_DTIM_PERIOD:
3905 return QWLAN_HAL_CFG_DTIM_PERIOD;
3906 case WNI_CFG_EDCA_WME_ACBK:
3907 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3908 case WNI_CFG_EDCA_WME_ACBE:
3909 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3910 case WNI_CFG_EDCA_WME_ACVI:
3911 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3912 case WNI_CFG_EDCA_WME_ACVO:
3913 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3914#if 0
3915 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3916 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3917 case WNI_CFG_TELE_BCN_TRANS_LI:
3918 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3919 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3920 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3921 case WNI_CFG_TELE_BCN_MAX_LI:
3922 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3923 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3924 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3925#endif
3926 case WNI_CFG_ENABLE_CLOSE_LOOP:
3927 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003928 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3929 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 default:
3931 {
3932 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3933 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3934 wniCfgId);
3935 return VOS_STATUS_E_INVAL;
3936 }
3937 }
3938}
Jeff Johnson295189b2012-06-20 16:38:30 -07003939/*
3940 * FUNCTION: WDA_UpdateCfgCallback
3941 *
3942 */
3943void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3944{
3945 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3946 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3947 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003949 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 /*
3951 * currently there is no response message is expected between PE and
3952 * WDA, Failure return from WDI is a ASSERT condition
3953 */
3954 if(WDI_STATUS_SUCCESS != wdiStatus)
3955 {
3956 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003957 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3959 }
3960
3961 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3962 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3963 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003964 return ;
3965}
Jeff Johnson295189b2012-06-20 16:38:30 -07003966/*
3967 * FUNCTION: WDA_UpdateCfg
3968 *
3969 */
3970VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3971{
3972
3973 WDI_Status status = WDI_STATUS_SUCCESS ;
3974 tANI_U32 val =0;
3975 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3976 tHalCfg *configData;
3977 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3978 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003980 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 if (NULL == pMac )
3982 {
3983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003984 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003985 return VOS_STATUS_E_FAILURE;
3986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 if(WDA_START_STATE != pWDA->wdaState)
3988 {
3989 return VOS_STATUS_E_FAILURE;
3990 }
3991
3992 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3993 {
3994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003995 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 VOS_ASSERT(0);
3997 return VOS_STATUS_E_FAILURE;
3998 }
3999
4000 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4001 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 if(NULL == wdiCfgReqParam)
4003 {
4004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 VOS_ASSERT(0);
4007 return VOS_STATUS_E_NOMEM;
4008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4010 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 if(NULL == wdiCfgReqParam->pConfigBuffer)
4012 {
4013 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004014 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004015 vos_mem_free(wdiCfgReqParam);
4016 VOS_ASSERT(0);
4017 return VOS_STATUS_E_NOMEM;
4018 }
4019
4020 /*convert the WNI CFG Id to HAL CFG Id*/
4021 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4022 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4023
4024 /*TODO: revisit this for handling string parameters */
4025 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4026 &val) != eSIR_SUCCESS)
4027 {
4028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4029 "Failed to cfg get id %d\n", cfgParam->bodyval);
4030 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4031 vos_mem_free(wdiCfgReqParam);
4032 return eSIR_FAILURE;
4033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4035 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4036 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4037 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4038 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4039
4040 /* store Params pass it to WDI */
4041 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004042#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4043 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4044 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 if(IS_WDI_STATUS_FAILURE(status))
4046 {
4047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4048 "Failure in Update CFG WDI API, free all the memory " );
4049 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4050 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4051 pWDA->wdaWdiCfgApiMsgParam = NULL;
4052 /* Failure is not expected */
4053 VOS_ASSERT(0) ;
4054 }
4055#else
4056 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4057 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4058 pWDA->wdaWdiCfgApiMsgParam = NULL;
4059#endif
4060 return CONVERT_WDI2VOS_STATUS(status) ;
4061}
4062
Jeff Johnson295189b2012-06-20 16:38:30 -07004063VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4064 v_U8_t *pDefaultKeyId,
4065 v_U8_t *pNumKeys,
4066 WDI_KeysType *pWdiKeys )
4067{
4068 v_U32_t i, j, defKeyId = 0;
4069 v_U32_t val = SIR_MAC_KEY_LENGTH;
4070 VOS_STATUS status = WDI_STATUS_SUCCESS;
4071 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 if (NULL == pMac )
4073 {
4074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004075 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 return VOS_STATUS_E_FAILURE;
4077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004078 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4079 &defKeyId ))
4080 {
4081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4082 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4083 }
4084
4085 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 /* Need to extract ALL of the configured WEP Keys */
4087 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4088 {
4089 val = SIR_MAC_KEY_LENGTH;
4090 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4091 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4092 pWdiKeys[j].key,
4093 &val ))
4094 {
4095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4096 "WEP Key index [%d] may not configured in CFG\n",i);
4097 }
4098 else
4099 {
4100 pWdiKeys[j].keyId = (tANI_U8) i;
4101 /*
4102 * Actually, a DC (Don't Care) because
4103 * this is determined (and set) by PE/MLME
4104 */
4105 pWdiKeys[j].unicast = 0;
4106 /*
4107 * Another DC (Don't Care)
4108 */
4109 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4110 /* Another DC (Don't Care). Unused for WEP */
4111 pWdiKeys[j].paeRole = 0;
4112 /* Determined from wlan_cfgGetStr() above.*/
4113 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004114 j++;
4115 *pNumKeys = (tANI_U8) j;
4116 }
4117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 return status;
4119}
Jeff Johnson295189b2012-06-20 16:38:30 -07004120/*
4121 * FUNCTION: WDA_SetBssKeyReqCallback
4122 * send SET BSS key RSP back to PE
4123 */
4124void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4125{
4126 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4127 tWDA_CbContext *pWDA;
4128 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004130 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 if(NULL == pWdaParams)
4132 {
4133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004134 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 VOS_ASSERT(0) ;
4136 return ;
4137 }
4138 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4139 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4141 vos_mem_free(pWdaParams) ;
4142 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 return ;
4145}
Jeff Johnson295189b2012-06-20 16:38:30 -07004146/*
4147 * FUNCTION: WDA_ProcessSetBssKeyReq
4148 * Request to WDI for programming the BSS key( key for
4149 * broadcast/multicast frames Encryption)
4150 */
4151VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4152 tSetBssKeyParams *setBssKeyParams )
4153{
4154 WDI_Status status = WDI_STATUS_SUCCESS ;
4155 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4156 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4157 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4158 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004161 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 if(NULL == wdiSetBssKeyParam)
4163 {
4164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004165 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 VOS_ASSERT(0);
4167 return VOS_STATUS_E_NOMEM;
4168 }
4169 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4170 if(NULL == pWdaParams)
4171 {
4172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004173 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 VOS_ASSERT(0);
4175 vos_mem_free(wdiSetBssKeyParam);
4176 return VOS_STATUS_E_NOMEM;
4177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 /* copy set BSS params to WDI structure */
4180 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4181 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4182 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 if(setBssKeyParams->encType != eSIR_ED_NONE)
4184 {
4185 if( setBssKeyParams->numKeys == 0 &&
4186 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4187 setBssKeyParams->encType == eSIR_ED_WEP104))
4188 {
4189 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4191 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4192 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4193 }
4194 else
4195 {
4196 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4197 {
4198 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4199 setBssKeyParams->key[keyIndex].keyId;
4200 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4201 setBssKeyParams->key[keyIndex].unicast;
4202 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4203 setBssKeyParams->key[keyIndex].keyDirection;
4204 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4205 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4206 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4207 setBssKeyParams->key[keyIndex].paeRole;
4208 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4209 setBssKeyParams->key[keyIndex].keyLength;
4210 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4211 setBssKeyParams->key[keyIndex].key,
4212 SIR_MAC_MAX_KEY_LENGTH);
4213 }
4214 }
4215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4217 setBssKeyParams->singleTidRc;
4218 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 /* Store set key pointer, as this will be used for response */
4220 /* store Params pass it to WDI */
4221 pWdaParams->pWdaContext = pWDA;
4222 pWdaParams->wdaMsgParam = setBssKeyParams;
4223 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4225 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4226
4227 if(IS_WDI_STATUS_FAILURE(status))
4228 {
4229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4230 "Failure in Set BSS Key Req WDI API, free all the memory " );
4231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4232 vos_mem_free(pWdaParams) ;
4233 setBssKeyParams->status = eSIR_FAILURE ;
4234 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 return CONVERT_WDI2VOS_STATUS(status) ;
4237}
Jeff Johnson295189b2012-06-20 16:38:30 -07004238/*
4239 * FUNCTION: WDA_RemoveBssKeyReqCallback
4240 * send SET BSS key RSP back to PE
4241 */
4242void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4243{
4244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4245 tWDA_CbContext *pWDA;
4246 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004248 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004249 if(NULL == pWdaParams)
4250 {
4251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004252 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004253 VOS_ASSERT(0) ;
4254 return ;
4255 }
4256 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4257 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4259 vos_mem_free(pWdaParams) ;
4260
4261 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004263 return ;
4264}
Jeff Johnson295189b2012-06-20 16:38:30 -07004265/*
4266 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4267 * Request to WDI to remove the BSS key( key for broadcast/multicast
4268 * frames Encryption)
4269 */
4270VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4271 tRemoveBssKeyParams *removeBssKeyParams )
4272{
4273 WDI_Status status = WDI_STATUS_SUCCESS ;
4274 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4275 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4276 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4277 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004279 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 if(NULL == wdiRemoveBssKeyParam)
4281 {
4282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 VOS_ASSERT(0);
4285 return VOS_STATUS_E_NOMEM;
4286 }
4287 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4288 if(NULL == pWdaParams)
4289 {
4290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 VOS_ASSERT(0);
4293 vos_mem_free(wdiRemoveBssKeyParam);
4294 return VOS_STATUS_E_NOMEM;
4295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 /* copy Remove BSS key params to WDI structure*/
4297 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4298 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4299 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4300 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4301 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 /* Store remove key pointer, as this will be used for response */
4303 /* store Params pass it to WDI */
4304 pWdaParams->pWdaContext = pWDA;
4305 pWdaParams->wdaMsgParam = removeBssKeyParams;
4306 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4308 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 if(IS_WDI_STATUS_FAILURE(status))
4310 {
4311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4312 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4314 vos_mem_free(pWdaParams) ;
4315 removeBssKeyParams->status = eSIR_FAILURE ;
4316 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 return CONVERT_WDI2VOS_STATUS(status) ;
4319}
Jeff Johnson295189b2012-06-20 16:38:30 -07004320/*
4321 * FUNCTION: WDA_SetBssKeyReqCallback
4322 * send SET BSS key RSP back to PE
4323 */
4324void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4325{
4326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4327 tWDA_CbContext *pWDA;
4328 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004330 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004331 if(NULL == pWdaParams)
4332 {
4333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004334 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 VOS_ASSERT(0) ;
4336 return ;
4337 }
4338 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4339 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4341 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004343 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 return ;
4345}
Jeff Johnson295189b2012-06-20 16:38:30 -07004346/*
4347 * FUNCTION: WDA_ProcessSetStaKeyReq
4348 * Request to WDI for programming the STA key( key for Unicast frames
4349 * Encryption)
4350 */
4351VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4352 tSetStaKeyParams *setStaKeyParams )
4353{
4354 WDI_Status status = WDI_STATUS_SUCCESS ;
4355 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4356 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4357 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4358 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004361 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 if(NULL == wdiSetStaKeyParam)
4363 {
4364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 VOS_ASSERT(0);
4367 return VOS_STATUS_E_NOMEM;
4368 }
4369 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4370 if(NULL == pWdaParams)
4371 {
4372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 VOS_ASSERT(0);
4375 vos_mem_free(wdiSetStaKeyParam);
4376 return VOS_STATUS_E_NOMEM;
4377 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004379 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 /* copy set STA key params to WDI structure */
4381 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4382 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4383 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4384 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 if(setStaKeyParams->encType != eSIR_ED_NONE)
4386 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004387 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4389 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4390 {
4391 WDA_GetWepKeysFromCfg( pWDA,
4392 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4393 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4394 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4395 }
4396 else
4397 {
4398#ifdef WLAN_SOFTAP_FEATURE
4399 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4400 keyIndex++)
4401 {
4402 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4403 setStaKeyParams->key[keyIndex].keyId;
4404 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4405 setStaKeyParams->key[keyIndex].unicast;
4406 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4407 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4409 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4410 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4411 setStaKeyParams->key[keyIndex].paeRole;
4412 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4413 setStaKeyParams->key[keyIndex].keyLength;
4414 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4415 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4416 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4417 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4418 {
4419 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4420 }
4421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004422 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4423 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4424#else
4425 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4426 setStaKeyParams->key.keyId;
4427 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4428 setStaKeyParams->key.unicast;
4429 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4430 setStaKeyParams->key.keyDirection;
4431 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4432 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4433 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4434 setStaKeyParams->key.paeRole;
4435 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4436 setStaKeyParams->key.keyLength;
4437 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4438 setStaKeyParams->key[keyIndex].key,
4439 SIR_MAC_MAX_KEY_LENGTH);
4440 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4441#endif
4442 }
4443 }
4444 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4445 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 /* Store set key pointer, as this will be used for response */
4447 /* store Params pass it to WDI */
4448 pWdaParams->pWdaContext = pWDA;
4449 pWdaParams->wdaMsgParam = setStaKeyParams;
4450 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4452 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004453 if(IS_WDI_STATUS_FAILURE(status))
4454 {
4455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4456 "Failure in set STA Key Req WDI API, free all the memory " );
4457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4458 vos_mem_free(pWdaParams) ;
4459 setStaKeyParams->status = eSIR_FAILURE ;
4460 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 return CONVERT_WDI2VOS_STATUS(status) ;
4463}
Jeff Johnson295189b2012-06-20 16:38:30 -07004464/*
4465 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4466 * send SET Bcast STA key RSP back to PE
4467 */
4468void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4469{
4470 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4471 tWDA_CbContext *pWDA;
4472 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004474 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004475 if(NULL == pWdaParams)
4476 {
4477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004478 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004479 VOS_ASSERT(0) ;
4480 return ;
4481 }
4482 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4483 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4485 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 return ;
4489}
4490
Jeff Johnson295189b2012-06-20 16:38:30 -07004491/*
4492 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4493 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4494 * Encryption)
4495 */
4496VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4497 tSetStaKeyParams *setStaKeyParams )
4498{
4499 WDI_Status status = WDI_STATUS_SUCCESS ;
4500 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4501 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4502 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4503 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004506 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 if(NULL == wdiSetStaKeyParam)
4508 {
4509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 VOS_ASSERT(0);
4512 return VOS_STATUS_E_NOMEM;
4513 }
4514 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4515 if(NULL == pWdaParams)
4516 {
4517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 VOS_ASSERT(0);
4520 vos_mem_free(wdiSetStaKeyParam);
4521 return VOS_STATUS_E_NOMEM;
4522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 /* copy set STA key params to WDI structure */
4526 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4527 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4528 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4529 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 if(setStaKeyParams->encType != eSIR_ED_NONE)
4531 {
4532#ifdef WLAN_SOFTAP_FEATURE
4533 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4534 keyIndex++)
4535 {
4536 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4537 setStaKeyParams->key[keyIndex].keyId;
4538 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4539 setStaKeyParams->key[keyIndex].unicast;
4540 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4541 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004542 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4543 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4544 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4545 setStaKeyParams->key[keyIndex].paeRole;
4546 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4547 setStaKeyParams->key[keyIndex].keyLength;
4548 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4549 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004551 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4552 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4553#else
4554 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4555 setStaKeyParams->key.keyId;
4556 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4557 setStaKeyParams->key.unicast;
4558 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4559 setStaKeyParams->key.keyDirection;
4560 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4561 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4562 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4563 setStaKeyParams->key.paeRole;
4564 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4565 setStaKeyParams->key.keyLength;
4566 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4567 setStaKeyParams->key[keyIndex].key,
4568 SIR_MAC_MAX_KEY_LENGTH);
4569 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4570#endif
4571 }
4572 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 /* Store set key pointer, as this will be used for response */
4574 /* store Params pass it to WDI */
4575 pWdaParams->pWdaContext = pWDA;
4576 pWdaParams->wdaMsgParam = setStaKeyParams;
4577 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4579 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 if(IS_WDI_STATUS_FAILURE(status))
4581 {
4582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4583 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4585 vos_mem_free(pWdaParams) ;
4586 setStaKeyParams->status = eSIR_FAILURE ;
4587 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 return CONVERT_WDI2VOS_STATUS(status) ;
4590}
Jeff Johnson295189b2012-06-20 16:38:30 -07004591/*
4592 * FUNCTION: WDA_RemoveStaKeyReqCallback
4593 * send SET BSS key RSP back to PE
4594 */
4595void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4596{
4597 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4598 tWDA_CbContext *pWDA;
4599 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004601 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 if(NULL == pWdaParams)
4603 {
4604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004605 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004606 VOS_ASSERT(0) ;
4607 return ;
4608 }
4609 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4610 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4612 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004615 return ;
4616}
4617
Jeff Johnson295189b2012-06-20 16:38:30 -07004618/*
4619 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4620 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4621 */
4622VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4623 tRemoveStaKeyParams *removeStaKeyParams )
4624{
4625 WDI_Status status = WDI_STATUS_SUCCESS ;
4626 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4627 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4628 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4629 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004631 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004632 if(NULL == wdiRemoveStaKeyParam)
4633 {
4634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004635 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004636 VOS_ASSERT(0);
4637 return VOS_STATUS_E_NOMEM;
4638 }
4639 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4640 if(NULL == pWdaParams)
4641 {
4642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004643 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 VOS_ASSERT(0);
4645 vos_mem_free(wdiRemoveStaKeyParam);
4646 return VOS_STATUS_E_NOMEM;
4647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 /* copy remove STA key params to WDI structure*/
4649 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4650 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4651 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4652 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4653 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004654 /* Store remove key pointer, as this will be used for response */
4655 /* store Params pass it to WDI */
4656 pWdaParams->pWdaContext = pWDA;
4657 pWdaParams->wdaMsgParam = removeStaKeyParams;
4658 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4660 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004661 if(IS_WDI_STATUS_FAILURE(status))
4662 {
4663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4664 "Failure in remove STA Key Req WDI API, free all the memory " );
4665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4666 vos_mem_free(pWdaParams) ;
4667 removeStaKeyParams->status = eSIR_FAILURE ;
4668 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 return CONVERT_WDI2VOS_STATUS(status) ;
4671}
Jeff Johnson295189b2012-06-20 16:38:30 -07004672/*
4673 * FUNCTION: WDA_IsHandleSetLinkStateReq
4674 * Update the WDA state and return the status to handle this message or not
4675 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004676WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4677 tWDA_CbContext *pWDA,
4678 tLinkStateParams *linkStateParams)
4679{
4680 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004681 switch(linkStateParams->state)
4682 {
4683 case eSIR_LINK_PREASSOC_STATE:
4684 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4685 /*
4686 * set the WDA state to PRE ASSOC
4687 * copy the BSSID into pWDA to use it in join request and return,
4688 * No need to handle these messages.
4689 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004690 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4691 {
4692 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004694 }
4695 else
4696 {
4697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004698 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004699 VOS_ASSERT(0);
4700 }
4701
4702 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4703 {
4704 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004706 }
4707 else
4708 {
4709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004710 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004711 VOS_ASSERT(0);
4712 }
4713
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4715 *channel and after ) so reset the WDA state to ready when the second
4716 * time UMAC issue the link state with PREASSOC
4717 */
4718 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4719 {
4720 /* RESET WDA state back to WDA_READY_STATE */
4721 pWDA->wdaState = WDA_READY_STATE;
4722 }
4723 else
4724 {
4725 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4726 }
4727 //populate linkState info in WDACbCtxt
4728 pWDA->linkState = linkStateParams->state;
4729 status = WDA_IGNORE_SET_LINK_STATE;
4730 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 default:
4732 if(pWDA->wdaState != WDA_READY_STATE)
4733 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004734 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4735 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4736 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4737 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4738 *the ASSERT in WDA_Stop during module unload.*/
4739 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4740 {
4741 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004742 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004743 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004744 else
4745 {
4746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004747 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004748 status = WDA_IGNORE_SET_LINK_STATE;
4749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 }
4751 break;
4752 }
4753
4754 return status;
4755}
Jeff Johnson295189b2012-06-20 16:38:30 -07004756/*
4757 * FUNCTION: WDA_SetLinkStateCallback
4758 * call back function for set link state from WDI
4759 */
4760void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4761{
4762 tWDA_CbContext *pWDA;
4763 tLinkStateParams *linkStateParams;
4764 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004766 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004767 if(NULL == pWdaParams)
4768 {
4769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004770 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 VOS_ASSERT(0) ;
4772 return ;
4773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 /*
4777 * In STA mode start the BA activity check timer after association
4778 * and in AP mode start BA activity check timer after BSS start */
4779 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4780 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4781 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4782 {
4783 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4784 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004785 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 /*
4787 * No respone required for WDA_SET_LINK_STATE so free the request
4788 * param here
4789 */
4790 if( pWdaParams != NULL )
4791 {
4792 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4793 {
4794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4795 }
4796 vos_mem_free(pWdaParams);
4797 }
4798 return ;
4799}
Jeff Johnson295189b2012-06-20 16:38:30 -07004800/*
4801 * FUNCTION: WDA_ProcessSetLinkState
4802 * Request to WDI to set the link status.
4803 */
4804VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4805 tLinkStateParams *linkStateParams)
4806{
4807 WDI_Status status = WDI_STATUS_SUCCESS ;
4808 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4809 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4810 sizeof(WDI_SetLinkReqParamsType)) ;
4811 tWDA_ReqParams *pWdaParams ;
4812 tpAniSirGlobal pMac;
4813 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4814
4815 if(NULL == pMac)
4816 {
4817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004818 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004819 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004820 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 return VOS_STATUS_E_FAILURE;
4822 }
4823
4824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004825 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 if(NULL == wdiSetLinkStateParam)
4827 {
4828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004830 VOS_ASSERT(0);
4831 return VOS_STATUS_E_NOMEM;
4832 }
4833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4834 if(NULL == pWdaParams)
4835 {
4836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004838 VOS_ASSERT(0);
4839 vos_mem_free(wdiSetLinkStateParam);
4840 return VOS_STATUS_E_NOMEM;
4841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 if(WDA_IGNORE_SET_LINK_STATE ==
4843 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4844 {
4845 status = WDI_STATUS_E_FAILURE;
4846 }
4847 else
4848 {
4849 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4850 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4852 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4854 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 pWdaParams->pWdaContext = pWDA;
4856 /* Store remove key pointer, as this will be used for response */
4857 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004858 /* store Params pass it to WDI */
4859 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4860 /* Stop Timer only other than GO role and concurrent session */
4861 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4862 && !vos_concurrent_sessions_running() &&
4863 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4864 {
4865 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4868 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 if(IS_WDI_STATUS_FAILURE(status))
4870 {
4871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4872 "Failure in set link state Req WDI API, free all the memory " );
4873 }
4874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 if(IS_WDI_STATUS_FAILURE(status))
4876 {
4877 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004878 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 vos_mem_free(pWdaParams);
4880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004881 return CONVERT_WDI2VOS_STATUS(status) ;
4882}
Jeff Johnson295189b2012-06-20 16:38:30 -07004883/*
4884 * FUNCTION: WDA_GetStatsReqParamsCallback
4885 * send the response to PE with Stats received from WDI
4886 */
4887void WDA_GetStatsReqParamsCallback(
4888 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4889 void* pUserData)
4890{
4891 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4892 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4893
4894 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 pGetPEStatsRspParams =
4897 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4898 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4899
4900 if(NULL == pGetPEStatsRspParams)
4901 {
4902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 VOS_ASSERT(0);
4905 return;
4906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4908 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4909 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4910 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4911 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4912
4913 //Fill the Session Id Properly in PE
4914 pGetPEStatsRspParams->sessionId = 0;
4915 pGetPEStatsRspParams->rc =
4916 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4917 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4918 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004919 vos_mem_copy( pGetPEStatsRspParams + 1,
4920 wdiGetStatsRsp + 1,
4921 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 /* send response to UMAC*/
4923 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4924
4925 return;
4926}
4927
Jeff Johnson295189b2012-06-20 16:38:30 -07004928/*
4929 * FUNCTION: WDA_ProcessGetStatsReq
4930 * Request to WDI to get the statistics
4931 */
4932VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4933 tAniGetPEStatsReq *pGetStatsParams)
4934{
4935 WDI_Status status = WDI_STATUS_SUCCESS ;
4936 WDI_GetStatsReqParamsType wdiGetStatsParam;
4937 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004939 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004940 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4941 pGetStatsParams->staId;
4942 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4943 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 status = WDI_GetStatsReq(&wdiGetStatsParam,
4946 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004947 if(IS_WDI_STATUS_FAILURE(status))
4948 {
4949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4950 "Failure in Get Stats Req WDI API, free all the memory " );
4951 pGetPEStatsRspParams =
4952 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4953 if(NULL == pGetPEStatsRspParams)
4954 {
4955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004956 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004958 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 return VOS_STATUS_E_NOMEM;
4960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4962 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4963 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4964 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4965 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4966 (void *)pGetPEStatsRspParams, 0) ;
4967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 /* Free the request message */
4969 vos_mem_free(pGetStatsParams);
4970 return CONVERT_WDI2VOS_STATUS(status);
4971}
Jeff Johnson295189b2012-06-20 16:38:30 -07004972/*
4973 * FUNCTION: WDA_UpdateEDCAParamCallback
4974 * call back function for Update EDCA params from WDI
4975 */
4976void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4977{
4978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4979 tEdcaParams *pEdcaParams;
4980
4981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004982 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004983 if(NULL == pWdaParams)
4984 {
4985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004986 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 VOS_ASSERT(0) ;
4988 return ;
4989 }
4990 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4992 vos_mem_free(pWdaParams);
4993 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 return ;
4995}
Jeff Johnson295189b2012-06-20 16:38:30 -07004996/*
4997 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4998 * Request to WDI to Update the EDCA params.
4999 */
5000VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5001 tEdcaParams *pEdcaParams)
5002{
5003 WDI_Status status = WDI_STATUS_SUCCESS ;
5004 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5005 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5006 sizeof(WDI_UpdateEDCAParamsType)) ;
5007 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005009 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005010 if(NULL == wdiEdcaParam)
5011 {
5012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005013 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005015 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 return VOS_STATUS_E_NOMEM;
5017 }
5018 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5019 if(NULL == pWdaParams)
5020 {
5021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 VOS_ASSERT(0);
5024 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005025 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 return VOS_STATUS_E_NOMEM;
5027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005028 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5029 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5030 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5031 &pEdcaParams->acbe);
5032 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5033 &pEdcaParams->acbk);
5034 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5035 &pEdcaParams->acvi);
5036 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5037 &pEdcaParams->acvo);
5038 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 pWdaParams->pWdaContext = pWDA;
5040 /* Store remove key pointer, as this will be used for response */
5041 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005042 /* store Params pass it to WDI */
5043 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005044 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5045 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 if(IS_WDI_STATUS_FAILURE(status))
5047 {
5048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5049 "Failure in Update EDCA Params WDI API, free all the memory " );
5050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5051 vos_mem_free(pWdaParams);
5052 vos_mem_free(pEdcaParams);
5053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 return CONVERT_WDI2VOS_STATUS(status) ;
5055}
Jeff Johnson295189b2012-06-20 16:38:30 -07005056/*
5057 * FUNCTION: WDA_AddBAReqCallback
5058 * send ADD BA RSP back to PE
5059 */
5060void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5061 void* pUserData)
5062{
5063 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5064 tWDA_CbContext *pWDA;
5065 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005067 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 if(NULL == pWdaParams)
5069 {
5070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005071 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 VOS_ASSERT(0) ;
5073 return ;
5074 }
5075 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5076 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5078 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005080 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005081 return ;
5082}
5083
Jeff Johnson295189b2012-06-20 16:38:30 -07005084/*
5085 * FUNCTION: WDA_ProcessAddBAReq
5086 * Request to WDI to Update the ADDBA REQ params.
5087 */
5088VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5089 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5090{
Jeff Johnson43971f52012-07-17 12:26:56 -07005091 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005092 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5093 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5094 sizeof(WDI_AddBAReqParamsType)) ;
5095 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005097 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005098 if(NULL == wdiAddBAReqParam)
5099 {
5100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005101 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005102 VOS_ASSERT(0);
5103 return VOS_STATUS_E_NOMEM;
5104 }
5105 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5106 if(NULL == pWdaParams)
5107 {
5108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005109 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005110 VOS_ASSERT(0);
5111 vos_mem_free(wdiAddBAReqParam);
5112 return VOS_STATUS_E_NOMEM;
5113 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005114 do
5115 {
5116 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005117 wdiAddBaInfo->ucSTAIdx = staIdx ;
5118 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5119 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005120 } while(0) ;
5121 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005122 pWdaParams->pWdaContext = pWDA;
5123 /* store Params pass it to WDI */
5124 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5125 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005126 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5127 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005128
Jeff Johnson43971f52012-07-17 12:26:56 -07005129 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 {
5131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005132 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5133 status = CONVERT_WDI2VOS_STATUS(wstatus);
5134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 vos_mem_free(pWdaParams);
5136 pAddBAReqParams->status = eSIR_FAILURE;
5137 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5138 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005139 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005140}
Jeff Johnson295189b2012-06-20 16:38:30 -07005141/*
5142 * FUNCTION: WDA_AddBASessionReqCallback
5143 * send ADD BA SESSION RSP back to PE/(or TL)
5144 */
5145void WDA_AddBASessionReqCallback(
5146 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5147{
5148 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5149 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5150 tWDA_CbContext *pWDA;
5151 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005153 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 if(NULL == pWdaParams)
5155 {
5156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005157 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 VOS_ASSERT(0) ;
5159 return ;
5160 }
5161 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5162 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 if( NULL == pAddBAReqParams )
5164 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005166 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5169 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 return ;
5171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5173 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 /*
5175 * if WDA in update TL state, update TL with BA session parama and send
5176 * another request to HAL(/WDI) (ADD_BA_REQ)
5177 */
5178
5179 if((VOS_STATUS_SUCCESS ==
5180 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5181 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5182 {
5183 /* Update TL with BA info received from HAL/WDI */
5184 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5185 wdiAddBaSession->usBaSessionID,
5186 wdiAddBaSession->ucSTAIdx,
5187 wdiAddBaSession->ucBaTID,
5188 wdiAddBaSession->ucBaBufferSize,
5189 wdiAddBaSession->ucWinSize,
5190 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005191 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5192 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5193 }
5194 else
5195 {
5196 pAddBAReqParams->status =
5197 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5198
5199 /* Setting Flag to indicate that Set BA is success */
5200 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5201 {
5202 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5203 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5204 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005208 /*Reset the WDA state to READY */
5209 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005210 return ;
5211}
5212
Jeff Johnson295189b2012-06-20 16:38:30 -07005213/*
5214 * FUNCTION: WDA_ProcessAddBASessionReq
5215 * Request to WDI to Update the ADDBA REQ params.
5216 */
5217VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5218 tAddBAParams *pAddBAReqParams)
5219{
5220 WDI_Status status = WDI_STATUS_SUCCESS ;
5221 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5222 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5223 sizeof(WDI_AddBASessionReqParamsType)) ;
5224 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 if(NULL == wdiAddBASessionReqParam)
5228 {
5229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005231 VOS_ASSERT(0);
5232 return VOS_STATUS_E_NOMEM;
5233 }
5234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5235 if(NULL == pWdaParams)
5236 {
5237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 VOS_ASSERT(0);
5240 vos_mem_free(wdiAddBASessionReqParam);
5241 return VOS_STATUS_E_NOMEM;
5242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005243 /*
5244 * Populate ADD BA parameters and pass these paarmeters to WDI.
5245 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5246 * the state to track if these is BA recipient case or BA initiator
5247 * case.
5248 */
5249 do
5250 {
5251 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5252 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5253 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5254 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5255 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5256 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5257 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005259 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5260 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5261 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5262 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5263 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 /* check the BA direction and update state accordingly */
5265 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5266 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5267 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5268
5269 }while(0) ;
5270 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 pWdaParams->pWdaContext = pWDA;
5272 /* Store ADD BA pointer, as this will be used for response */
5273 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5274 /* store Params pass it to WDI */
5275 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005276 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5277 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005278 if(IS_WDI_STATUS_FAILURE(status))
5279 {
5280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5281 "Failure in ADD BA Session REQ Params WDI API, free all the memory " );
5282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5283 vos_mem_free(pWdaParams->wdaMsgParam);
5284 vos_mem_free(pWdaParams);
5285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005287}
Jeff Johnson295189b2012-06-20 16:38:30 -07005288/*
5289 * FUNCTION: WDA_DelBANotifyTL
5290 * send DEL BA IND to TL
5291 */
5292void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5293 tDelBAParams *pDelBAReqParams)
5294{
5295 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5296 //tSirMsgQ msg;
5297 vos_msg_t vosMsg;
5298 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 if(NULL == pDelBAInd)
5300 {
5301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005303 VOS_ASSERT(0) ;
5304 return;
5305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5307 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5308 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5309 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005310
Jeff Johnson295189b2012-06-20 16:38:30 -07005311
5312 vosMsg.type = WDA_DELETEBA_IND;
5313 vosMsg.bodyptr = pDelBAInd;
5314 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5315 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5316 {
5317 vosStatus = VOS_STATUS_E_BADMSG;
5318 }
5319}
Jeff Johnson295189b2012-06-20 16:38:30 -07005320/*
5321 * FUNCTION: WDA_DelBAReqCallback
5322 * send DEL BA RSP back to PE
5323 */
5324void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5325{
5326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5327 tWDA_CbContext *pWDA;
5328 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005330 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 if(NULL == pWdaParams)
5332 {
5333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005334 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005335 VOS_ASSERT(0) ;
5336 return ;
5337 }
5338 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5339 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005340 /* Notify TL about DEL BA in case of recipinet */
5341 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5342 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5343 {
5344 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005346 /*
5347 * No respone required for WDA_DELBA_IND so just free the request
5348 * param here
5349 */
5350 vos_mem_free(pDelBAReqParams);
5351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5352 vos_mem_free(pWdaParams);
5353 return ;
5354}
5355
Jeff Johnson295189b2012-06-20 16:38:30 -07005356/*
5357 * FUNCTION: WDA_ProcessDelBAReq
5358 * Request to WDI to Update the DELBA REQ params.
5359 */
5360VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5361 tDelBAParams *pDelBAReqParams)
5362{
5363 WDI_Status status = WDI_STATUS_SUCCESS ;
5364 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5365 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5366 sizeof(WDI_DelBAReqParamsType)) ;
5367 tWDA_ReqParams *pWdaParams ;
5368 tANI_U16 staIdx = 0;
5369 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005371 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 if(NULL == wdiDelBAReqParam)
5373 {
5374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005376 VOS_ASSERT(0);
5377 return VOS_STATUS_E_NOMEM;
5378 }
5379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5380 if(NULL == pWdaParams)
5381 {
5382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005384 VOS_ASSERT(0);
5385 vos_mem_free(wdiDelBAReqParam);
5386 return VOS_STATUS_E_NOMEM;
5387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5389 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5390 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5391 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 pWdaParams->pWdaContext = pWDA;
5393 /* Store DEL BA pointer, as this will be used for response */
5394 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005395 /* store Params pass it to WDI */
5396 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5398 * maintained in WDA, so that WDA can retry for another BA session
5399 */
5400 staIdx = pDelBAReqParams->staIdx;
5401 tid = pDelBAReqParams->baTID;
5402 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 status = WDI_DelBAReq(wdiDelBAReqParam,
5404 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005405 if(IS_WDI_STATUS_FAILURE(status))
5406 {
5407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5408 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5410 vos_mem_free(pWdaParams->wdaMsgParam);
5411 vos_mem_free(pWdaParams);
5412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005414}
Jeff Johnson295189b2012-06-20 16:38:30 -07005415/*
5416 * FUNCTION: WDA_AddTSReqCallback
5417 * send ADD TS RSP back to PE
5418 */
5419void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5420{
5421 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5422 tWDA_CbContext *pWDA;
5423 tAddTsParams *pAddTsReqParams;
5424
5425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005426 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 if(NULL == pWdaParams)
5428 {
5429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005430 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 VOS_ASSERT(0) ;
5432 return ;
5433 }
5434 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5435 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5437 vos_mem_free(pWdaParams);
5438
5439 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 return ;
5442}
5443
Jeff Johnson295189b2012-06-20 16:38:30 -07005444/*
5445 * FUNCTION: WDA_ProcessAddTSReq
5446 * Request to WDI to Update the ADD TS REQ params.
5447 */
5448VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5449 tAddTsParams *pAddTsReqParams)
5450{
5451 WDI_Status status = WDI_STATUS_SUCCESS ;
5452 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5453 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5454 sizeof(WDI_AddTSReqParamsType)) ;
5455 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005458 if(NULL == wdiAddTSReqParam)
5459 {
5460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005462 VOS_ASSERT(0);
5463 return VOS_STATUS_E_NOMEM;
5464 }
5465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5466 if(NULL == pWdaParams)
5467 {
5468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005470 VOS_ASSERT(0);
5471 vos_mem_free(wdiAddTSReqParam);
5472 return VOS_STATUS_E_NOMEM;
5473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5475 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 //TS IE
5477 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5478 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5479 pAddTsReqParams->tspec.length;
5480
5481 //TS IE : TS INFO : TRAFFIC
5482 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5483 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5484 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5485 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5486 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5487 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5488 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5489 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5490 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5491 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5492 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5493 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5494 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5495 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5496 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5497 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5498
5499 //TS IE : TS INFO : SCHEDULE
5500 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5501 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5502 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5503 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005504 //TS IE
5505 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5506 pAddTsReqParams->tspec.nomMsduSz;
5507 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5508 pAddTsReqParams->tspec.maxMsduSz;
5509 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5510 pAddTsReqParams->tspec.minSvcInterval;
5511 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5512 pAddTsReqParams->tspec.maxSvcInterval;
5513 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5514 pAddTsReqParams->tspec.inactInterval;
5515 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5516 pAddTsReqParams->tspec.suspendInterval;
5517 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5518 pAddTsReqParams->tspec.svcStartTime;
5519 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5520 pAddTsReqParams->tspec.minDataRate;
5521 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5522 pAddTsReqParams->tspec.meanDataRate;
5523 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5524 pAddTsReqParams->tspec.peakDataRate;
5525 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5526 pAddTsReqParams->tspec.maxBurstSz;
5527 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5528 pAddTsReqParams->tspec.delayBound;
5529 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5530 pAddTsReqParams->tspec.minPhyRate;
5531 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5532 pAddTsReqParams->tspec.surplusBw;
5533 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5534 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 /* TODO: tAddTsParams doesn't have the following fields */
5536#if 0
5537 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5538 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5539 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5540 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5541#endif
5542 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5543
5544 pWdaParams->pWdaContext = pWDA;
5545 /* Store ADD TS pointer, as this will be used for response */
5546 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 /* store Params pass it to WDI */
5548 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 status = WDI_AddTSReq(wdiAddTSReqParam,
5550 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005551 if(IS_WDI_STATUS_FAILURE(status))
5552 {
5553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5554 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5556 vos_mem_free(pWdaParams);
5557 pAddTsReqParams->status = eSIR_FAILURE ;
5558 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005560 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005561}
5562
Jeff Johnson295189b2012-06-20 16:38:30 -07005563/*
5564 * FUNCTION: WDA_DelTSReqCallback
5565 * send DEL TS RSP back to PE
5566 */
5567void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5568{
5569 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005571 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5573 vos_mem_free(pWdaParams->wdaMsgParam) ;
5574 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005575 /*
5576 * No respone required for WDA_DEL_TS_REQ so just free the request
5577 * param here
5578 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005579 return ;
5580}
5581
Jeff Johnson295189b2012-06-20 16:38:30 -07005582/*
5583 * FUNCTION: WDA_ProcessDelTSReq
5584 * Request to WDI to Update the DELTS REQ params.
5585 */
5586VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5587 tDelTsParams *pDelTSReqParams)
5588{
5589 WDI_Status status = WDI_STATUS_SUCCESS ;
5590 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5591 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5592 sizeof(WDI_DelTSReqParamsType)) ;
5593 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005595 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005596 if(NULL == wdiDelTSReqParam)
5597 {
5598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005600 VOS_ASSERT(0);
5601 return VOS_STATUS_E_NOMEM;
5602 }
5603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5604 if(NULL == pWdaParams)
5605 {
5606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 VOS_ASSERT(0);
5609 vos_mem_free(wdiDelTSReqParam);
5610 return VOS_STATUS_E_NOMEM;
5611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005612 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5613 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5614 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5615 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5616 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005617 pWdaParams->pWdaContext = pWDA;
5618 /* Store DEL TS pointer, as this will be used for response */
5619 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 /* store Params pass it to WDI */
5621 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 status = WDI_DelTSReq(wdiDelTSReqParam,
5623 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005624 if(IS_WDI_STATUS_FAILURE(status))
5625 {
5626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5627 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5629 vos_mem_free(pWdaParams->wdaMsgParam);
5630 vos_mem_free(pWdaParams);
5631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005633}
Jeff Johnson295189b2012-06-20 16:38:30 -07005634/*
5635 * FUNCTION: WDA_UpdateBeaconParamsCallback
5636 * Free the memory. No need to send any response to PE in this case
5637 */
5638void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5639{
5640 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005642 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005643 if(NULL == pWdaParams)
5644 {
5645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005646 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 VOS_ASSERT(0) ;
5648 return ;
5649 }
5650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5651 vos_mem_free(pWdaParams->wdaMsgParam) ;
5652 vos_mem_free(pWdaParams);
5653 /*
5654 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5655 * param here
5656 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005657 return ;
5658}
Jeff Johnson295189b2012-06-20 16:38:30 -07005659/*
5660 * FUNCTION: WDA_ProcessUpdateBeaconParams
5661 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5662 */
5663VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5664 tUpdateBeaconParams *pUpdateBeaconParams)
5665{
5666 WDI_Status status = WDI_STATUS_SUCCESS ;
5667 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5668 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5669 sizeof(WDI_UpdateBeaconParamsType)) ;
5670 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005672 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 if(NULL == wdiUpdateBeaconParams)
5674 {
5675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 VOS_ASSERT(0);
5678 return VOS_STATUS_E_NOMEM;
5679 }
5680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5681 if(NULL == pWdaParams)
5682 {
5683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005685 VOS_ASSERT(0);
5686 vos_mem_free(wdiUpdateBeaconParams);
5687 return VOS_STATUS_E_NOMEM;
5688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5690 pUpdateBeaconParams->bssIdx;
5691 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5692 pUpdateBeaconParams->fShortPreamble;
5693 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5694 pUpdateBeaconParams->fShortSlotTime;
5695 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5696 pUpdateBeaconParams->beaconInterval;
5697 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5698 pUpdateBeaconParams->llaCoexist;
5699 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5700 pUpdateBeaconParams->llbCoexist;
5701 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5702 pUpdateBeaconParams->llgCoexist;
5703 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5704 pUpdateBeaconParams->ht20MhzCoexist;
5705 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5706 pUpdateBeaconParams->llnNonGFCoexist;
5707 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5708 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5709 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5710 pUpdateBeaconParams->fRIFSMode;
5711 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5712 pUpdateBeaconParams->paramChangeBitmap;
5713 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5714
5715 pWdaParams->pWdaContext = pWDA;
5716 /* Store UpdateBeacon Req pointer, as this will be used for response */
5717 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 /* store Params pass it to WDI */
5719 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005720 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5721 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5722 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005723 if(IS_WDI_STATUS_FAILURE(status))
5724 {
5725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5726 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5727 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5728 vos_mem_free(pWdaParams->wdaMsgParam);
5729 vos_mem_free(pWdaParams);
5730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005732}
Jeff Johnson295189b2012-06-20 16:38:30 -07005733#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005734/*
5735 * FUNCTION: WDA_TSMStatsReqCallback
5736 * send TSM Stats RSP back to PE
5737 */
5738void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5739{
5740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5741 tWDA_CbContext *pWDA = NULL;
5742 tTSMStats *pTsmRspParams = NULL;
5743
5744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005745 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 if(NULL == pWdaParams)
5747 {
5748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005749 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005750 VOS_ASSERT(0) ;
5751 return ;
5752 }
5753 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5754 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005755 if( NULL == pTsmRspParams )
5756 {
5757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005758 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 VOS_ASSERT( 0 );
5760 return ;
5761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5763 vos_mem_free(pWdaParams);
5764
5765 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5766 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5767 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5768 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5769 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5770 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5771 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5772 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5773 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5774 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005776 return ;
5777}
5778
5779
Jeff Johnson295189b2012-06-20 16:38:30 -07005780/*
5781 * FUNCTION: WDA_ProcessTsmStatsReq
5782 * Request to WDI to get the TSM Stats params.
5783 */
5784VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5785 tTSMStats *pTsmStats)
5786{
5787 WDI_Status status = WDI_STATUS_SUCCESS ;
5788 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5789 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005791 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005792 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5793 sizeof(WDI_TSMStatsReqParamsType));
5794 if(NULL == wdiTSMReqParam)
5795 {
5796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005797 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005798 VOS_ASSERT(0);
5799 return VOS_STATUS_E_NOMEM;
5800 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5802 if(NULL == pWdaParams)
5803 {
5804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005805 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005806 VOS_ASSERT(0);
5807 vos_mem_free(wdiTSMReqParam);
5808 return VOS_STATUS_E_NOMEM;
5809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005810 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5811 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5812 pTsmStats->bssId,
5813 sizeof(wpt_macAddr));
5814 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5815
5816 pWdaParams->pWdaContext = pWDA;
5817 /* Store TSM Stats pointer, as this will be used for response */
5818 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005819 /* store Params pass it to WDI */
5820 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005821 status = WDI_TSMStatsReq(wdiTSMReqParam,
5822 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005823 if(IS_WDI_STATUS_FAILURE(status))
5824 {
5825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5826 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5828 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005829 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 return CONVERT_WDI2VOS_STATUS(status) ;
5832}
5833#endif
5834/*
5835 * FUNCTION: WDA_SendBeaconParamsCallback
5836 * No need to send any response to PE in this case
5837 */
5838void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5839{
5840
Jeff Johnson295189b2012-06-20 16:38:30 -07005841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005842 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005843 return ;
5844}
Jeff Johnson295189b2012-06-20 16:38:30 -07005845/*
5846 * FUNCTION: WDA_ProcessSendBeacon
5847 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5848 * start beacon trasmission
5849 */
5850VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5851 tSendbeaconParams *pSendbeaconParams)
5852{
5853 WDI_Status status = WDI_STATUS_SUCCESS ;
5854 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005856 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5858 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5859 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5860 pSendbeaconParams->beaconLength;
5861#ifdef WLAN_SOFTAP_FEATURE
5862 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5863 pSendbeaconParams->timIeOffset;
5864#endif
5865#ifdef WLAN_FEATURE_P2P
5866 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5867 pSendbeaconParams->p2pIeOffset;
5868#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 /* Copy the beacon template to local buffer */
5870 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5871 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5872 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5873
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5875 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005876 if(IS_WDI_STATUS_FAILURE(status))
5877 {
5878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5879 "Failure in SEND BEACON REQ Params WDI API" );
5880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005881 vos_mem_free(pSendbeaconParams);
5882 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005883}
Jeff Johnson295189b2012-06-20 16:38:30 -07005884/*
5885 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5886 * No need to send any response to PE in this case
5887 */
5888void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5889{
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005891 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 return ;
5893}
5894
Jeff Johnson295189b2012-06-20 16:38:30 -07005895/*
5896 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5897 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5898 * send probe response
5899 */
5900VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5901 tSendProbeRespParams *pSendProbeRspParams)
5902{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005903 WDI_Status status = WDI_STATUS_SUCCESS;
5904 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5905 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005907 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005908
5909 if (!wdiSendProbeRspParam)
5910 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5911
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005913 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005915 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 /* Copy the Probe Response template to local buffer */
5918 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005919 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 pSendProbeRspParams->pProbeRespTemplate,
5921 pSendProbeRspParams->probeRespTemplateLen);
5922 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005923 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5925 WDI_PROBE_REQ_BITMAP_IE_LEN);
5926
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005927 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005928
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005929 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 if(IS_WDI_STATUS_FAILURE(status))
5932 {
5933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5934 "Failure in SEND Probe RSP Params WDI API" );
5935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005937 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939}
Jeff Johnson295189b2012-06-20 16:38:30 -07005940#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5941/*
5942 * FUNCTION: WDA_SetMaxTxPowerCallBack
5943 * send the response to PE with power value received from WDI
5944 */
5945void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5946 void* pUserData)
5947{
5948 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5949 tWDA_CbContext *pWDA = NULL;
5950 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5951
5952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 if(NULL == pWdaParams)
5955 {
5956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005957 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 VOS_ASSERT(0) ;
5959 return ;
5960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5962 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 if( NULL == pMaxTxPowerParams )
5964 {
5965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005966 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005967 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5969 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 return ;
5971 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005972
Jeff Johnson295189b2012-06-20 16:38:30 -07005973
5974 /*need to free memory for the pointers used in the
5975 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5977 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005978 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005979
Jeff Johnson295189b2012-06-20 16:38:30 -07005980
5981 /* send response to UMAC*/
5982 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5983
5984 return;
5985}
Jeff Johnson295189b2012-06-20 16:38:30 -07005986/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005987 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 * Request to WDI to send set Max Tx Power Request
5989 */
5990 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5991 tMaxTxPowerParams *MaxTxPowerParams)
5992{
5993 WDI_Status status = WDI_STATUS_SUCCESS;
5994 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5995 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005996
Jeff Johnson295189b2012-06-20 16:38:30 -07005997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005998 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005999
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6001 sizeof(WDI_SetMaxTxPowerParamsType));
6002 if(NULL == wdiSetMaxTxPowerParams)
6003 {
6004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 VOS_ASSERT(0);
6007 return VOS_STATUS_E_NOMEM;
6008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6010 if(NULL == pWdaParams)
6011 {
6012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006013 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 vos_mem_free(wdiSetMaxTxPowerParams);
6015 VOS_ASSERT(0);
6016 return VOS_STATUS_E_NOMEM;
6017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 /* Copy.Max.Tx.Power Params to WDI structure */
6019 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6020 MaxTxPowerParams->bssId,
6021 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006022 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6023 MaxTxPowerParams->selfStaMacAddr,
6024 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6026 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006027 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 pWdaParams->pWdaContext = pWDA;
6029 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 /* store Params pass it to WDI */
6031 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6033 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 if(IS_WDI_STATUS_FAILURE(status))
6035 {
6036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6037 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6039 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006040 /* send response to UMAC*/
6041 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 }
6043 return CONVERT_WDI2VOS_STATUS(status);
6044
6045}
Jeff Johnson295189b2012-06-20 16:38:30 -07006046#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006047#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07006048/*
6049 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6050 * Free the memory. No need to send any response to PE in this case
6051 */
6052void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6053{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6055
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006057 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006058
6059 if(NULL == pWdaParams)
6060 {
6061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006062 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006063 VOS_ASSERT(0) ;
6064 return ;
6065 }
6066
6067 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6068 vos_mem_free(pWdaParams->wdaMsgParam) ;
6069 vos_mem_free(pWdaParams);
6070
Jeff Johnson295189b2012-06-20 16:38:30 -07006071 /*
6072 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6073 * so just free the request param here
6074 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 return ;
6076}
6077
Jeff Johnson295189b2012-06-20 16:38:30 -07006078/*
6079 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6080 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6081 */
6082VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6083 tP2pPsParams *pP2pPsConfigParams)
6084{
6085 WDI_Status status = WDI_STATUS_SUCCESS ;
6086 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6087 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6088 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006089 tWDA_ReqParams *pWdaParams = NULL;
6090
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006092 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006093 if(NULL == wdiSetP2PGONOAReqParam)
6094 {
6095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 VOS_ASSERT(0);
6098 return VOS_STATUS_E_NOMEM;
6099 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006100
6101 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6102 if(NULL == pWdaParams)
6103 {
6104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006105 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006106 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006107 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006108 VOS_ASSERT(0);
6109 return VOS_STATUS_E_NOMEM;
6110 }
6111
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6113 pP2pPsConfigParams->opp_ps;
6114 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6115 pP2pPsConfigParams->ctWindow;
6116 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6117 pP2pPsConfigParams->count;
6118 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6119 pP2pPsConfigParams->duration;
6120 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6121 pP2pPsConfigParams->interval;
6122 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6123 pP2pPsConfigParams->single_noa_duration;
6124 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6125 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006126
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6128 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006129 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6130
Jeff Johnson295189b2012-06-20 16:38:30 -07006131 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006132 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6133 pWdaParams->pWdaContext = pWDA;
6134
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006136 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6137
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 if(IS_WDI_STATUS_FAILURE(status))
6139 {
6140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6141 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6143 vos_mem_free(pWdaParams->wdaMsgParam);
6144 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 return CONVERT_WDI2VOS_STATUS(status);
6147
Jeff Johnson295189b2012-06-20 16:38:30 -07006148}
6149#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006150#ifdef WLAN_FEATURE_VOWIFI_11R
6151/*
6152 * FUNCTION: WDA_AggrAddTSReqCallback
6153 * send ADD AGGREGATED TS RSP back to PE
6154 */
6155void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6156{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006157 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6158 tWDA_CbContext *pWDA;
6159 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006162 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006163 if(NULL == pWdaParams)
6164 {
6165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006166 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006167 VOS_ASSERT(0) ;
6168 return ;
6169 }
6170
6171 pWDA = pWdaParams->pWdaContext;
6172 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006173
6174 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6175 {
6176 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006178 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006179
6180 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6181 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 return ;
6183}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006184/*
6185 * FUNCTION: WDA_ProcessAddTSReq
6186 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6187 */
6188VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6189 tAggrAddTsParams *pAggrAddTsReqParams)
6190{
6191 WDI_Status status = WDI_STATUS_SUCCESS ;
6192 int i;
6193 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006194 tWDA_ReqParams *pWdaParams = NULL;
6195
6196
Jeff Johnson295189b2012-06-20 16:38:30 -07006197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006198 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6200 sizeof(WDI_AggrAddTSReqParamsType)) ;
6201 if(NULL == wdiAggrAddTSReqParam)
6202 {
6203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006204 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 VOS_ASSERT(0);
6206 return VOS_STATUS_E_NOMEM;
6207 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006208
6209
6210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6211 if(NULL == pWdaParams)
6212 {
6213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006214 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006215 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006216 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006217 VOS_ASSERT(0);
6218 return VOS_STATUS_E_NOMEM;
6219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006220 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6221 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6222 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006223 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6224 {
6225 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6226 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6227 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6229 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6230 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6231 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6232 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6233 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6234 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6235 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6236 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6237 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6238 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6239 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6240 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6241 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6242 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6243 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006244 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6245 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006246 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6247 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6248 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6249 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6250 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6251 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6252 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6253 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6254 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6255 pAggrAddTsReqParams->tspec[i].inactInterval;
6256 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6257 pAggrAddTsReqParams->tspec[i].suspendInterval;
6258 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6259 pAggrAddTsReqParams->tspec[i].svcStartTime;
6260 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6261 pAggrAddTsReqParams->tspec[i].minDataRate;
6262 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6263 pAggrAddTsReqParams->tspec[i].meanDataRate;
6264 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6265 pAggrAddTsReqParams->tspec[i].peakDataRate;
6266 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6267 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6268 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6269 pAggrAddTsReqParams->tspec[i].delayBound;
6270 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6271 pAggrAddTsReqParams->tspec[i].minPhyRate;
6272 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6273 pAggrAddTsReqParams->tspec[i].surplusBw;
6274 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6275 pAggrAddTsReqParams->tspec[i].mediumTime;
6276 }
6277
6278 /* TODO: tAggrAddTsParams doesn't have the following fields */
6279#if 0
6280 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6281 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6282 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6283 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6284#endif
6285 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6286
6287 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006288 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006289 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006290 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6291
6292 pWdaParams->pWdaContext = pWDA;
6293
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006295 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6296
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 if(IS_WDI_STATUS_FAILURE(status))
6298 {
6299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6300 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6302 vos_mem_free(pWdaParams);
6303
6304 /* send the failure response back to PE*/
6305 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6306 {
6307 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6308 }
6309
6310 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6311 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006313 return CONVERT_WDI2VOS_STATUS(status) ;
6314}
6315#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006316/*
6317 * FUNCTION: WDA_EnterImpsReqCallback
6318 * send Enter IMPS RSP back to PE
6319 */
6320void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6321{
6322 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006324 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006325 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 return ;
6327}
Jeff Johnson295189b2012-06-20 16:38:30 -07006328/*
6329 * FUNCTION: WDA_ProcessEnterImpsReq
6330 * Request to WDI to Enter IMPS power state.
6331 */
6332VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6333{
6334 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006336 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006337 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 if(IS_WDI_STATUS_FAILURE(status))
6339 {
6340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6341 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006342 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 return CONVERT_WDI2VOS_STATUS(status) ;
6345}
Jeff Johnson295189b2012-06-20 16:38:30 -07006346/*
6347 * FUNCTION: WDA_ExitImpsReqCallback
6348 * send Exit IMPS RSP back to PE
6349 */
6350void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6351{
6352 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006354 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006355 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 return ;
6357}
Jeff Johnson295189b2012-06-20 16:38:30 -07006358/*
6359 * FUNCTION: WDA_ProcessExitImpsReq
6360 * Request to WDI to Exit IMPS power state.
6361 */
6362VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6363{
6364 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006366 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 if(IS_WDI_STATUS_FAILURE(status))
6369 {
6370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6371 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006372 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 return CONVERT_WDI2VOS_STATUS(status) ;
6375}
Jeff Johnson295189b2012-06-20 16:38:30 -07006376/*
6377 * FUNCTION: WDA_EnterBmpsReqCallback
6378 * send Enter BMPS RSP back to PE
6379 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006380void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006381{
6382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6383 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006384 tEnterBmpsParams *pEnterBmpsRspParams;
6385
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006387 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006388 if(NULL == pWdaParams)
6389 {
6390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006391 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 VOS_ASSERT(0) ;
6393 return ;
6394 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006395
6396 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6397 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6398
6399 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6400 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6401
6402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006404 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6405
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 return ;
6407}
Jeff Johnson295189b2012-06-20 16:38:30 -07006408/*
6409 * FUNCTION: WDA_ProcessEnterBmpsReq
6410 * Request to WDI to Enter BMPS power state.
6411 */
6412VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6413 tEnterBmpsParams *pEnterBmpsReqParams)
6414{
6415 WDI_Status status = WDI_STATUS_SUCCESS;
6416 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6417 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006419 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6421 {
6422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006423 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006424 VOS_ASSERT(0);
6425 return VOS_STATUS_E_FAILURE;
6426 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6428 if (NULL == wdiEnterBmpsReqParams)
6429 {
6430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006433 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6434 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006435 return VOS_STATUS_E_NOMEM;
6436 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6438 if (NULL == pWdaParams)
6439 {
6440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006441 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006442 VOS_ASSERT(0);
6443 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006444 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6445 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 return VOS_STATUS_E_NOMEM;
6447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006448 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6449 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6450 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6451 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 // For CCX and 11R Roaming
6453 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6454 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6455 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6456 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006457
Jeff Johnson295189b2012-06-20 16:38:30 -07006458 /* Store param pointer as passed in by caller */
6459 /* store Params pass it to WDI */
6460 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006461 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6464 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 if (IS_WDI_STATUS_FAILURE(status))
6466 {
6467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6468 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006470 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006472 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 return CONVERT_WDI2VOS_STATUS(status);
6475}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006476
6477
6478static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6479 WDI_Status wdiStatus,
6480 tExitBmpsParams *pExitBmpsReqParams)
6481{
6482 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6483
6484 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6485}
6486
6487
Jeff Johnson295189b2012-06-20 16:38:30 -07006488/*
6489 * FUNCTION: WDA_ExitBmpsReqCallback
6490 * send Exit BMPS RSP back to PE
6491 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006492void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006493{
6494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6495 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006496 tExitBmpsParams *pExitBmpsRspParams;
6497
Jeff Johnson295189b2012-06-20 16:38:30 -07006498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006499 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006500 if(NULL == pWdaParams)
6501 {
6502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006503 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 VOS_ASSERT(0) ;
6505 return ;
6506 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006507
6508 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6509 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6510
6511 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6512 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006513
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6515 vos_mem_free(pWdaParams) ;
6516
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006517 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 return ;
6519}
Jeff Johnson295189b2012-06-20 16:38:30 -07006520/*
6521 * FUNCTION: WDA_ProcessExitBmpsReq
6522 * Request to WDI to Exit BMPS power state.
6523 */
6524VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6525 tExitBmpsParams *pExitBmpsReqParams)
6526{
6527 WDI_Status status = WDI_STATUS_SUCCESS ;
6528 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6529 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6530 sizeof(WDI_ExitBmpsReqParamsType)) ;
6531 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006533 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 if(NULL == wdiExitBmpsReqParams)
6535 {
6536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006539 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006540 return VOS_STATUS_E_NOMEM;
6541 }
6542 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6543 if(NULL == pWdaParams)
6544 {
6545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006546 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006547 VOS_ASSERT(0);
6548 vos_mem_free(wdiExitBmpsReqParams);
6549 return VOS_STATUS_E_NOMEM;
6550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006551 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006552
6553 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6554
Jeff Johnson295189b2012-06-20 16:38:30 -07006555 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6556
6557 /* Store param pointer as passed in by caller */
6558 /* store Params pass it to WDI */
6559 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6560 pWdaParams->pWdaContext = pWDA;
6561 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006562 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6563 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 if(IS_WDI_STATUS_FAILURE(status))
6565 {
6566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6567 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6569 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006570 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006572 return CONVERT_WDI2VOS_STATUS(status) ;
6573}
Jeff Johnson295189b2012-06-20 16:38:30 -07006574/*
6575 * FUNCTION: WDA_EnterUapsdReqCallback
6576 * send Enter UAPSD RSP back to PE
6577 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006578void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006579{
6580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6581 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006582 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006584 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006585 if(NULL == pWdaParams)
6586 {
6587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006588 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 VOS_ASSERT(0) ;
6590 return ;
6591 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006592
6593 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6594 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6595
6596 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6597 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6598
Jeff Johnson295189b2012-06-20 16:38:30 -07006599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6600 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006601 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 return ;
6603}
Jeff Johnson295189b2012-06-20 16:38:30 -07006604/*
6605 * FUNCTION: WDA_ProcessEnterUapsdReq
6606 * Request to WDI to Enter UAPSD power state.
6607 */
6608VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6609 tUapsdParams *pEnterUapsdReqParams)
6610{
6611 WDI_Status status = WDI_STATUS_SUCCESS ;
6612 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6613 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6614 sizeof(WDI_EnterUapsdReqParamsType)) ;
6615 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006617 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 if(NULL == wdiEnterUapsdReqParams)
6619 {
6620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006622 VOS_ASSERT(0);
6623 return VOS_STATUS_E_NOMEM;
6624 }
6625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6626 if(NULL == pWdaParams)
6627 {
6628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006630 VOS_ASSERT(0);
6631 vos_mem_free(wdiEnterUapsdReqParams);
6632 return VOS_STATUS_E_NOMEM;
6633 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006634 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6635 pEnterUapsdReqParams->beDeliveryEnabled;
6636 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6637 pEnterUapsdReqParams->beTriggerEnabled;
6638 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6639 pEnterUapsdReqParams->bkDeliveryEnabled;
6640 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6641 pEnterUapsdReqParams->bkTriggerEnabled;
6642 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6643 pEnterUapsdReqParams->viDeliveryEnabled;
6644 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6645 pEnterUapsdReqParams->viTriggerEnabled;
6646 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6647 pEnterUapsdReqParams->voDeliveryEnabled;
6648 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6649 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006650 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006651
6652 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6653
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 /* Store param pointer as passed in by caller */
6655 /* store Params pass it to WDI */
6656 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6657 pWdaParams->pWdaContext = pWDA;
6658 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6660 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006661 if(IS_WDI_STATUS_FAILURE(status))
6662 {
6663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6664 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6665 vos_mem_free(pWdaParams->wdaMsgParam) ;
6666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6667 vos_mem_free(pWdaParams) ;
6668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006669 return CONVERT_WDI2VOS_STATUS(status) ;
6670}
Jeff Johnson295189b2012-06-20 16:38:30 -07006671/*
6672 * FUNCTION: WDA_ExitUapsdReqCallback
6673 * send Exit UAPSD RSP back to PE
6674 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006675void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006676{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006677
6678 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6679 tWDA_CbContext *pWDA;
6680 tExitUapsdParams *pExitUapsdRspParams;
6681
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006683 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006684 if(NULL == pWdaParams)
6685 {
6686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006687 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006688 VOS_ASSERT(0);
6689 return;
6690 }
6691
6692 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6693 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6694
6695 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6696 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6697
6698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6699 vos_mem_free(pWdaParams) ;
6700
6701 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006702 return ;
6703}
Jeff Johnson295189b2012-06-20 16:38:30 -07006704/*
6705 * FUNCTION: WDA_ProcessExitUapsdReq
6706 * Request to WDI to Exit UAPSD power state.
6707 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006708VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6709 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006710{
6711 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006712 tWDA_ReqParams *pWdaParams ;
6713 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6714 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6715 sizeof(WDI_ExitUapsdReqParamsType)) ;
6716
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006718 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006719
6720 if(NULL == wdiExitUapsdReqParams)
6721 {
6722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006723 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006724 VOS_ASSERT(0);
6725 return VOS_STATUS_E_NOMEM;
6726 }
6727 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6728 if(NULL == pWdaParams)
6729 {
6730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006731 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006732 VOS_ASSERT(0);
6733 vos_mem_free(wdiExitUapsdReqParams);
6734 return VOS_STATUS_E_NOMEM;
6735 }
6736
6737 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6738 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6739
6740 /* Store param pointer as passed in by caller */
6741 /* store Params pass it to WDI */
6742 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6743 pWdaParams->pWdaContext = pWDA;
6744 pWdaParams->wdaMsgParam = pExitUapsdParams;
6745
6746 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 if(IS_WDI_STATUS_FAILURE(status))
6748 {
6749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6750 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006751 vos_mem_free(pWdaParams->wdaMsgParam) ;
6752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6753 vos_mem_free(pWdaParams) ;
6754
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 return CONVERT_WDI2VOS_STATUS(status) ;
6757}
6758
Jeff Johnson295189b2012-06-20 16:38:30 -07006759/*
6760 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6761 *
6762 */
6763void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6764{
6765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006767 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 if(NULL == pWdaParams)
6769 {
6770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006771 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 VOS_ASSERT(0) ;
6773 return ;
6774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 if( pWdaParams != NULL )
6776 {
6777 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6778 {
6779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6780 }
6781 if( pWdaParams->wdaMsgParam != NULL )
6782 {
6783 vos_mem_free(pWdaParams->wdaMsgParam) ;
6784 }
6785 vos_mem_free(pWdaParams) ;
6786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 return ;
6788}
Jeff Johnson295189b2012-06-20 16:38:30 -07006789/*
6790 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6791 * Request to WDI to set the power save params at start.
6792 */
6793VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6794 tSirPowerSaveCfg *pPowerSaveCfg)
6795{
6796 WDI_Status status = WDI_STATUS_SUCCESS ;
6797 tHalCfg *tlvStruct = NULL ;
6798 tANI_U8 *tlvStructStart = NULL ;
6799 v_PVOID_t *configParam;
6800 tANI_U32 configParamSize;
6801 tANI_U32 *configDataValue;
6802 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6803 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006805 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6807 {
6808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006809 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006811 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 return VOS_STATUS_E_FAILURE;
6813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6815 if (NULL == wdiPowerSaveCfg)
6816 {
6817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006818 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006820 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 return VOS_STATUS_E_NOMEM;
6822 }
6823 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6824 if(NULL == pWdaParams)
6825 {
6826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 VOS_ASSERT(0);
6829 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006830 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 return VOS_STATUS_E_NOMEM;
6832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6834 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 if(NULL == configParam)
6836 {
6837 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006838 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006839 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 vos_mem_free(pWdaParams);
6841 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006842 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 return VOS_STATUS_E_NOMEM;
6844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 vos_mem_set(configParam, configParamSize, 0);
6846 wdiPowerSaveCfg->pConfigBuffer = configParam;
6847 tlvStruct = (tHalCfg *)configParam;
6848 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6850 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6851 tlvStruct->length = sizeof(tANI_U32);
6852 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6853 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6855 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006856 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
6857 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6858 tlvStruct->length = sizeof(tANI_U32);
6859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6860 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07006861 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6862 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
6864 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6865 tlvStruct->length = sizeof(tANI_U32);
6866 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6867 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6869 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
6871 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6872 tlvStruct->length = sizeof(tANI_U32);
6873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6874 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6876 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
6878 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6879 tlvStruct->length = sizeof(tANI_U32);
6880 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6881 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6883 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006884 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6885 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6886 tlvStruct->length = sizeof(tANI_U32);
6887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6888 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006889 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6890 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6892 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6893 tlvStruct->length = sizeof(tANI_U32);
6894 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6895 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6897 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
6899 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6900 tlvStruct->length = sizeof(tANI_U32);
6901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6902 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6903 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6904 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006905 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6906 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6907 tlvStruct->length = sizeof(tANI_U32);
6908 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6909 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6910 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6911 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6913 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6914 tlvStruct->length = sizeof(tANI_U32);
6915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6916 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6918 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6920 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6921 tlvStruct->length = sizeof(tANI_U32);
6922 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6923 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6925 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 /* store Params pass it to WDI */
6929 pWdaParams->wdaMsgParam = configParam;
6930 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6931 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6933 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006934 if(IS_WDI_STATUS_FAILURE(status))
6935 {
6936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6937 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6938 vos_mem_free(pWdaParams->wdaMsgParam);
6939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6940 vos_mem_free(pWdaParams);
6941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006943 return CONVERT_WDI2VOS_STATUS(status);
6944}
Jeff Johnson295189b2012-06-20 16:38:30 -07006945/*
6946 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6947 *
6948 */
6949void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6950{
6951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6955 vos_mem_free(pWdaParams);
6956
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 return ;
6958}
Jeff Johnson295189b2012-06-20 16:38:30 -07006959/*
6960 * FUNCTION: WDA_SetUapsdAcParamsReq
6961 * Request to WDI to set the UAPSD params for an ac (sta mode).
6962 */
6963VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6964 tUapsdInfo *pUapsdInfo)
6965{
6966 WDI_Status status = WDI_STATUS_SUCCESS;
6967 tWDA_CbContext *pWDA = NULL ;
6968 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6969 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6970 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6971 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006973 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 if(NULL == wdiUapsdParams)
6975 {
6976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006977 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 VOS_ASSERT(0);
6979 return VOS_STATUS_E_NOMEM;
6980 }
6981 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6982 if(NULL == pWdaParams)
6983 {
6984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006985 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 VOS_ASSERT(0);
6987 vos_mem_free(wdiUapsdParams);
6988 return VOS_STATUS_E_NOMEM;
6989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6991 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6992 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6993 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6994 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6995 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006997 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 pWdaParams->pWdaContext = pWDA;
6999 /* Store param pointer as passed in by caller */
7000 pWdaParams->wdaMsgParam = pUapsdInfo;
7001 /* store Params pass it to WDI */
7002 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
7004 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
7005 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007006 if(IS_WDI_STATUS_FAILURE(status))
7007 {
7008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7009 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7011 vos_mem_free(pWdaParams);
7012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7014 return VOS_STATUS_SUCCESS;
7015 else
7016 return VOS_STATUS_E_FAILURE;
7017
Jeff Johnson295189b2012-06-20 16:38:30 -07007018}
7019/*
7020 * FUNCTION: WDA_ClearUapsdAcParamsReq
7021 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7022 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7023 * and again enter the UPASD with the modified params. Hence the disable
7024 * function was kept empty.
7025 *
7026 */
7027VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7028{
7029 /* do nothing */
7030 return VOS_STATUS_SUCCESS;
7031}
Jeff Johnson295189b2012-06-20 16:38:30 -07007032/*
7033 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7034 *
7035 */
7036void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
7037{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7039
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007041 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007042
7043 if(NULL == pWdaParams)
7044 {
7045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007046 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007047 VOS_ASSERT(0) ;
7048 return ;
7049 }
7050
7051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7052 vos_mem_free(pWdaParams->wdaMsgParam);
7053 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007054
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 //print a msg, nothing else to do
7056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7057 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 return ;
7059}
Jeff Johnson295189b2012-06-20 16:38:30 -07007060/*
7061 * FUNCTION: WDA_UpdateUapsdParamsReq
7062 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7063 */
7064VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7065 tUpdateUapsdParams* pUpdateUapsdInfo)
7066{
7067 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007068 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7070 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7071 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007072 tWDA_ReqParams *pWdaParams = NULL;
7073
Jeff Johnson295189b2012-06-20 16:38:30 -07007074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007075 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 if(NULL == wdiUpdateUapsdParams)
7077 {
7078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007080 VOS_ASSERT(0);
7081 return VOS_STATUS_E_NOMEM;
7082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7084 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7085 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007086
7087 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7088 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007089 {
7090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007091 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007093 vos_mem_free(pUpdateUapsdInfo);
7094 vos_mem_free(wdiUpdateUapsdParams);
7095 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007098 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007100 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7101 pWdaParams->pWdaContext = pWDA;
7102
Jeff Johnson43971f52012-07-17 12:26:56 -07007103 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007104 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7105 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007106
Jeff Johnson43971f52012-07-17 12:26:56 -07007107 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 {
7109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7110 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007111 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7113 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007114 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007116 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007117}
Jeff Johnson295189b2012-06-20 16:38:30 -07007118/*
7119 * FUNCTION: WDA_ConfigureRxpFilterCallback
7120 *
7121 */
7122void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7123{
7124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007126 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007127 if(WDI_STATUS_SUCCESS != wdiStatus)
7128 {
7129 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007130 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 if(NULL == pWdaParams)
7133 {
7134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007135 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 VOS_ASSERT(0) ;
7137 return ;
7138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7140 vos_mem_free(pWdaParams->wdaMsgParam);
7141 vos_mem_free(pWdaParams);
7142 return ;
7143}
Jeff Johnson295189b2012-06-20 16:38:30 -07007144/*
7145 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7146 *
7147 */
7148VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7149 tSirWlanSetRxpFilters *pWlanSuspendParam)
7150{
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007152 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7154 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7155 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7156 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007158 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 if(NULL == wdiRxpFilterParams)
7160 {
7161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 VOS_ASSERT(0);
7164 vos_mem_free(pWlanSuspendParam);
7165 return VOS_STATUS_E_NOMEM;
7166 }
7167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7168 if(NULL == pWdaParams)
7169 {
7170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007171 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 VOS_ASSERT(0);
7173 vos_mem_free(wdiRxpFilterParams);
7174 vos_mem_free(pWlanSuspendParam);
7175 return VOS_STATUS_E_NOMEM;
7176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7178 pWlanSuspendParam->setMcstBcstFilter;
7179 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7180 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7181
7182 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 pWdaParams->pWdaContext = pWDA;
7184 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7185 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007186 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007187 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7188 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007189 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 {
7191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7192 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007193 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7195 vos_mem_free(pWdaParams->wdaMsgParam);
7196 vos_mem_free(pWdaParams);
7197 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007198 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007199}
Jeff Johnson295189b2012-06-20 16:38:30 -07007200/*
7201 * FUNCTION: WDA_WdiIndicationCallback
7202 *
7203 */
7204void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7205 void* pUserData)
7206{
7207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007208 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007209}
Jeff Johnson295189b2012-06-20 16:38:30 -07007210/*
7211 * FUNCTION: WDA_ProcessWlanSuspendInd
7212 *
7213 */
7214VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7215 tSirWlanSuspendParam *pWlanSuspendParam)
7216{
7217 WDI_Status wdiStatus;
7218 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007220 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7222 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7223 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7224 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007226 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7227 if(WDI_STATUS_PENDING == wdiStatus)
7228 {
7229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007230 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007231 }
7232 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7233 {
7234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007235 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 vos_mem_free(pWlanSuspendParam);
7238 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7239}
7240
Jeff Johnson295189b2012-06-20 16:38:30 -07007241/*
7242 * FUNCTION: WDA_ProcessWlanResumeCallback
7243 *
7244 */
7245void WDA_ProcessWlanResumeCallback(
7246 WDI_SuspendResumeRspParamsType *resumeRspParams,
7247 void* pUserData)
7248{
7249 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007251 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007252 if(NULL == pWdaParams)
7253 {
7254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007255 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 VOS_ASSERT(0) ;
7257 return ;
7258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7260 {
7261 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007262 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7265 vos_mem_free(pWdaParams->wdaMsgParam);
7266 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007267 return ;
7268}
Jeff Johnson295189b2012-06-20 16:38:30 -07007269/*
7270 * FUNCTION: WDA_ProcessWlanResumeReq
7271 *
7272 */
7273VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7274 tSirWlanResumeParam *pWlanResumeParam)
7275{
7276 WDI_Status wdiStatus;
7277 WDI_ResumeParamsType *wdiResumeParams =
7278 (WDI_ResumeParamsType *)vos_mem_malloc(
7279 sizeof(WDI_ResumeParamsType) ) ;
7280 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007282 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 if(NULL == wdiResumeParams)
7284 {
7285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 VOS_ASSERT(0);
7288 return VOS_STATUS_E_NOMEM;
7289 }
7290 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7291 if(NULL == pWdaParams)
7292 {
7293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007295 VOS_ASSERT(0);
7296 vos_mem_free(wdiResumeParams);
7297 return VOS_STATUS_E_NOMEM;
7298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007299 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7300 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007302 wdiResumeParams->wdiReqStatusCB = NULL;
7303 pWdaParams->wdaMsgParam = pWlanResumeParam;
7304 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7305 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007306 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7307 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7308 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007309 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7310 {
7311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7312 "Failure in Host Resume REQ WDI API, free all the memory " );
7313 VOS_ASSERT(0);
7314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7315 vos_mem_free(pWdaParams->wdaMsgParam);
7316 vos_mem_free(pWdaParams);
7317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007318 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7319}
7320
Jeff Johnson295189b2012-06-20 16:38:30 -07007321/*
7322 * FUNCTION: WDA_SetBeaconFilterReqCallback
7323 *
7324 */
7325void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7326{
7327 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007329 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 if(NULL == pWdaParams)
7331 {
7332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007333 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007334 VOS_ASSERT(0) ;
7335 return ;
7336 }
7337
7338 vos_mem_free(pWdaParams->wdaMsgParam) ;
7339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7340 vos_mem_free(pWdaParams) ;
7341 /*
7342 * No respone required for SetBeaconFilter req so just free the request
7343 * param here
7344 */
7345
Jeff Johnson295189b2012-06-20 16:38:30 -07007346 return ;
7347}
Jeff Johnson295189b2012-06-20 16:38:30 -07007348/*
7349 * FUNCTION: WDA_SetBeaconFilterReq
7350 * Request to WDI to send the beacon filtering related information.
7351 */
7352VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7353 tBeaconFilterMsg* pBeaconFilterInfo)
7354{
7355 WDI_Status status = WDI_STATUS_SUCCESS;
7356 tANI_U8 *dstPtr, *srcPtr;
7357 tANI_U8 filterLength;
7358 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7359 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7360 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7361 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007363 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007364 if(NULL == wdiBeaconFilterInfo)
7365 {
7366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007368 VOS_ASSERT(0);
7369 return VOS_STATUS_E_NOMEM;
7370 }
7371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7372 if(NULL == pWdaParams)
7373 {
7374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007376 VOS_ASSERT(0);
7377 vos_mem_free(wdiBeaconFilterInfo);
7378 return VOS_STATUS_E_NOMEM;
7379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7381 pBeaconFilterInfo->beaconInterval;
7382 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7383 pBeaconFilterInfo->capabilityInfo;
7384 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7385 pBeaconFilterInfo->capabilityMask;
7386 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007387
7388 //Fill the BssIdx
7389 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7390
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 //Fill structure with info contained in the beaconFilterTable
7392 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7393 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7394 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7395 if(WDI_BEACON_FILTER_LEN < filterLength)
7396 {
7397 filterLength = WDI_BEACON_FILTER_LEN;
7398 }
7399 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7401 /* Store param pointer as passed in by caller */
7402 /* store Params pass it to WDI */
7403 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7404 pWdaParams->pWdaContext = pWDA;
7405 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7406
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7408 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 if(IS_WDI_STATUS_FAILURE(status))
7410 {
7411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7412 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7413 vos_mem_free(pWdaParams->wdaMsgParam) ;
7414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7415 vos_mem_free(pWdaParams) ;
7416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 return CONVERT_WDI2VOS_STATUS(status) ;
7418}
Jeff Johnson295189b2012-06-20 16:38:30 -07007419/*
7420 * FUNCTION: WDA_RemBeaconFilterReqCallback
7421 *
7422 */
7423void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7424{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007425 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7426
Jeff Johnson295189b2012-06-20 16:38:30 -07007427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007428 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007429
7430 if(NULL == pWdaParams)
7431 {
7432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007433 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007434 VOS_ASSERT(0) ;
7435 return ;
7436 }
7437
7438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7439 vos_mem_free(pWdaParams->wdaMsgParam);
7440 vos_mem_free(pWdaParams);
7441
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 //print a msg, nothing else to do
7443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7444 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 return ;
7446}
Jeff Johnson295189b2012-06-20 16:38:30 -07007447 // TODO: PE does not have this feature for now implemented,
7448 // but the support for removing beacon filter exists between
7449 // HAL and FW. This function can be called whenever PE defines
7450 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007451/*
7452 * FUNCTION: WDA_RemBeaconFilterReq
7453 * Request to WDI to send the removal of beacon filtering related information.
7454 */
7455VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7456 tRemBeaconFilterMsg* pBeaconFilterInfo)
7457{
7458 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007459 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7461 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7462 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007463 tWDA_ReqParams *pWdaParams ;
7464
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007466 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 if(NULL == wdiBeaconFilterInfo)
7468 {
7469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 VOS_ASSERT(0);
7472 return VOS_STATUS_E_NOMEM;
7473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7475 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 //Fill structure with info contained in the ucRemIeId
7477 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7478 pBeaconFilterInfo->ucRemIeId,
7479 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7480 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007481
7482 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7483 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007484 {
7485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007488 vos_mem_free(wdiBeaconFilterInfo);
7489 vos_mem_free(pBeaconFilterInfo);
7490 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 }
7492
7493 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007494 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007495 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007496 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7497
7498 pWdaParams->pWdaContext = pWDA;
7499
Jeff Johnson43971f52012-07-17 12:26:56 -07007500 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007501 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007502 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 {
7504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7505 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007506 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7508 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007509 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007511 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007512}
Jeff Johnson295189b2012-06-20 16:38:30 -07007513/*
7514 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7515 *
7516 */
7517void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7518{
7519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007521 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007522 if(NULL == pWdaParams)
7523 {
7524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007525 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 VOS_ASSERT(0) ;
7527 return ;
7528 }
7529
7530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7531 vos_mem_free(pWdaParams) ;
7532
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 return ;
7534}
Jeff Johnson295189b2012-06-20 16:38:30 -07007535/*
7536 * FUNCTION: WDA_SetRSSIThresholdsReq
7537 * Request to WDI to set the RSSI thresholds (sta mode).
7538 */
7539VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7540{
7541 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007542 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007543 tWDA_CbContext *pWDA = NULL ;
7544 v_PVOID_t pVosContext = NULL;
7545 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7546 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7547 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7548 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007550 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 if(NULL == wdiRSSIThresholdsInfo)
7552 {
7553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 VOS_ASSERT(0);
7556 return VOS_STATUS_E_NOMEM;
7557 }
7558 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7559 if(NULL == pWdaParams)
7560 {
7561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 VOS_ASSERT(0);
7564 vos_mem_free(wdiRSSIThresholdsInfo);
7565 return VOS_STATUS_E_NOMEM;
7566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007567 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7569 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7570 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007571 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7572 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7573 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007574 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7575 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7576 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7579 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7580
Jeff Johnson295189b2012-06-20 16:38:30 -07007581 /* Store param pointer as passed in by caller */
7582 /* store Params pass it to WDI */
7583 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7584 pWdaParams->pWdaContext = pWDA;
7585 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007586 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007587 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007588 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 {
7590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7591 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007592 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7594 vos_mem_free(pWdaParams) ;
7595 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007596 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007597
7598}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007599/*
7600 * FUNCTION: WDA_HostOffloadReqCallback
7601 *
7602 */
7603void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7604{
7605 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7606
7607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007608 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007609 if(NULL == pWdaParams)
7610 {
7611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007612 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 VOS_ASSERT(0) ;
7614 return ;
7615 }
7616
7617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7618 vos_mem_free(pWdaParams->wdaMsgParam);
7619 vos_mem_free(pWdaParams) ;
7620
7621 //print a msg, nothing else to do
7622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7623 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 return ;
7625}
Jeff Johnson295189b2012-06-20 16:38:30 -07007626/*
7627 * FUNCTION: WDA_ProcessHostOffloadReq
7628 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7629 * to broadcast traffic (sta mode).
7630 */
7631VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7632 tSirHostOffloadReq *pHostOffloadParams)
7633{
7634 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007635 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007636 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7637 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7638 sizeof(WDI_HostOffloadReqParamsType)) ;
7639 tWDA_ReqParams *pWdaParams ;
7640
7641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007642 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007643
7644 if(NULL == wdiHostOffloadInfo)
7645 {
7646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007647 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007648 VOS_ASSERT(0);
7649 return VOS_STATUS_E_NOMEM;
7650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007651 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7652 if(NULL == pWdaParams)
7653 {
7654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007656 VOS_ASSERT(0);
7657 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007658 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 return VOS_STATUS_E_NOMEM;
7660 }
7661
7662 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7663 pHostOffloadParams->offloadType;
7664 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7665 pHostOffloadParams->enableOrDisable;
7666
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007667 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7668 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7669
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7671 {
7672 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7673 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7674 pHostOffloadParams->params.hostIpv4Addr,
7675 4);
7676 break;
7677 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7678 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7679 pHostOffloadParams->params.hostIpv6Addr,
7680 16);
7681 break;
7682 case SIR_IPV6_NS_OFFLOAD:
7683 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7684 pHostOffloadParams->params.hostIpv6Addr,
7685 16);
7686
7687#ifdef WLAN_NS_OFFLOAD
7688 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7689 {
7690 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7691 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7692 16);
7693 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7694 }
7695 else
7696 {
7697 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7698 }
7699
7700 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7701 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7702 16);
7703 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7704 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7705 6);
7706
7707 //Only two are supported so let's go through them without a loop
7708 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7709 {
7710 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7711 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7712 16);
7713 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7714 }
7715 else
7716 {
7717 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7718 }
7719
7720 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7721 {
7722 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7723 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7724 16);
7725 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7726 }
7727 else
7728 {
7729 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7730 }
7731 break;
7732#endif //WLAN_NS_OFFLOAD
7733 default:
7734 {
7735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7736 "No Handling for Offload Type %x in WDA "
7737 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7738 //WDA_VOS_ASSERT(0) ;
7739 }
7740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007741 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007742
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007744 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 /* store Params pass it to WDI */
7746 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7747 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007748
Jeff Johnson295189b2012-06-20 16:38:30 -07007749
Jeff Johnson43971f52012-07-17 12:26:56 -07007750 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007751 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7752
Jeff Johnson43971f52012-07-17 12:26:56 -07007753 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 {
7755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7756 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007757 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7759 vos_mem_free(pWdaParams->wdaMsgParam);
7760 vos_mem_free(pWdaParams) ;
7761 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007762 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007763
7764}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007765/*
7766 * FUNCTION: WDA_KeepAliveReqCallback
7767 *
7768 */
7769void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7770{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7772
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007774 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007775
7776 if(NULL == pWdaParams)
7777 {
7778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007779 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007780 VOS_ASSERT(0) ;
7781 return ;
7782 }
7783
7784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7785 vos_mem_free(pWdaParams->wdaMsgParam);
7786 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007787
Jeff Johnson295189b2012-06-20 16:38:30 -07007788 //print a msg, nothing else to do
7789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7790 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 return ;
7792}
Jeff Johnson295189b2012-06-20 16:38:30 -07007793/*
7794 * FUNCTION: WDA_ProcessKeepAliveReq
7795 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7796 * wakeup due to broadcast traffic (sta mode).
7797 */
7798VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7799 tSirKeepAliveReq *pKeepAliveParams)
7800{
7801 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007802 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7804 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7805 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007806 tWDA_ReqParams *pWdaParams;
7807
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007809 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 if(NULL == wdiKeepAliveInfo)
7811 {
7812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007815 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007816 return VOS_STATUS_E_NOMEM;
7817 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007818
7819 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7820 if(NULL == pWdaParams)
7821 {
7822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007823 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007824 VOS_ASSERT(0);
7825 vos_mem_free(wdiKeepAliveInfo);
7826 vos_mem_free(pKeepAliveParams);
7827 return VOS_STATUS_E_NOMEM;
7828 }
7829
Jeff Johnson295189b2012-06-20 16:38:30 -07007830 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7831 pKeepAliveParams->packetType;
7832 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7833 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007834
7835 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7836 pKeepAliveParams->bssId,
7837 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007838
7839 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7840 {
7841 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7842 pKeepAliveParams->hostIpv4Addr,
7843 SIR_IPV4_ADDR_LEN);
7844 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7845 pKeepAliveParams->destIpv4Addr,
7846 SIR_IPV4_ADDR_LEN);
7847 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7848 pKeepAliveParams->destMacAddr,
7849 SIR_MAC_ADDR_LEN);
7850 }
7851 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7852 {
7853 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7854 SIR_IPV4_ADDR_LEN,
7855 0);
7856 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7857 SIR_IPV4_ADDR_LEN,
7858 0);
7859 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7860 SIR_MAC_ADDR_LEN,
7861 0);
7862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007863 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007864
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007866 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007867 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007868 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7869 pWdaParams->pWdaContext = pWDA;
7870
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7872 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7873 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7874 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7875 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7877 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7878 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7879 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7880 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7882 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7883 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7884 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7885 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7886 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7887 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7888 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7890 "TimePeriod %d PacketType %d",
7891 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7892 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007893 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007894 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7895
Jeff Johnson43971f52012-07-17 12:26:56 -07007896 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 {
7898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7899 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007900 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7902 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007903 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007905 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007906
7907}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007908/*
7909 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7910 *
7911 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007912void WDA_WowlAddBcPtrnReqCallback(
7913 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7914 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007915{
7916 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007918 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 if(NULL == pWdaParams)
7920 {
7921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007922 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 VOS_ASSERT(0) ;
7924 return ;
7925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7927 vos_mem_free(pWdaParams->wdaMsgParam);
7928 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007929 return ;
7930}
Jeff Johnson295189b2012-06-20 16:38:30 -07007931/*
7932 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7933 * Request to WDI to add WOWL Bcast pattern
7934 */
7935VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7936 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7937{
7938 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007939 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007940 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7941 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7942 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7943 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007945 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007946 if(NULL == wdiWowlAddBcPtrnInfo)
7947 {
7948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 VOS_ASSERT(0);
7951 return VOS_STATUS_E_NOMEM;
7952 }
7953 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7954 if(NULL == pWdaParams)
7955 {
7956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007957 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007958 VOS_ASSERT(0);
7959 vos_mem_free(wdiWowlAddBcPtrnInfo);
7960 return VOS_STATUS_E_NOMEM;
7961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7963 pWowlAddBcPtrnParams->ucPatternId;
7964 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7965 pWowlAddBcPtrnParams->ucPatternByteOffset;
7966 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7967 pWowlAddBcPtrnParams->ucPatternMaskSize;
7968 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7969 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7971 {
7972 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7973 pWowlAddBcPtrnParams->ucPattern,
7974 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7975 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7976 pWowlAddBcPtrnParams->ucPatternMask,
7977 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7978 }
7979 else
7980 {
7981 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7982 pWowlAddBcPtrnParams->ucPattern,
7983 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7984 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7985 pWowlAddBcPtrnParams->ucPatternMask,
7986 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7987
7988 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7989 pWowlAddBcPtrnParams->ucPatternExt,
7990 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7991 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7992 pWowlAddBcPtrnParams->ucPatternMaskExt,
7993 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7994 }
7995
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007996 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7997 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7998
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 /* Store param pointer as passed in by caller */
8001 /* store Params pass it to WDI */
8002 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8003 pWdaParams->pWdaContext = pWDA;
8004 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008005 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008007 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 {
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8010 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008011 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 vos_mem_free(pWdaParams->wdaMsgParam) ;
8013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8014 vos_mem_free(pWdaParams) ;
8015 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008016 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008017
8018}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008019/*
8020 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8021 *
8022 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008023void WDA_WowlDelBcPtrnReqCallback(
8024 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8025 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008026{
8027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008029 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 if(NULL == pWdaParams)
8031 {
8032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008033 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 VOS_ASSERT(0) ;
8035 return ;
8036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8038 vos_mem_free(pWdaParams->wdaMsgParam);
8039 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008040 return ;
8041}
Jeff Johnson295189b2012-06-20 16:38:30 -07008042/*
8043 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8044 * Request to WDI to delete WOWL Bcast pattern
8045 */
8046VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8047 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8048{
8049 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008050 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008051 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8052 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8053 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8054 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008056 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008057 if(NULL == wdiWowlDelBcPtrnInfo)
8058 {
8059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 VOS_ASSERT(0);
8062 return VOS_STATUS_E_NOMEM;
8063 }
8064 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8065 if(NULL == pWdaParams)
8066 {
8067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 VOS_ASSERT(0);
8070 vos_mem_free(wdiWowlDelBcPtrnInfo);
8071 return VOS_STATUS_E_NOMEM;
8072 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8074 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008075
8076 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8077 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8078
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 /* Store param pointer as passed in by caller */
8081 /* store Params pass it to WDI */
8082 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8083 pWdaParams->pWdaContext = pWDA;
8084 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008085 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008087 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 {
8089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8090 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008091 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 vos_mem_free(pWdaParams->wdaMsgParam) ;
8093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8094 vos_mem_free(pWdaParams) ;
8095 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008096 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097
8098}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008099/*
8100 * FUNCTION: WDA_WowlEnterReqCallback
8101 *
8102 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008103void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008104{
8105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8106 tWDA_CbContext *pWDA;
8107 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008109 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008110 if(NULL == pWdaParams)
8111 {
8112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008113 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 VOS_ASSERT(0) ;
8115 return ;
8116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8118 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8119
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008120 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8121
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8123 vos_mem_free(pWdaParams) ;
8124
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008125 pWowlEnterParams->status =
8126 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 return ;
8129}
Jeff Johnson295189b2012-06-20 16:38:30 -07008130/*
8131 * FUNCTION: WDA_ProcessWowlEnterReq
8132 * Request to WDI to enter WOWL
8133 */
8134VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8135 tSirHalWowlEnterParams *pWowlEnterParams)
8136{
8137 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008138 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8140 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8141 sizeof(WDI_WowlEnterReqParamsType)) ;
8142 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008144 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 if(NULL == wdiWowlEnterInfo)
8146 {
8147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008148 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008149 VOS_ASSERT(0);
8150 return VOS_STATUS_E_NOMEM;
8151 }
8152 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8153 if(NULL == pWdaParams)
8154 {
8155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008157 VOS_ASSERT(0);
8158 vos_mem_free(wdiWowlEnterInfo);
8159 return VOS_STATUS_E_NOMEM;
8160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008161 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8162 pWowlEnterParams->magicPtrn,
8163 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8165 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8167 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8169 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8171 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008172 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8173 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8175 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8177 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8179 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008180#ifdef WLAN_WAKEUP_EVENTS
8181 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8182 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8183
8184 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8185 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8186
8187 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8188 pWowlEnterParams->ucWowNetScanOffloadMatch;
8189
8190 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8191 pWowlEnterParams->ucWowGTKRekeyError;
8192
8193 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8194 pWowlEnterParams->ucWoWBSSConnLoss;
8195#endif // WLAN_WAKEUP_EVENTS
8196
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008197 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8198 pWowlEnterParams->bssIdx;
8199
Jeff Johnson295189b2012-06-20 16:38:30 -07008200 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 /* Store param pointer as passed in by caller */
8202 /* store Params pass it to WDI */
8203 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8204 pWdaParams->pWdaContext = pWDA;
8205 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008206 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008207 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008208 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 {
8210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8211 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008212 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 vos_mem_free(pWdaParams->wdaMsgParam) ;
8214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8215 vos_mem_free(pWdaParams) ;
8216 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008217 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008218
8219}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008220/*
8221 * FUNCTION: WDA_WowlExitReqCallback
8222 *
8223 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008224void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008225{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8227 tWDA_CbContext *pWDA;
8228 tSirHalWowlExitParams *pWowlExitParams;
8229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008230 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008231 if(NULL == pWdaParams)
8232 {
8233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008234 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008235 VOS_ASSERT(0) ;
8236 return ;
8237 }
8238 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8239 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8240
8241 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8242 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8243
8244 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8245 vos_mem_free(pWdaParams) ;
8246
Jeff Johnson295189b2012-06-20 16:38:30 -07008247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008248 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008249 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008250 return ;
8251}
Jeff Johnson295189b2012-06-20 16:38:30 -07008252/*
8253 * FUNCTION: WDA_ProcessWowlExitReq
8254 * Request to WDI to add WOWL Bcast pattern
8255 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008256VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8257 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008258{
8259 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008260 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008261 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8262 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8263 sizeof(WDI_WowlExitReqParamsType)) ;
8264 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008266 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008267 if(NULL == wdiWowlExitInfo)
8268 {
8269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008270 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008271 VOS_ASSERT(0);
8272 return VOS_STATUS_E_NOMEM;
8273 }
8274 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8275 if(NULL == pWdaParams)
8276 {
8277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008278 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008279 VOS_ASSERT(0);
8280 vos_mem_free(wdiWowlExitInfo);
8281 return VOS_STATUS_E_NOMEM;
8282 }
8283
8284 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8285 pWowlExitParams->bssIdx;
8286
8287 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8288
8289 /* Store param pointer as passed in by caller */
8290 /* store Params pass it to WDI */
8291 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8292 pWdaParams->pWdaContext = pWDA;
8293 pWdaParams->wdaMsgParam = pWowlExitParams;
8294
8295 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8296 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008297
Jeff Johnson43971f52012-07-17 12:26:56 -07008298 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008299 {
8300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8301 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008302 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8304 vos_mem_free(pWdaParams->wdaMsgParam);
8305 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008307 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008308}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008309/*
8310 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8311 * Request to WDI to determine whether a given station is capable of
8312 * using HW-based frame translation
8313 */
8314v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8315 tANI_U8 staIdx)
8316{
8317 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8318}
Jeff Johnson295189b2012-06-20 16:38:30 -07008319/*
8320 * FUNCTION: WDA_NvDownloadReqCallback
8321 * send NV Download RSP back to PE
8322 */
8323void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8324 void* pUserData)
8325{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008326
8327 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8328 tWDA_CbContext *pWDA;
8329
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008331 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008332
8333 if(NULL == pWdaParams)
8334 {
8335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008336 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008337 VOS_ASSERT(0) ;
8338 return ;
8339 }
8340
8341 pWDA = pWdaParams->pWdaContext;
8342
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8345 vos_mem_free(pWdaParams);
8346
Jeff Johnson295189b2012-06-20 16:38:30 -07008347 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 return ;
8349}
Jeff Johnson295189b2012-06-20 16:38:30 -07008350/*
8351 * FUNCTION: WDA_ProcessNvDownloadReq
8352 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8353 */
8354VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8355{
8356 /* Initialize the local Variables*/
8357 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8358 v_VOID_t *pNvBuffer=NULL;
8359 v_SIZE_t bufferSize = 0;
8360 WDI_Status status = WDI_STATUS_E_FAILURE;
8361 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008362 tWDA_ReqParams *pWdaParams ;
8363
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008365 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008366 if(NULL == pWDA)
8367 {
8368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008369 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008370 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 return VOS_STATUS_E_FAILURE;
8372 }
8373
8374 /* Get the NV structure base address and size from VOS */
8375 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8377 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 if(NULL == wdiNvDownloadReqParam)
8379 {
8380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008382 VOS_ASSERT(0);
8383 return VOS_STATUS_E_NOMEM;
8384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008385 /* Copy Params to wdiNvDownloadReqParam*/
8386 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8387 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008388
8389 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8390 if(NULL == pWdaParams)
8391 {
8392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008393 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008394 VOS_ASSERT(0);
8395 vos_mem_free(wdiNvDownloadReqParam);
8396 return VOS_STATUS_E_NOMEM;
8397 }
8398
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008400 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8401 pWdaParams->wdaMsgParam = NULL;
8402 pWdaParams->pWdaContext = pWDA;
8403
8404
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008406
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008408 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8409
Jeff Johnson295189b2012-06-20 16:38:30 -07008410 if(IS_WDI_STATUS_FAILURE(status))
8411 {
8412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8413 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8415 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008418}
8419/*
8420 * FUNCTION: WDA_FlushAcReqCallback
8421 * send Flush AC RSP back to TL
8422 */
8423void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8424{
8425 vos_msg_t wdaMsg = {0} ;
8426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8427 tFlushACReq *pFlushACReqParams;
8428 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008430 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 if(NULL == pWdaParams)
8432 {
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008434 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 VOS_ASSERT(0) ;
8436 return ;
8437 }
8438
8439 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8440 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8441 if(NULL == pFlushACRspParams)
8442 {
8443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008446 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 return ;
8448 }
8449 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8450 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8451 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8452 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8453 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8454 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008455 vos_mem_free(pWdaParams->wdaMsgParam) ;
8456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8457 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008458 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8459 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8460 // POST message to TL
8461 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8462
Jeff Johnson295189b2012-06-20 16:38:30 -07008463 return ;
8464}
Jeff Johnson295189b2012-06-20 16:38:30 -07008465/*
8466 * FUNCTION: WDA_ProcessFlushAcReq
8467 * Request to WDI to Update the DELBA REQ params.
8468 */
8469VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8470 tFlushACReq *pFlushAcReqParams)
8471{
8472 WDI_Status status = WDI_STATUS_SUCCESS ;
8473 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8474 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8475 sizeof(WDI_FlushAcReqParamsType)) ;
8476 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008477 if(NULL == wdiFlushAcReqParam)
8478 {
8479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008481 VOS_ASSERT(0);
8482 return VOS_STATUS_E_NOMEM;
8483 }
8484 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8485 if(NULL == pWdaParams)
8486 {
8487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008489 VOS_ASSERT(0);
8490 vos_mem_free(wdiFlushAcReqParam);
8491 return VOS_STATUS_E_NOMEM;
8492 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008494 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8496 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8497 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8498 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 /* Store Flush AC pointer, as this will be used for response */
8500 /* store Params pass it to WDI */
8501 pWdaParams->pWdaContext = pWDA;
8502 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8503 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8505 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 if(IS_WDI_STATUS_FAILURE(status))
8507 {
8508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8509 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8510 vos_mem_free(pWdaParams->wdaMsgParam) ;
8511 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8512 vos_mem_free(pWdaParams) ;
8513 //TODO: respond to TL with failure
8514 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008515 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008516}
Jeff Johnson295189b2012-06-20 16:38:30 -07008517/*
8518 * FUNCTION: WDA_BtAmpEventReqCallback
8519 *
8520 */
8521void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8522{
8523 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8524 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008525 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008526
8527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008528 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008529 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008533 VOS_ASSERT(0) ;
8534 return ;
8535 }
8536 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8537 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8538 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8539 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8540 {
8541 pWDA->wdaAmpSessionOn = VOS_FALSE;
8542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 vos_mem_free(pWdaParams->wdaMsgParam) ;
8544 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8545 vos_mem_free(pWdaParams) ;
8546 /*
8547 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8548 * param here
8549 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008550 return ;
8551}
8552
Jeff Johnson295189b2012-06-20 16:38:30 -07008553/*
8554 * FUNCTION: WDA_ProcessBtAmpEventReq
8555 * Request to WDI to Update with BT AMP events.
8556 */
8557VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8558 tSmeBtAmpEvent *pBtAmpEventParams)
8559{
8560 WDI_Status status = WDI_STATUS_SUCCESS ;
8561 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8562 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8563 sizeof(WDI_BtAmpEventParamsType)) ;
8564 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008566 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 if(NULL == wdiBtAmpEventParam)
8568 {
8569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008571 VOS_ASSERT(0);
8572 return VOS_STATUS_E_NOMEM;
8573 }
8574 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8575 if(NULL == pWdaParams)
8576 {
8577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008579 VOS_ASSERT(0);
8580 vos_mem_free(wdiBtAmpEventParam);
8581 return VOS_STATUS_E_NOMEM;
8582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008583 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8584 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008585 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 /* Store BT AMP event pointer, as this will be used for response */
8587 /* store Params pass it to WDI */
8588 pWdaParams->pWdaContext = pWDA;
8589 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8590 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8592 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 if(IS_WDI_STATUS_FAILURE(status))
8594 {
8595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8596 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8597 vos_mem_free(pWdaParams->wdaMsgParam) ;
8598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8599 vos_mem_free(pWdaParams) ;
8600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8602 {
8603 pWDA->wdaAmpSessionOn = VOS_TRUE;
8604 }
8605 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008606}
8607
Jeff Johnson295189b2012-06-20 16:38:30 -07008608#ifdef ANI_MANF_DIAG
8609/*
8610 * FUNCTION: WDA_FTMCommandReqCallback
8611 * Handle FTM CMD response came from HAL
8612 * Route responce to HDD FTM
8613 */
8614void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8615 void *usrData)
8616{
8617 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008618 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8619 {
8620 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008621 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 return;
8623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008624 /* Release Current FTM Command Request */
8625 vos_mem_free(pWDA->wdaFTMCmdReq);
8626 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008627#ifndef WLAN_FTM_STUB
8628 /* Post FTM Responce to HDD FTM */
8629 wlan_sys_ftm(ftmCmdRspData);
8630#endif /* WLAN_FTM_STUB */
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 return;
8632}
Jeff Johnson295189b2012-06-20 16:38:30 -07008633/*
8634 * FUNCTION: WDA_ProcessFTMCommand
8635 * Send FTM command to WDI
8636 */
8637VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8638 tPttMsgbuffer *pPTTFtmCmd)
8639{
8640 WDI_Status status = WDI_STATUS_SUCCESS;
8641 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 ftmCMDReq = (WDI_FTMCommandReqType *)
8643 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8644 if(NULL == ftmCMDReq)
8645 {
8646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8647 "WDA FTM Command buffer alloc fail");
8648 return VOS_STATUS_E_NOMEM;
8649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8651 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008652 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 /* Send command to WDI */
8654 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 return status;
8656}
8657#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07008658#ifdef FEATURE_OEM_DATA_SUPPORT
8659/*
8660 * FUNCTION: WDA_StartOemDataReqCallback
8661 *
8662 */
8663void WDA_StartOemDataReqCallback(
8664 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8665 void* pUserData)
8666{
8667 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008668 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8669 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008670 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008671
Jeff Johnsone7245742012-09-05 17:12:55 -07008672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008673 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008674
8675 if(NULL == pWdaParams)
8676 {
8677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008678 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008679 VOS_ASSERT(0) ;
8680 return ;
8681 }
8682 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8683
Jeff Johnsone7245742012-09-05 17:12:55 -07008684 if(NULL == pWDA)
8685 {
8686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008687 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008688 VOS_ASSERT(0);
8689 return ;
8690 }
8691
8692 /*
8693 * Allocate memory for response params sent to PE
8694 */
8695 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8696
8697 // Check if memory is allocated for OemdataMeasRsp Params.
8698 if(NULL == pOemDataRspParams)
8699 {
8700 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8701 "OEM DATA WDA callback alloc fail");
8702 VOS_ASSERT(0) ;
8703 return;
8704 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008705
Jeff Johnsone7245742012-09-05 17:12:55 -07008706 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8708 vos_mem_free(pWdaParams->wdaMsgParam);
8709 vos_mem_free(pWdaParams) ;
8710
Jeff Johnsone7245742012-09-05 17:12:55 -07008711 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08008712 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07008713 * Also, here success always means that we have atleast one BSSID.
8714 */
8715 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8716
8717 //enable Tx
8718 status = WDA_ResumeDataTx(pWDA);
8719 if(status != VOS_STATUS_SUCCESS)
8720 {
8721 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8722 }
8723 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8724 return ;
8725}
8726/*
8727 * FUNCTION: WDA_ProcessStartOemDataReq
8728 * Send Start Oem Data Req to WDI
8729 */
8730VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8731 tStartOemDataReq *pOemDataReqParams)
8732{
8733 WDI_Status status = WDI_STATUS_SUCCESS;
8734 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008735 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008736
8737 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8738
8739 if(NULL == wdiOemDataReqParams)
8740 {
8741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008742 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008743 VOS_ASSERT(0);
8744 return VOS_STATUS_E_NOMEM;
8745 }
8746
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008747 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8748 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8749 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8750 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008751
8752 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8753
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008754 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8755 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008756 {
8757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008759 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008760 vos_mem_free(pOemDataReqParams);
8761 VOS_ASSERT(0);
8762 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008763 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008764
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008765 pWdaParams->wdaMsgParam = (void *)pOemDataReqParams;
8766 pWdaParams->wdaWdiApiMsgParam = (void *)wdiOemDataReqParams;
8767
8768 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8769 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008770
8771 if(IS_WDI_STATUS_FAILURE(status))
8772 {
8773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8774 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8776 vos_mem_free(pWdaParams->wdaMsgParam);
8777 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008778 }
8779 return CONVERT_WDI2VOS_STATUS(status) ;
8780}
8781#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008782/*
8783 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8784 *
8785 */
8786void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8787{
8788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008790 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 if(NULL == pWdaParams)
8792 {
8793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008794 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008795 VOS_ASSERT(0) ;
8796 return ;
8797 }
8798
8799 if(NULL != pWdaParams->wdaMsgParam)
8800 {
8801 vos_mem_free(pWdaParams->wdaMsgParam);
8802 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008803 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8804 {
8805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8806 }
8807
8808 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008809 return ;
8810}
Jeff Johnson295189b2012-06-20 16:38:30 -07008811#ifdef WLAN_FEATURE_GTK_OFFLOAD
8812/*
8813 * FUNCTION: WDA_HostOffloadReqCallback
8814 *
8815 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008816void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8817 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008818{
8819 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8820
8821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008822 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008823
8824 VOS_ASSERT(NULL != pWdaParams);
8825
8826 vos_mem_free(pWdaParams->wdaMsgParam) ;
8827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8828 vos_mem_free(pWdaParams) ;
8829
8830 //print a msg, nothing else to do
8831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8832 "WDA_GTKOffloadReqCallback invoked " );
8833
8834 return ;
8835}
8836
8837/*
8838 * FUNCTION: WDA_ProcessGTKOffloadReq
8839 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8840 * to broadcast traffic (sta mode).
8841 */
8842VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8843 tpSirGtkOffloadParams pGtkOffloadParams)
8844{
8845 VOS_STATUS status = VOS_STATUS_SUCCESS;
8846 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8847 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8848 sizeof(WDI_GtkOffloadReqMsg)) ;
8849 tWDA_ReqParams *pWdaParams ;
8850
8851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008852 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008853
8854 if(NULL == wdiGtkOffloadReqMsg)
8855 {
8856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008857 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008858 VOS_ASSERT(0);
8859 return VOS_STATUS_E_NOMEM;
8860 }
8861
8862 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8863 if(NULL == pWdaParams)
8864 {
8865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008866 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008867 VOS_ASSERT(0);
8868 vos_mem_free(wdiGtkOffloadReqMsg);
8869 return VOS_STATUS_E_NOMEM;
8870 }
8871
8872 //
8873 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8874 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008875
8876 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8877 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8878
Jeff Johnson295189b2012-06-20 16:38:30 -07008879 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8880 // Copy KCK
8881 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8882 // Copy KEK
8883 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8884 // Copy KeyReplayCounter
8885 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8886 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8887
8888 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8889
8890 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8891 (NULL == pWDA->wdaWdiApiMsgParam));
8892
8893 /* Store Params pass it to WDI */
8894 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8895 pWdaParams->pWdaContext = pWDA;
8896 /* Store param pointer as passed in by caller */
8897 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8898
8899 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8900
8901 if(IS_WDI_STATUS_FAILURE(status))
8902 {
8903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8904 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8906 vos_mem_free(pWdaParams->wdaMsgParam);
8907 vos_mem_free(pWdaParams);
8908 }
8909
8910 return CONVERT_WDI2VOS_STATUS(status) ;
8911}
8912
8913/*
8914 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8915 *
8916 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008917void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8918 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008919{
8920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8921 tWDA_CbContext *pWDA;
8922 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8923 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8924 tANI_U8 i;
8925 vos_msg_t vosMsg;
8926
8927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008928 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008929
8930 VOS_ASSERT(NULL != pWdaParams);
8931
8932 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8933 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8934
8935 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8936 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8937
8938 /* Message Header */
8939 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8940 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8941
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008942 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8943 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8944 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8945 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8946 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8947 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008948
8949 /* VOS message wrapper */
8950 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8951 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8952 vosMsg.bodyval = 0;
8953
8954 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8955 {
8956 /* free the mem and return */
8957 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8958 }
8959
8960 vos_mem_free(pWdaParams->wdaMsgParam) ;
8961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8962 vos_mem_free(pWdaParams) ;
8963}
8964#endif
8965
8966/*
8967 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8968 * Request to WDI to set Tx Per Tracking configurations
8969 */
8970VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8971{
8972 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008973 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008974 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8975 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8976 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8977 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008979 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008980 if(NULL == pwdiSetTxPerTrackingReqParams)
8981 {
8982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008984 vos_mem_free(pTxPerTrackingParams);
8985 VOS_ASSERT(0);
8986 return VOS_STATUS_E_NOMEM;
8987 }
8988 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8989 if(NULL == pWdaParams)
8990 {
8991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008992 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008993 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8994 vos_mem_free(pTxPerTrackingParams);
8995 VOS_ASSERT(0);
8996 return VOS_STATUS_E_NOMEM;
8997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
8999 pTxPerTrackingParams->ucTxPerTrackingEnable;
9000 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
9001 pTxPerTrackingParams->ucTxPerTrackingPeriod;
9002 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
9003 pTxPerTrackingParams->ucTxPerTrackingRatio;
9004 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
9005 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009007 /* Store param pointer as passed in by caller */
9008 /* store Params pass it to WDI
9009 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
9010 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
9011 pWdaParams->pWdaContext = pWDA;
9012 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009013 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07009014 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009015 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009016 {
9017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9018 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009019 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009020 vos_mem_free(pWdaParams->wdaMsgParam) ;
9021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9022 vos_mem_free(pWdaParams) ;
9023 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009024 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009025
9026}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009027/*
9028 * FUNCTION: WDA_HALDumpCmdCallback
9029 * Send the VOS complete .
9030 */
9031void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
9032 void* pUserData)
9033{
9034 tANI_U8 *buffer = NULL;
9035 tWDA_CbContext *pWDA = NULL;
9036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 if(NULL == pWdaParams)
9038 {
9039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009040 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009041 VOS_ASSERT(0) ;
9042 return ;
9043 }
9044
9045 pWDA = pWdaParams->pWdaContext;
9046 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009047 if(wdiRspParams->usBufferLen > 0)
9048 {
9049 /*Copy the Resp data to UMAC supplied buffer*/
9050 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
9051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9053 vos_mem_free(pWdaParams);
9054
9055 /* Indicate VOSS about the start complete */
9056 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009057 return ;
9058}
9059
Jeff Johnson295189b2012-06-20 16:38:30 -07009060/*
9061 * FUNCTION: WDA_ProcessHALDumpCmdReq
9062 * Send Dump command to WDI
9063 */
9064VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9065 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9066 tANI_U32 arg4, tANI_U8 *pBuffer)
9067{
9068 WDI_Status status = WDI_STATUS_SUCCESS;
9069 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9070 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9071 tWDA_ReqParams *pWdaParams ;
9072 pVosContextType pVosContext = NULL;
9073 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9075 (void *)pMac);
9076
9077 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9078 if(NULL == pWdaParams)
9079 {
9080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009082 return VOS_STATUS_E_NOMEM;
9083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 /* Allocate memory WDI request structure*/
9085 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9086 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9087 if(NULL == wdiHALDumpCmdReqParam)
9088 {
9089 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9090 "WDA HAL DUMP Command buffer alloc fail");
9091 vos_mem_free(pWdaParams);
9092 return WDI_STATUS_E_FAILURE;
9093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009095 /* Extract the arguments */
9096 wdiHalDumpCmdInfo->command = cmd;
9097 wdiHalDumpCmdInfo->argument1 = arg1;
9098 wdiHalDumpCmdInfo->argument2 = arg2;
9099 wdiHalDumpCmdInfo->argument3 = arg3;
9100 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009101 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9103
9104 /* Response message will be passed through the buffer */
9105 pWdaParams->wdaMsgParam = (void *)pBuffer;
9106
9107 /* store Params pass it to WDI */
9108 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009109 /* Send command to WDI */
9110 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -08009111 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 if ( vStatus != VOS_STATUS_SUCCESS )
9113 {
9114 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9115 {
9116 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -08009117 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 }
9119 else
9120 {
9121 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009122 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 }
9124 VOS_ASSERT(0);
9125 }
9126 return status;
9127}
Jeff Johnson295189b2012-06-20 16:38:30 -07009128#ifdef WLAN_FEATURE_GTK_OFFLOAD
9129/*
9130 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9131 * Request to WDI to get GTK Offload Information
9132 */
9133VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9134 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9135{
9136 VOS_STATUS status = VOS_STATUS_SUCCESS;
9137 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9138 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9139 tWDA_ReqParams *pWdaParams ;
9140
9141 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9142 {
9143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009144 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009145 VOS_ASSERT(0);
9146 return VOS_STATUS_E_NOMEM;
9147 }
9148
9149 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9150 if(NULL == pWdaParams)
9151 {
9152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009153 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 VOS_ASSERT(0);
9155 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9156 return VOS_STATUS_E_NOMEM;
9157 }
9158
9159 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9160
9161 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9162 (NULL == pWDA->wdaWdiApiMsgParam));
9163
9164 /* Store Params pass it to WDI */
9165 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9166 pWdaParams->pWdaContext = pWDA;
9167 /* Store param pointer as passed in by caller */
9168 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9169
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009170 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9171 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9172
Jeff Johnson295189b2012-06-20 16:38:30 -07009173 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9174
9175 if(IS_WDI_STATUS_FAILURE(status))
9176 {
9177 /* failure returned by WDI API */
9178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9179 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9180 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9181 vos_mem_free(pWdaParams) ;
9182 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9183 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9184 }
9185
9186 return CONVERT_WDI2VOS_STATUS(status) ;
9187}
9188#endif // WLAN_FEATURE_GTK_OFFLOAD
9189
9190/*
9191 * -------------------------------------------------------------------------
9192 * DATA interface with WDI for Mgmt Frames
9193 * -------------------------------------------------------------------------
9194 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009195/*
9196 * FUNCTION: WDA_TxComplete
9197 * Callback function for the WDA_TxPacket
9198 */
9199VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9200 VOS_STATUS status )
9201{
9202
9203 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9204 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009205 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009206
9207 if(NULL == wdaContext)
9208 {
9209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9210 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009211 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 VOS_ASSERT(0);
9213 return VOS_STATUS_E_FAILURE;
9214 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009215
9216 /*Check if frame was timed out or not*/
9217 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9218 (v_PVOID_t)&uUserData);
9219
9220 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9221 {
9222 /*Discard frame - no further processing is needed*/
9223 vos_pkt_return_packet(pData);
9224 return VOS_STATUS_SUCCESS;
9225 }
9226
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9228 if( NULL!=wdaContext->pTxCbFunc)
9229 {
9230 /*check if packet is freed already*/
9231 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9232 {
9233 wdaContext->pTxCbFunc(pMac, pData);
9234 }
9235 else
9236 {
9237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9238 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009239 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009240 //Return from here since we reaching here because the packet already timeout
9241 return status;
9242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 }
9244
9245 /*
9246 * Trigger the event to bring the HAL TL Tx complete function to come
9247 * out of wait
9248 * Let the coe above to complete the packet first. When this event is set,
9249 * the thread waiting for the event may run and set Vospacket_freed causing the original
9250 * packet not being freed.
9251 */
9252 status = vos_event_set(&wdaContext->txFrameEvent);
9253 if(!VOS_IS_STATUS_SUCCESS(status))
9254 {
9255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9256 "NEW VOS Event Set failed - status = %d \n", status);
9257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 return status;
9259}
Jeff Johnson295189b2012-06-20 16:38:30 -07009260/*
9261 * FUNCTION: WDA_TxPacket
9262 * Forward TX management frame to WDI
9263 */
9264VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9265 void *pFrmBuf,
9266 tANI_U16 frmLen,
9267 eFrameType frmType,
9268 eFrameTxDir txDir,
9269 tANI_U8 tid,
9270 pWDATxRxCompFunc pCompFunc,
9271 void *pData,
9272 pWDAAckFnTxComp pAckTxComp,
9273 tANI_U8 txFlag)
9274{
9275 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9276 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9277 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9278 tANI_U8 eventIdx = 0;
9279 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9280 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009281 if((NULL == pWDA)||(NULL == pFrmBuf))
9282 {
9283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9284 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009285 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009286 VOS_ASSERT(0);
9287 return VOS_STATUS_E_FAILURE;
9288 }
9289
9290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9291 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009292 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9293 if(NULL == pMac)
9294 {
9295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009296 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009297 VOS_ASSERT(0);
9298 return VOS_STATUS_E_FAILURE;
9299 }
9300
9301
9302
9303 /* store the call back function in WDA context */
9304 pWDA->pTxCbFunc = pCompFunc;
9305 /* store the call back for the function of ackTxComplete */
9306 if( pAckTxComp )
9307 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009308 if( NULL != pWDA->pAckTxCbFunc )
9309 {
9310 /* Already TxComp is active no need to active again */
9311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9312 "There is already one request pending for tx complete\n");
9313 pWDA->pAckTxCbFunc( pMac, 0);
9314 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009315
Jeff Johnsone7245742012-09-05 17:12:55 -07009316 if( VOS_STATUS_SUCCESS !=
9317 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9318 {
9319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9320 "Tx Complete timeout Timer Stop Failed ");
9321 }
9322 else
9323 {
9324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009325 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -07009326 }
9327 }
9328
9329 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9330 pWDA->pAckTxCbFunc = pAckTxComp;
9331 if( VOS_STATUS_SUCCESS !=
9332 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9333 {
9334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9335 "Tx Complete Timer Start Failed ");
9336 pWDA->pAckTxCbFunc = NULL;
9337 return eHAL_STATUS_FAILURE;
9338 }
9339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 /* Reset the event to be not signalled */
9341 status = vos_event_reset(&pWDA->txFrameEvent);
9342 if(!VOS_IS_STATUS_SUCCESS(status))
9343 {
9344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9345 "VOS Event reset failed - status = %d\n",status);
9346 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9347 if( pAckTxComp )
9348 {
9349 pWDA->pAckTxCbFunc = NULL;
9350 if( VOS_STATUS_SUCCESS !=
9351 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9352 {
9353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9354 "Tx Complete timeout Timer Stop Failed ");
9355 }
9356 }
9357 return VOS_STATUS_E_FAILURE;
9358 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009359
9360 /* If Peer Sta mask is set don't overwrite to self sta */
9361 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009363 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009364 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009365 else
9366 {
Ganesh K08bce952012-12-13 15:04:41 -08009367 /* Get system role, use the self station if in unknown role or STA role */
9368 systemRole = wdaGetGlobalSystemRole(pMac);
9369 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9370 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009371#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -08009372 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009373#endif
Ganesh K08bce952012-12-13 15:04:41 -08009374 ))
9375 {
9376 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9377 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009379
Jeff Johnsone7245742012-09-05 17:12:55 -07009380 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9381 disassoc frame reaches the HW, HAL has already deleted the peer station */
9382 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009384 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009385 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009387 /*Send Probe request frames on self sta idx*/
9388 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 /* Since we donot want probe responses to be retried, send probe responses
9391 through the NO_ACK queues */
9392 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9393 {
9394 //probe response is sent out using self station and no retries options.
9395 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9396 }
9397 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9398 {
9399 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9400 }
9401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9403
9404 /*Set frame tag to 0
9405 We will use the WDA user data in order to tag a frame as expired*/
9406 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9407 (v_PVOID_t)0);
9408
9409
9410 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9411 frmLen, ucTypeSubType, tid,
9412 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9413 {
9414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9415 "Sending Mgmt Frame failed - status = %d\n", status);
9416 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9417 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9418 if( pAckTxComp )
9419 {
9420 pWDA->pAckTxCbFunc = NULL;
9421 if( VOS_STATUS_SUCCESS !=
9422 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9423 {
9424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9425 "Tx Complete timeout Timer Stop Failed ");
9426 }
9427 }
9428 return VOS_STATUS_E_FAILURE;
9429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009430 /*
9431 * Wait for the event to be set by the TL, to get the response of TX
9432 * complete, this event should be set by the Callback function called by TL
9433 */
9434 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9435 &eventIdx);
9436 if(!VOS_IS_STATUS_SUCCESS(status))
9437 {
9438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9439 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009440 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9442 after the packet gets completed(packet freed once)*/
9443
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009444 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Gopichand Nakkala0b714452012-12-21 15:34:30 -08009445 WDA_TransportChannelDebug(1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009446
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009447 /*Tag Frame as timed out for later deletion*/
9448 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9449 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9450
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 /* check whether the packet was freed already,so need not free again when
9452 * TL calls the WDA_Txcomplete routine
9453 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009454 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9455 /*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 -07009456 {
9457 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009458 } */
9459
Jeff Johnson295189b2012-06-20 16:38:30 -07009460 if( pAckTxComp )
9461 {
9462 pWDA->pAckTxCbFunc = NULL;
9463 if( VOS_STATUS_SUCCESS !=
9464 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9465 {
9466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9467 "Tx Complete timeout Timer Stop Failed ");
9468 }
9469 }
9470 status = VOS_STATUS_E_FAILURE;
9471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009472 return status;
9473}
Jeff Johnson295189b2012-06-20 16:38:30 -07009474/*
9475 * FUNCTION: WDA_McProcessMsg
9476 * Trigger DAL-AL to start CFG download
9477 */
9478VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9479{
9480 VOS_STATUS status = VOS_STATUS_SUCCESS;
9481 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 if(NULL == pMsg)
9483 {
9484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009485 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009486 VOS_ASSERT(0);
9487 return VOS_STATUS_E_FAILURE;
9488 }
9489
9490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009491 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009492
9493 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9494 if(NULL == pWDA )
9495 {
9496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009497 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009498 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009499 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 return VOS_STATUS_E_FAILURE;
9501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 /* Process all the WDA messages.. */
9503 switch( pMsg->type )
9504 {
9505 case WNI_CFG_DNLD_REQ:
9506 {
9507 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009508 /* call WDA complete event if config download success */
9509 if( VOS_IS_STATUS_SUCCESS(status) )
9510 {
9511 vos_WDAComplete_cback(pVosContext);
9512 }
9513 else
9514 {
9515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9516 "WDA Config Download failure" );
9517 }
9518 break ;
9519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009520 /*
9521 * Init SCAN request from PE, convert it into DAL format
9522 * and send it to DAL
9523 */
9524 case WDA_INIT_SCAN_REQ:
9525 {
9526 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9527 break ;
9528 }
9529 /* start SCAN request from PE */
9530 case WDA_START_SCAN_REQ:
9531 {
9532 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9533 break ;
9534 }
9535 /* end SCAN request from PE */
9536 case WDA_END_SCAN_REQ:
9537 {
9538 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9539 break ;
9540 }
9541 /* end SCAN request from PE */
9542 case WDA_FINISH_SCAN_REQ:
9543 {
9544 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9545 break ;
9546 }
9547 /* join request from PE */
9548 case WDA_CHNL_SWITCH_REQ:
9549 {
9550 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9551 {
9552 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9553 }
9554 else
9555 {
9556 WDA_ProcessChannelSwitchReq(pWDA,
9557 (tSwitchChannelParams*)pMsg->bodyptr) ;
9558 }
9559 break ;
9560 }
9561 /* ADD BSS request from PE */
9562 case WDA_ADD_BSS_REQ:
9563 {
9564 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9565 break ;
9566 }
9567 case WDA_ADD_STA_REQ:
9568 {
9569 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9570 break ;
9571 }
9572 case WDA_DELETE_BSS_REQ:
9573 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009574 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9575 break ;
9576 }
9577 case WDA_DELETE_STA_REQ:
9578 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009579 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9580 break ;
9581 }
9582 case WDA_CONFIG_PARAM_UPDATE_REQ:
9583 {
9584 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9585 break ;
9586 }
9587 case WDA_SET_BSSKEY_REQ:
9588 {
9589 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9590 break ;
9591 }
9592 case WDA_SET_STAKEY_REQ:
9593 {
9594 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9595 break ;
9596 }
9597 case WDA_SET_STA_BCASTKEY_REQ:
9598 {
9599 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9600 break ;
9601 }
9602 case WDA_REMOVE_BSSKEY_REQ:
9603 {
9604 WDA_ProcessRemoveBssKeyReq(pWDA,
9605 (tRemoveBssKeyParams *)pMsg->bodyptr);
9606 break ;
9607 }
9608 case WDA_REMOVE_STAKEY_REQ:
9609 {
9610 WDA_ProcessRemoveStaKeyReq(pWDA,
9611 (tRemoveStaKeyParams *)pMsg->bodyptr);
9612 break ;
9613 }
9614 case WDA_REMOVE_STA_BCASTKEY_REQ:
9615 {
9616 /* TODO: currently UMAC is not sending this request, Add the code for
9617 handling this request when UMAC supports */
9618 break;
9619 }
9620#ifdef FEATURE_WLAN_CCX
9621 case WDA_TSM_STATS_REQ:
9622 {
9623 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9624 break;
9625 }
9626#endif
9627 case WDA_UPDATE_EDCA_PROFILE_IND:
9628 {
9629 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9630 break;
9631 }
9632 case WDA_ADD_TS_REQ:
9633 {
9634 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9635 break;
9636 }
9637 case WDA_DEL_TS_REQ:
9638 {
9639 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9640 break;
9641 }
9642 case WDA_ADDBA_REQ:
9643 {
9644 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9645 break;
9646 }
9647 case WDA_DELBA_IND:
9648 {
9649 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9650 break;
9651 }
9652 case WDA_SET_LINK_STATE:
9653 {
9654 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9655 break;
9656 }
9657 case WDA_GET_STATISTICS_REQ:
9658 {
9659 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9660 break;
9661 }
9662 case WDA_PWR_SAVE_CFG:
9663 {
9664 if(pWDA->wdaState == WDA_READY_STATE)
9665 {
9666 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9667 }
9668 else
9669 {
9670 if(NULL != pMsg->bodyptr)
9671 {
9672 vos_mem_free(pMsg->bodyptr);
9673 }
9674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9675 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9676 }
9677 break;
9678 }
9679 case WDA_ENTER_IMPS_REQ:
9680 {
9681 if(pWDA->wdaState == WDA_READY_STATE)
9682 {
9683 WDA_ProcessEnterImpsReq(pWDA);
9684 }
9685 else
9686 {
9687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9688 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9689 }
9690 break;
9691 }
9692 case WDA_EXIT_IMPS_REQ:
9693 {
9694 if(pWDA->wdaState == WDA_READY_STATE)
9695 {
9696 WDA_ProcessExitImpsReq(pWDA);
9697 }
9698 else
9699 {
9700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9701 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9702 }
9703 break;
9704 }
9705 case WDA_ENTER_BMPS_REQ:
9706 {
9707 if(pWDA->wdaState == WDA_READY_STATE)
9708 {
9709 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9710 }
9711 else
9712 {
9713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9714 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9715 }
9716 break;
9717 }
9718 case WDA_EXIT_BMPS_REQ:
9719 {
9720 if(pWDA->wdaState == WDA_READY_STATE)
9721 {
9722 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9723 }
9724 else
9725 {
9726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9727 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9728 }
9729 break;
9730 }
9731 case WDA_ENTER_UAPSD_REQ:
9732 {
9733 if(pWDA->wdaState == WDA_READY_STATE)
9734 {
9735 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9736 }
9737 else
9738 {
9739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9740 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9741 }
9742 break;
9743 }
9744 case WDA_EXIT_UAPSD_REQ:
9745 {
9746 if(pWDA->wdaState == WDA_READY_STATE)
9747 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009748 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009749 }
9750 else
9751 {
9752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9753 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9754 }
9755 break;
9756 }
9757 case WDA_UPDATE_UAPSD_IND:
9758 {
9759 if(pWDA->wdaState == WDA_READY_STATE)
9760 {
9761 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9762 }
9763 else
9764 {
9765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9766 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9767 }
9768 break;
9769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009770 case WDA_REGISTER_PE_CALLBACK :
9771 {
9772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9773 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9774 /*TODO: store the PE callback */
9775 /* Do Nothing? MSG Body should be freed at here */
9776 if(NULL != pMsg->bodyptr)
9777 {
9778 vos_mem_free(pMsg->bodyptr);
9779 }
9780 break;
9781 }
9782 case WDA_SYS_READY_IND :
9783 {
9784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9785 "Handling msg type WDA_SYS_READY_IND " );
9786 pWDA->wdaState = WDA_READY_STATE;
9787 if(NULL != pMsg->bodyptr)
9788 {
9789 vos_mem_free(pMsg->bodyptr);
9790 }
9791 break;
9792 }
9793 case WDA_BEACON_FILTER_IND :
9794 {
9795 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9796 break;
9797 }
9798 case WDA_BTC_SET_CFG:
9799 {
9800 /*TODO: handle this while dealing with BTC */
9801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9802 "Handling msg type WDA_BTC_SET_CFG " );
9803 /* Do Nothing? MSG Body should be freed at here */
9804 if(NULL != pMsg->bodyptr)
9805 {
9806 vos_mem_free(pMsg->bodyptr);
9807 }
9808 break;
9809 }
9810 case WDA_SIGNAL_BT_EVENT:
9811 {
9812 /*TODO: handle this while dealing with BTC */
9813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9814 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9815 /* Do Nothing? MSG Body should be freed at here */
9816 if(NULL != pMsg->bodyptr)
9817 {
9818 vos_mem_free(pMsg->bodyptr);
9819 }
9820 break;
9821 }
9822 case WDA_CFG_RXP_FILTER_REQ:
9823 {
9824 WDA_ProcessConfigureRxpFilterReq(pWDA,
9825 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9826 break;
9827 }
9828 case WDA_SET_HOST_OFFLOAD:
9829 {
9830 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9831 break;
9832 }
9833 case WDA_SET_KEEP_ALIVE:
9834 {
9835 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9836 break;
9837 }
9838#ifdef WLAN_NS_OFFLOAD
9839 case WDA_SET_NS_OFFLOAD:
9840 {
9841 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9842 break;
9843 }
9844#endif //WLAN_NS_OFFLOAD
9845 case WDA_ADD_STA_SELF_REQ:
9846 {
9847 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9848 break;
9849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 case WDA_DEL_STA_SELF_REQ:
9851 {
9852 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9853 break;
9854 }
9855 case WDA_WOWL_ADD_BCAST_PTRN:
9856 {
9857 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9858 break;
9859 }
9860 case WDA_WOWL_DEL_BCAST_PTRN:
9861 {
9862 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9863 break;
9864 }
9865 case WDA_WOWL_ENTER_REQ:
9866 {
9867 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9868 break;
9869 }
9870 case WDA_WOWL_EXIT_REQ:
9871 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009872 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 break;
9874 }
9875 case WDA_TL_FLUSH_AC_REQ:
9876 {
9877 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9878 break;
9879 }
9880 case WDA_SIGNAL_BTAMP_EVENT:
9881 {
9882 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9883 break;
9884 }
9885#ifdef WDA_UT
9886 case WDA_WDI_EVENT_MSG:
9887 {
9888 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9889 break ;
9890 }
9891#endif
9892 case WDA_UPDATE_BEACON_IND:
9893 {
9894 WDA_ProcessUpdateBeaconParams(pWDA,
9895 (tUpdateBeaconParams *)pMsg->bodyptr);
9896 break;
9897 }
9898 case WDA_SEND_BEACON_REQ:
9899 {
9900 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9901 break;
9902 }
9903 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9904 {
9905 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9906 (tSendProbeRespParams *)pMsg->bodyptr);
9907 break;
9908 }
9909#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9910 case WDA_SET_MAX_TX_POWER_REQ:
9911 {
9912 WDA_ProcessSetMaxTxPowerReq(pWDA,
9913 (tMaxTxPowerParams *)pMsg->bodyptr);
9914 break;
9915 }
9916#endif
9917#ifdef WLAN_FEATURE_P2P
9918 case WDA_SET_P2P_GO_NOA_REQ:
9919 {
9920 WDA_ProcessSetP2PGONOAReq(pWDA,
9921 (tP2pPsParams *)pMsg->bodyptr);
9922 break;
9923 }
9924#endif
9925 /* timer related messages */
9926 case WDA_TIMER_BA_ACTIVITY_REQ:
9927 {
9928 WDA_BaCheckActivity(pWDA) ;
9929 break ;
9930 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08009931
9932 /* timer related messages */
9933 case WDA_TIMER_TRAFFIC_STATS_IND:
9934 {
9935 WDA_TimerTrafficStatsInd(pWDA);
9936 break;
9937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009938#ifdef WLAN_FEATURE_VOWIFI_11R
9939 case WDA_AGGR_QOS_REQ:
9940 {
9941 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9942 break;
9943 }
9944#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009945#ifdef ANI_MANF_DIAG
9946 case WDA_FTM_CMD_REQ:
9947 {
9948 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9949 break ;
9950 }
9951#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07009952#ifdef FEATURE_OEM_DATA_SUPPORT
9953 case WDA_START_OEM_DATA_REQ:
9954 {
9955 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9956 break;
9957 }
9958#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009959 /* Tx Complete Time out Indication */
9960 case WDA_TX_COMPLETE_TIMEOUT_IND:
9961 {
9962 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9963 break;
9964 }
9965 case WDA_WLAN_SUSPEND_IND:
9966 {
9967 WDA_ProcessWlanSuspendInd(pWDA,
9968 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9969 break;
9970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009971 case WDA_WLAN_RESUME_REQ:
9972 {
9973 WDA_ProcessWlanResumeReq(pWDA,
9974 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9975 break;
9976 }
9977
9978 case WDA_UPDATE_CF_IND:
9979 {
9980 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9981 pMsg->bodyptr = NULL;
9982 break;
9983 }
9984#ifdef FEATURE_WLAN_SCAN_PNO
9985 case WDA_SET_PNO_REQ:
9986 {
9987 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9988 break;
9989 }
9990 case WDA_UPDATE_SCAN_PARAMS_REQ:
9991 {
9992 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9993 break;
9994 }
9995 case WDA_SET_RSSI_FILTER_REQ:
9996 {
9997 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
9998 break;
9999 }
10000#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070010001 case WDA_SET_TX_PER_TRACKING_REQ:
10002 {
10003 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
10004 break;
10005 }
10006
10007#ifdef WLAN_FEATURE_PACKET_FILTERING
10008 case WDA_8023_MULTICAST_LIST_REQ:
10009 {
10010 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
10011 break;
10012 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010013 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
10014 {
10015 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
10016 break;
10017 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
10019 {
10020 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
10021 break;
10022 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
10024 {
10025 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
10026 break;
10027 }
10028#endif // WLAN_FEATURE_PACKET_FILTERING
10029
10030
10031 case WDA_TRANSMISSION_CONTROL_IND:
10032 {
10033 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
10034 break;
10035 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010036 case WDA_SET_POWER_PARAMS_REQ:
10037 {
10038 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
10039 break;
10040 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010041#ifdef WLAN_FEATURE_GTK_OFFLOAD
10042 case WDA_GTK_OFFLOAD_REQ:
10043 {
10044 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
10045 break;
10046 }
10047
10048 case WDA_GTK_OFFLOAD_GETINFO_REQ:
10049 {
10050 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
10051 break;
10052 }
10053#endif //WLAN_FEATURE_GTK_OFFLOAD
10054
10055 case WDA_SET_TM_LEVEL_REQ:
10056 {
10057 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
10058 break;
10059 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070010060#ifdef WLAN_FEATURE_11AC
10061 case WDA_UPDATE_OP_MODE:
10062 {
10063 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
10064 {
10065 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10066 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10067 else
10068 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10069 " VHT OpMode Feature is Not Supported \n");
10070 }
10071 else
10072 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10073 " 11AC Feature is Not Supported \n");
10074 break;
10075 }
10076#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010077 default:
10078 {
10079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10080 "No Handling for msg type %x in WDA "
10081 ,pMsg->type);
10082 /* Do Nothing? MSG Body should be freed at here */
10083 if(NULL != pMsg->bodyptr)
10084 {
10085 vos_mem_free(pMsg->bodyptr);
10086 }
10087 //WDA_VOS_ASSERT(0) ;
10088 }
10089 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010090 return status ;
10091}
10092
Jeff Johnson295189b2012-06-20 16:38:30 -070010093/*
10094 * FUNCTION: WDA_LowLevelIndCallback
10095 * IND API callback from WDI, send Ind to PE
10096 */
10097void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10098 void* pUserData )
10099{
10100 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10101#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10102 tSirRSSINotification rssiNotification;
10103#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010104 if(NULL == pWDA)
10105 {
10106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010107 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 VOS_ASSERT(0);
10109 return ;
10110 }
10111
10112 switch(wdiLowLevelInd->wdiIndicationType)
10113 {
10114 case WDI_RSSI_NOTIFICATION_IND:
10115 {
10116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10117 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010118#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10119 rssiNotification.bReserved =
10120 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10121 rssiNotification.bRssiThres1NegCross =
10122 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10123 rssiNotification.bRssiThres1PosCross =
10124 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10125 rssiNotification.bRssiThres2NegCross =
10126 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10127 rssiNotification.bRssiThres2PosCross =
10128 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10129 rssiNotification.bRssiThres3NegCross =
10130 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10131 rssiNotification.bRssiThres3PosCross =
10132 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080010133 rssiNotification.avgRssi = (v_S7_t)
10134 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 WLANTL_BMPSRSSIRegionChangedNotification(
10136 pWDA->pVosContext,
10137 &rssiNotification);
10138#endif
10139 break ;
10140 }
10141 case WDI_MISSED_BEACON_IND:
10142 {
10143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10144 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010145 /* send IND to PE */
10146 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, NULL, 0) ;
10147 break ;
10148 }
10149 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10150 {
10151 /* TODO: Decode Ind and send Ind to PE */
10152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10153 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10154 break ;
10155 }
10156
10157 case WDI_MIC_FAILURE_IND:
10158 {
10159 tpSirSmeMicFailureInd pMicInd =
10160 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10161
10162 if(NULL == pMicInd)
10163 {
10164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010165 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 break;
10167 }
10168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10169 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010170 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10171 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10172 vos_mem_copy(pMicInd->bssId,
10173 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10174 sizeof(tSirMacAddr));
10175 vos_mem_copy(pMicInd->info.srcMacAddr,
10176 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10177 sizeof(tSirMacAddr));
10178 vos_mem_copy(pMicInd->info.taMacAddr,
10179 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10180 sizeof(tSirMacAddr));
10181 vos_mem_copy(pMicInd->info.dstMacAddr,
10182 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10183 sizeof(tSirMacAddr));
10184 vos_mem_copy(pMicInd->info.rxMacAddr,
10185 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10186 sizeof(tSirMacAddr));
10187 pMicInd->info.multicast =
10188 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10189 pMicInd->info.keyId=
10190 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10191 pMicInd->info.IV1=
10192 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10193 vos_mem_copy(pMicInd->info.TSC,
10194 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010195 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10196 (void *)pMicInd , 0) ;
10197 break ;
10198 }
10199 case WDI_FATAL_ERROR_IND:
10200 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010201 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010202 /* TODO: Decode Ind and send Ind to PE */
10203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10204 "Received WDI_FATAL_ERROR_IND from WDI ");
10205 break ;
10206 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010207 case WDI_DEL_STA_IND:
10208 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010209 tpDeleteStaContext pDelSTACtx =
10210 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10211
10212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10213 "Received WDI_DEL_STA_IND from WDI ");
10214 if(NULL == pDelSTACtx)
10215 {
10216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010218 break;
10219 }
10220 vos_mem_copy(pDelSTACtx->addr2,
10221 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10222 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010223 vos_mem_copy(pDelSTACtx->bssId,
10224 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10225 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010226 pDelSTACtx->assocId =
10227 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10228 pDelSTACtx->reasonCode =
10229 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10230 pDelSTACtx->staId =
10231 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010232 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10233 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 break ;
10235 }
10236 case WDI_COEX_IND:
10237 {
10238 tANI_U32 index;
10239 vos_msg_t vosMsg;
10240 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10241 if(NULL == pSmeCoexInd)
10242 {
10243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010244 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 break;
10246 }
10247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10248 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010249 /* Message Header */
10250 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10251 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 /* Info from WDI Indication */
10253 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10254 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10255 {
10256 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10257 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 /* VOS message wrapper */
10259 vosMsg.type = eWNI_SME_COEX_IND;
10260 vosMsg.bodyptr = (void *)pSmeCoexInd;
10261 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010262 /* Send message to SME */
10263 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10264 {
10265 /* free the mem and return */
10266 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10267 }
10268 else
10269 {
10270 /* DEBUG */
10271 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10272 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10273 pSmeCoexInd->coexIndType,
10274 pSmeCoexInd->coexIndData[0],
10275 pSmeCoexInd->coexIndData[1],
10276 pSmeCoexInd->coexIndData[2],
10277 pSmeCoexInd->coexIndData[3]);
10278 }
10279 break;
10280 }
10281 case WDI_TX_COMPLETE_IND:
10282 {
10283 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10284 /* Calling TxCompleteAck Indication from wda context*/
10285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10286 "Complete Indication received from HAL");
10287 if( pWDA->pAckTxCbFunc )
10288 {
10289 if( VOS_STATUS_SUCCESS !=
10290 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10291 {
10292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10293 "Tx Complete timeout Timer Stop Failed ");
10294 }
10295 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10296 pWDA->pAckTxCbFunc = NULL;
10297 }
10298 else
10299 {
10300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10301 "Tx Complete Indication is received after timeout ");
10302 }
10303 break;
10304 }
10305#ifdef WLAN_FEATURE_P2P
Viral Modid86bde22012-12-10 13:09:21 -080010306 case WDI_P2P_NOA_START_IND :
10307 {
10308 tSirP2PNoaStart *pP2pNoaStart =
10309 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
10310
10311 if (NULL == pP2pNoaStart)
10312 {
10313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10314 "Memory allocation failure, "
10315 "WDI_P2P_NOA_START_IND not forwarded");
10316 break;
10317 }
10318 pP2pNoaStart->status =
10319 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
10320 pP2pNoaStart->bssIdx =
10321 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
10322 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
10323 (void *)pP2pNoaStart , 0) ;
10324 break;
10325 }
10326
Jeff Johnson295189b2012-06-20 16:38:30 -070010327 case WDI_P2P_NOA_ATTR_IND :
10328 {
10329 tSirP2PNoaAttr *pP2pNoaAttr =
10330 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10332 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010333 if (NULL == pP2pNoaAttr)
10334 {
10335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10336 "Memory allocation failure, "
10337 "WDI_P2P_NOA_ATTR_IND not forwarded");
10338 break;
10339 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 pP2pNoaAttr->index =
10341 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10342 pP2pNoaAttr->oppPsFlag =
10343 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10344 pP2pNoaAttr->ctWin =
10345 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10346
10347 pP2pNoaAttr->uNoa1IntervalCnt =
10348 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10349 pP2pNoaAttr->uNoa1Duration =
10350 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10351 pP2pNoaAttr->uNoa1Interval =
10352 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10353 pP2pNoaAttr->uNoa1StartTime =
10354 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010355 pP2pNoaAttr->uNoa2IntervalCnt =
10356 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10357 pP2pNoaAttr->uNoa2Duration =
10358 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10359 pP2pNoaAttr->uNoa2Interval =
10360 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10361 pP2pNoaAttr->uNoa2StartTime =
10362 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010363 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10364 (void *)pP2pNoaAttr , 0) ;
10365 break;
10366 }
10367#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010368#ifdef FEATURE_WLAN_SCAN_PNO
10369 case WDI_PREF_NETWORK_FOUND_IND:
10370 {
10371 vos_msg_t vosMsg;
10372 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10374 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010375 if (NULL == pPrefNetworkFoundInd)
10376 {
10377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10378 "Memory allocation failure, "
10379 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10380 break;
10381 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010382 /* Message Header */
10383 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10384 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10385
10386 /* Info from WDI Indication */
10387 pPrefNetworkFoundInd->ssId.length =
10388 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010389 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10391 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10392 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010393 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 /* VOS message wrapper */
10395 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10396 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10397 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 /* Send message to SME */
10399 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10400 {
10401 /* free the mem and return */
10402 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10403 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010404 break;
10405 }
10406#endif // FEATURE_WLAN_SCAN_PNO
10407
10408#ifdef WLAN_WAKEUP_EVENTS
10409 case WDI_WAKE_REASON_IND:
10410 {
10411 vos_msg_t vosMsg;
10412 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10413 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10414 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10415
10416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10417 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10418 wdiLowLevelInd->wdiIndicationType,
10419 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10420 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10421 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10422
10423 if (NULL == pWakeReasonInd)
10424 {
10425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10426 "Memory allocation failure, "
10427 "WDI_WAKE_REASON_IND not forwarded");
10428 break;
10429 }
10430
10431 vos_mem_zero(pWakeReasonInd, allocSize);
10432
10433 /* Message Header */
10434 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10435 pWakeReasonInd->mesgLen = allocSize;
10436
10437 /* Info from WDI Indication */
10438 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10439 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10440 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10441 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10442 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10443 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10444 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10445 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10446
10447 /* VOS message wrapper */
10448 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10449 vosMsg.bodyptr = (void *) pWakeReasonInd;
10450 vosMsg.bodyval = 0;
10451
10452 /* Send message to SME */
10453 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10454 {
10455 /* free the mem and return */
10456 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10457 }
10458
10459 break;
10460 }
10461#endif // WLAN_WAKEUP_EVENTS
10462
10463 case WDI_TX_PER_HIT_IND:
10464 {
10465 vos_msg_t vosMsg;
10466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10467 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10468 /* VOS message wrapper */
10469 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10470 vosMsg.bodyptr = NULL;
10471 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010472 /* Send message to SME */
10473 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10474 {
10475 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10476 }
10477 break;
10478 }
10479
10480 default:
10481 {
10482 /* TODO error */
10483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10484 "Received UNKNOWN Indication from WDI ");
10485 }
10486 }
10487 return ;
10488}
10489
Jeff Johnson295189b2012-06-20 16:38:30 -070010490/*
10491 * BA related processing in WDA.
10492 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010493void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10494 void* pUserData)
10495{
10496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10497 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010498 if(NULL == pWdaParams)
10499 {
10500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010501 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010502 VOS_ASSERT(0) ;
10503 return ;
10504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010505 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010506 vos_mem_free(pWdaParams->wdaMsgParam) ;
10507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10508 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010510 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010511 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10512 {
10513 tANI_U8 i = 0 ;
10514 tBaActivityInd *baActivityInd = NULL ;
10515 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10516 tANI_U8 allocSize = sizeof(tBaActivityInd)
10517 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10518 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10519 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010520 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010521 if(NULL == baActivityInd)
10522 {
10523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010525 VOS_ASSERT(0) ;
10526 return;
10527 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010528 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10529 sizeof(tSirMacAddr)) ;
10530 baActivityInd->baCandidateCnt = baCandidateCount ;
10531
10532 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10533 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10534
10535 for(i = 0 ; i < baCandidateCount ; i++)
10536 {
10537 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010538 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10539 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010540 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10541 {
10542 baCandidate->baInfo[tid].fBaEnable =
10543 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10544 baCandidate->baInfo[tid].startingSeqNum =
10545 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10546 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010547 wdiBaCandidate++ ;
10548 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010549 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010550 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10551 }
10552 else
10553 {
10554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10555 "BA Trigger RSP with Failure received ");
10556 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010557 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010558}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010559
10560
10561/*
10562 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
10563 * during MCC
10564 */
10565void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
10566{
10567 wpt_uint32 enabled;
10568 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
10569 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
10570 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
10571
10572 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10573 != eSIR_SUCCESS)
10574 {
10575 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10576 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10577 return;
10578 }
10579
10580 if(!enabled)
10581 {
10582 return;
10583 }
10584
10585 if(NULL == pWDA)
10586 {
10587 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10588 "%s:WDA context is NULL", __func__);
10589 VOS_ASSERT(0);
10590 return;
10591 }
10592
10593 if(activate)
10594 {
10595 if( VOS_STATUS_SUCCESS !=
10596 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10597 {
10598 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10599 "Traffic Stats Timer Start Failed ");
10600 return;
10601 }
10602 WDI_DS_ActivateTrafficStats();
10603 }
10604 else
10605 {
10606 WDI_DS_DeactivateTrafficStats();
10607 WDI_DS_ClearTrafficStats();
10608
10609 if( VOS_STATUS_SUCCESS !=
10610 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10611 {
10612 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10613 "Traffic Stats Timer Stop Failed ");
10614 return;
10615 }
10616 }
10617}
10618
10619/*
10620 * Traffic Stats Timer handler
10621 */
10622void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
10623{
10624 WDI_Status wdiStatus;
10625 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
10626 WDI_TrafficStatsIndType trafficStatsIndParams;
10627 wpt_uint32 length, enabled;
10628 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10629
10630 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10631 != eSIR_SUCCESS)
10632 {
10633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10634 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10635 return;
10636 }
10637
10638 if(!enabled)
10639 {
10640 WDI_DS_DeactivateTrafficStats();
10641 return;
10642 }
10643
10644 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
10645
10646 if(pWdiTrafficStats != NULL)
10647 {
10648 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
10649 trafficStatsIndParams.length = length;
10650 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080010651 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010652 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10653 trafficStatsIndParams.pUserData = pWDA;
10654
10655 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
10656
10657 if(WDI_STATUS_PENDING == wdiStatus)
10658 {
10659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10660 "Pending received for %s:%d ",__func__,__LINE__ );
10661 }
10662 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10663 {
10664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10665 "Failure in %s:%d ",__func__,__LINE__ );
10666 }
10667
10668 WDI_DS_ClearTrafficStats();
10669 }
10670 else
10671 {
10672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10673 "pWdiTrafficStats is Null");
10674 }
10675
10676 if( VOS_STATUS_SUCCESS !=
10677 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10678 {
10679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10680 "Traffic Stats Timer Start Failed ");
10681 return;
10682 }
10683}
10684
Jeff Johnson295189b2012-06-20 16:38:30 -070010685/*
10686 * BA Activity check timer handler
10687 */
10688void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10689{
10690 tANI_U8 curSta = 0 ;
10691 tANI_U8 tid = 0 ;
10692 tANI_U8 size = 0 ;
10693 tANI_U8 baCandidateCount = 0 ;
10694 tANI_U8 newBaCandidate = 0 ;
10695 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10696
10697 if(NULL == pWDA)
10698 {
10699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010700 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010701 VOS_ASSERT(0);
10702 return ;
10703 }
10704 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10705 {
10706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10707 "Inconsistent STA entries in WDA");
10708 VOS_ASSERT(0) ;
10709 }
10710 /* walk through all STA entries and find out TX packet count */
10711 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10712 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080010713#ifdef WLAN_SOFTAP_VSTA_FEATURE
10714 // We can only do BA on "hard" STAs.
10715 if (!(IS_HWSTA_IDX(curSta)))
10716 {
10717 continue;
10718 }
10719#endif //WLAN_SOFTAP_VSTA_FEATURE
10720 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10721 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010722 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010723 tANI_U32 txPktCount = 0 ;
10724 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010726 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10727 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010728 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10729 curSta, tid, &txPktCount)))
10730 {
10731#if 0
10732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10733 "************* %d:%d, %d ",curSta, txPktCount,
10734 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10735#endif
10736 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010737 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010738 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10739 curSta, tid)))
10740 {
10741 /* get prepare for sending message to HAL */
10742 //baCandidate[baCandidateCount].staIdx = curSta ;
10743 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10744 newBaCandidate = WDA_ENABLE_BA ;
10745 }
10746 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10747 }
10748 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010749 /* fill the entry for all the sta with given TID's */
10750 if(WDA_ENABLE_BA == newBaCandidate)
10751 {
10752 /* move to next BA candidate */
10753 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
10754 size += sizeof(WDI_TriggerBAReqCandidateType) ;
10755 baCandidateCount++ ;
10756 newBaCandidate = WDA_DISABLE_BA ;
10757 }
10758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010759 /* prepare and send message to hal */
10760 if( 0 < baCandidateCount)
10761 {
10762 WDI_Status status = WDI_STATUS_SUCCESS ;
10763 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
10764 tWDA_ReqParams *pWdaParams =
10765 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010766 if(NULL == pWdaParams)
10767 {
10768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010769 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010770 VOS_ASSERT(0) ;
10771 return;
10772 }
10773 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
10774 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
10775 if(NULL == wdiTriggerBaReq)
10776 {
10777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 VOS_ASSERT(0) ;
10780 vos_mem_free(pWdaParams);
10781 return;
10782 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010783 do
10784 {
10785 WDI_TriggerBAReqinfoType *triggerBaInfo =
10786 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
10787 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
10788 /* TEMP_FIX: Need to see if WDI need check for assoc session for
10789 * for each request */
10790 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
10791 triggerBaInfo->ucBASessionID = 0;
10792 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
10793 } while(0) ;
10794 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
10795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010796 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010797 pWdaParams->pWdaContext = pWDA;
10798 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
10799 pWdaParams->wdaMsgParam = NULL;
10800 status = WDI_TriggerBAReq(wdiTriggerBaReq,
10801 WDA_TriggerBaReqCallback, pWdaParams) ;
10802 if(IS_WDI_STATUS_FAILURE(status))
10803 {
10804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10805 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
10806 vos_mem_free(pWdaParams->wdaMsgParam) ;
10807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10808 vos_mem_free(pWdaParams) ;
10809 }
10810 }
10811 else
10812 {
10813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10814 "There is no TID for initiating BA");
10815 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010816 if( VOS_STATUS_SUCCESS !=
10817 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10818 {
10819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10820 "BA Activity Timer Stop Failed ");
10821 return ;
10822 }
10823 if( VOS_STATUS_SUCCESS !=
10824 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10825 {
10826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10827 "BA Activity Timer Start Failed ");
10828 return;
10829 }
10830 return ;
10831}
Jeff Johnson295189b2012-06-20 16:38:30 -070010832/*
10833 * WDA common routine to create timer used by WDA.
10834 */
10835static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
10836{
Jeff Johnson295189b2012-06-20 16:38:30 -070010837 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10838 tANI_U32 val = 0 ;
10839 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10840
10841 if(NULL == pMac)
10842 {
10843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010844 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 VOS_ASSERT(0);
10846 return VOS_STATUS_E_FAILURE;
10847 }
10848 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
10849 != eSIR_SUCCESS)
10850 {
10851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10852 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
10853 return VOS_STATUS_E_FAILURE;
10854 }
10855 val = SYS_MS_TO_TICKS(val) ;
10856
10857 /* BA activity check timer */
10858 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
10859 "BA Activity Check timer", WDA_TimerHandler,
10860 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
10861 if(status != TX_SUCCESS)
10862 {
10863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10864 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010865 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010866 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010867 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010868 /* Tx Complete Timeout timer */
10869 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
10870 "Tx Complete Check timer", WDA_TimerHandler,
10871 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010872 if(status != TX_SUCCESS)
10873 {
10874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10875 "Unable to create Tx Complete Timeout timer");
10876 /* Destroy timer of BA activity check timer */
10877 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10878 if(status != TX_SUCCESS)
10879 {
10880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10881 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010882 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010883 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010884 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010885 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010886
10887 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
10888
10889 /* Traffic Stats timer */
10890 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
10891 "Traffic Stats timer", WDA_TimerHandler,
10892 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
10893 if(status != TX_SUCCESS)
10894 {
10895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10896 "Unable to create traffic stats timer");
10897 /* Destroy timer of BA activity check timer */
10898 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10899 if(status != TX_SUCCESS)
10900 {
10901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10902 "Unable to Destroy BA activity timer");
10903 }
10904 /* Destroy timer of tx complete timer */
10905 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10906 if(status != TX_SUCCESS)
10907 {
10908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10909 "Unable to Tx complete timer");
10910 }
10911 return VOS_STATUS_E_FAILURE ;
10912 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010913 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010914}
Jeff Johnson295189b2012-06-20 16:38:30 -070010915/*
10916 * WDA common routine to destroy timer used by WDA.
10917 */
10918static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
10919{
10920 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010921 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10922 if(status != TX_SUCCESS)
10923 {
10924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10925 "Unable to Destroy Tx Complete Timeout timer");
10926 return eSIR_FAILURE ;
10927 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010928 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10929 if(status != TX_SUCCESS)
10930 {
10931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10932 "Unable to Destroy BA activity timer");
10933 return eSIR_FAILURE ;
10934 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010935 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
10936 if(status != TX_SUCCESS)
10937 {
10938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10939 "Unable to Destroy traffic stats timer");
10940 return eSIR_FAILURE ;
10941 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 return eSIR_SUCCESS ;
10943}
Jeff Johnson295189b2012-06-20 16:38:30 -070010944/*
10945 * WDA timer handler.
10946 */
10947void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
10948{
10949 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
10950 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 /*
10952 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
10953 */
10954 wdaMsg.type = timerInfo ;
10955 wdaMsg.bodyptr = NULL;
10956 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010957 /* post the message.. */
10958 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
10959 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
10960 {
10961 vosStatus = VOS_STATUS_E_BADMSG;
10962 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010963}
Jeff Johnson295189b2012-06-20 16:38:30 -070010964/*
10965 * WDA Tx Complete timeout Indication.
10966 */
10967void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
10968{
10969 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010970 if( pWDA->pAckTxCbFunc )
10971 {
10972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10973 "TxComplete timer expired\n");
10974 pWDA->pAckTxCbFunc( pMac, 0);
10975 pWDA->pAckTxCbFunc = NULL;
10976 }
10977 else
10978 {
10979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10980 "There is no request pending for TxComplete and wait timer expired\n");
10981 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010982}
Jeff Johnson295189b2012-06-20 16:38:30 -070010983/*
10984 * WDA Set REG Domain to VOS NV
10985 */
10986eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
10987{
10988 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
10989 {
10990 return eHAL_STATUS_INVALID_PARAMETER;
10991 }
10992 return eHAL_STATUS_SUCCESS;
10993}
10994#endif /* FEATURE_WLAN_INTEGRATED_SOC */
10995
Jeff Johnson295189b2012-06-20 16:38:30 -070010996#ifdef FEATURE_WLAN_SCAN_PNO
10997/*
10998 * FUNCTION: WDA_PNOScanReqCallback
10999 *
11000 */
11001void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
11002{
11003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011005 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 if(NULL == pWdaParams)
11007 {
11008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011009 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 VOS_ASSERT(0) ;
11011 return ;
11012 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011013 if( pWdaParams != NULL )
11014 {
11015 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11016 {
11017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11018 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011019 if( pWdaParams->wdaMsgParam != NULL)
11020 {
11021 vos_mem_free(pWdaParams->wdaMsgParam);
11022 }
11023
11024 vos_mem_free(pWdaParams) ;
11025 }
11026
11027 return ;
11028}
Jeff Johnson295189b2012-06-20 16:38:30 -070011029/*
11030 * FUNCTION: WDA_UpdateScanParamsCallback
11031 *
11032 */
11033void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
11034{
11035 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011037 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011038 if(NULL == pWdaParams)
11039 {
11040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011041 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 VOS_ASSERT(0) ;
11043 return ;
11044 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 if( pWdaParams != NULL )
11046 {
11047 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11048 {
11049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11050 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 if( pWdaParams->wdaMsgParam != NULL)
11052 {
11053 vos_mem_free(pWdaParams->wdaMsgParam);
11054 }
11055 vos_mem_free(pWdaParams) ;
11056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011057 return ;
11058}
Jeff Johnson295189b2012-06-20 16:38:30 -070011059/*
11060 * FUNCTION: WDA_SetPowerParamsCallback
11061 *
11062 */
11063void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
11064{
Jeff Johnsone7245742012-09-05 17:12:55 -070011065 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011066
11067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011068 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 if(NULL == pWdaParams)
11070 {
11071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011072 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011073 VOS_ASSERT(0) ;
11074 return ;
11075 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011076 if( pWdaParams != NULL )
11077 {
11078 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11079 {
11080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011082 if( pWdaParams->wdaMsgParam != NULL)
11083 {
11084 vos_mem_free(pWdaParams->wdaMsgParam);
11085 }
11086 vos_mem_free(pWdaParams) ;
11087 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011088 return ;
11089}
Jeff Johnson295189b2012-06-20 16:38:30 -070011090/*
11091 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11092 * Request to WDI to set Preferred Network List.Offload
11093 */
11094VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
11095 tSirPNOScanReq *pPNOScanReqParams)
11096{
Jeff Johnson43971f52012-07-17 12:26:56 -070011097 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
11099 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
11100 tWDA_ReqParams *pWdaParams ;
11101 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011103 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011104 if(NULL == pwdiPNOScanReqInfo)
11105 {
11106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011108 VOS_ASSERT(0);
11109 return VOS_STATUS_E_NOMEM;
11110 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011111 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11112 if(NULL == pWdaParams)
11113 {
11114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011115 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011116 VOS_ASSERT(0);
11117 vos_mem_free(pwdiPNOScanReqInfo);
11118 return VOS_STATUS_E_NOMEM;
11119 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011120 //
11121 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
11122 //
11123 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
11124 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070011125 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
11126 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
11127 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
11129 {
11130 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
11131 &pPNOScanReqParams->aNetworks[i],
11132 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
11133 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011134 /*Scan timer intervals*/
11135 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
11136 &pPNOScanReqParams->scanTimers,
11137 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070011138 /*Probe template for 2.4GHz band*/
11139 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
11140 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11141 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011142 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
11143 pPNOScanReqParams->p24GProbeTemplate,
11144 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 /*Probe template for 5GHz band*/
11146 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
11147 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11148 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011149 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
11150 pPNOScanReqParams->p5GProbeTemplate,
11151 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011152 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011153
Jeff Johnson295189b2012-06-20 16:38:30 -070011154 /* Store Params pass it to WDI */
11155 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
11156 pWdaParams->pWdaContext = pWDA;
11157 /* Store param pointer as passed in by caller */
11158 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011159 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
11160 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011161 if(IS_WDI_STATUS_FAILURE(status))
11162 {
11163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11164 "Failure in Set PNO REQ WDI API, free all the memory " );
11165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11166 vos_mem_free(pWdaParams->wdaMsgParam);
11167 pWdaParams->wdaWdiApiMsgParam = NULL;
11168 pWdaParams->wdaMsgParam = NULL;
11169 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011170 return CONVERT_WDI2VOS_STATUS(status) ;
11171}
Jeff Johnson295189b2012-06-20 16:38:30 -070011172/*
11173 * FUNCTION: WDA_RssiFilterCallback
11174 *
11175 */
11176void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
11177{
11178 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11179
11180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011181 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011182
11183 VOS_ASSERT(NULL != pWdaParams);
11184
11185 vos_mem_free(pWdaParams->wdaMsgParam) ;
11186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11187 vos_mem_free(pWdaParams) ;
11188
11189 return ;
11190}
11191/*
11192 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11193 * Request to WDI to set Preferred Network List.Offload
11194 */
11195VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
11196 tSirSetRSSIFilterReq* pRssiFilterParams)
11197{
Jeff Johnson43971f52012-07-17 12:26:56 -070011198 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011199 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
11200 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
11201 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011203 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011204 if(NULL == pwdiSetRssiFilterReqInfo)
11205 {
11206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011207 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011208 VOS_ASSERT(0);
11209 return VOS_STATUS_E_NOMEM;
11210 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011211 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11212 if(NULL == pWdaParams)
11213 {
11214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011215 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011216 VOS_ASSERT(0);
11217 vos_mem_free(pwdiSetRssiFilterReqInfo);
11218 return VOS_STATUS_E_NOMEM;
11219 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011220 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
11221 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011222
Jeff Johnson295189b2012-06-20 16:38:30 -070011223 /* Store Params pass it to WDI */
11224 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
11225 pWdaParams->pWdaContext = pWDA;
11226 /* Store param pointer as passed in by caller */
11227 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011228 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
11229 (WDI_PNOScanCb)WDA_RssiFilterCallback,
11230 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011231 if(IS_WDI_STATUS_FAILURE(status))
11232 {
11233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11234 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
11235 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11236 vos_mem_free(pWdaParams->wdaMsgParam);
11237 pWdaParams->wdaWdiApiMsgParam = NULL;
11238 pWdaParams->wdaMsgParam = NULL;
11239 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011240 return CONVERT_WDI2VOS_STATUS(status) ;
11241}
11242
Jeff Johnson295189b2012-06-20 16:38:30 -070011243/*
11244 * FUNCTION: WDA_ProcessUpdateScanParams
11245 * Request to WDI to update Scan Parameters
11246 */
11247VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
11248 tSirUpdateScanParams *pUpdateScanParams)
11249{
Jeff Johnson43971f52012-07-17 12:26:56 -070011250 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011251 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
11252 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
11253 sizeof(WDI_UpdateScanParamsInfoType)) ;
11254 tWDA_ReqParams *pWdaParams ;
11255 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011257 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011258 if(NULL == wdiUpdateScanParamsInfoType)
11259 {
11260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011261 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011262 VOS_ASSERT(0);
11263 return VOS_STATUS_E_NOMEM;
11264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011265 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11266 if ( NULL == pWdaParams )
11267 {
11268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011270 VOS_ASSERT(0);
11271 vos_mem_free(wdiUpdateScanParamsInfoType);
11272 return VOS_STATUS_E_NOMEM;
11273 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011274 //
11275 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11276 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11278 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11279 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11280 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11281 "sir struct %d wdi struct %d",
11282 pUpdateScanParams->b11dEnabled,
11283 pUpdateScanParams->b11dResolved,
11284 pUpdateScanParams->ucChannelCount,
11285 pUpdateScanParams->usPassiveMinChTime,
11286 pUpdateScanParams->usPassiveMaxChTime,
11287 pUpdateScanParams->usActiveMinChTime,
11288 pUpdateScanParams->usActiveMaxChTime,
11289 sizeof(tSirUpdateScanParams),
11290 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11291
Jeff Johnson295189b2012-06-20 16:38:30 -070011292 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11293 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011294 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11295 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011296 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11297 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11299 pUpdateScanParams->usActiveMaxChTime;
11300 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11301 pUpdateScanParams->usActiveMinChTime;
11302 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11303 pUpdateScanParams->usPassiveMaxChTime;
11304 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11305 pUpdateScanParams->usPassiveMinChTime;
11306
Jeff Johnson295189b2012-06-20 16:38:30 -070011307 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011308 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11309 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011310
Jeff Johnson295189b2012-06-20 16:38:30 -070011311 for ( i = 0; i <
11312 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11313 i++)
11314 {
11315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11316 "Update Scan Parameters channel: %d",
11317 pUpdateScanParams->aChannels[i]);
11318
11319 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11320 pUpdateScanParams->aChannels[i];
11321 }
11322
Jeff Johnson295189b2012-06-20 16:38:30 -070011323 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011324
Jeff Johnson295189b2012-06-20 16:38:30 -070011325 /* Store Params pass it to WDI */
11326 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11327 pWdaParams->pWdaContext = pWDA;
11328 /* Store param pointer as passed in by caller */
11329 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011330
Jeff Johnson295189b2012-06-20 16:38:30 -070011331
11332
11333 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11334 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11335 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011336 if(IS_WDI_STATUS_FAILURE(status))
11337 {
11338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11339 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11341 vos_mem_free(pWdaParams->wdaMsgParam);
11342 vos_mem_free(pWdaParams);
11343 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011344 return CONVERT_WDI2VOS_STATUS(status) ;
11345}
11346#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070011347#ifdef WLAN_FEATURE_PACKET_FILTERING
11348/*
11349 * FUNCTION: WDA_8023MulticastListReqCallback
11350 *
11351 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011352void WDA_8023MulticastListReqCallback(
11353 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11354 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011355{
11356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011358 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011359 if(NULL == pWdaParams)
11360 {
11361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011362 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011363 VOS_ASSERT(0) ;
11364 return ;
11365 }
11366
11367 vos_mem_free(pWdaParams->wdaMsgParam) ;
11368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11369 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011370 //print a msg, nothing else to do
11371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11372 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011373 return ;
11374}
Jeff Johnson295189b2012-06-20 16:38:30 -070011375/*
11376 * FUNCTION: WDA_Process8023MulticastListReq
11377 * Request to WDI to add 8023 Multicast List
11378 */
11379VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11380 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11381{
Jeff Johnson43971f52012-07-17 12:26:56 -070011382 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011383 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11384 tWDA_ReqParams *pWdaParams ;
11385 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011387 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 pwdiFltPktSetMcListReqParamsType =
11389 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11390 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11391 ) ;
11392 if(NULL == pwdiFltPktSetMcListReqParamsType)
11393 {
11394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011395 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011396 return VOS_STATUS_E_NOMEM;
11397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011398 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11399 if(NULL == pWdaParams)
11400 {
11401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011403 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11404 return VOS_STATUS_E_NOMEM;
11405 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011406
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 //
11408 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11409 //
11410 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011411 pRcvFltMcAddrList->ulMulticastAddrCnt;
11412
11413 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11414 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11415 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11416 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11417
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11419 {
11420 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11421 &(pRcvFltMcAddrList->multicastAddr[i]),
11422 sizeof(tSirMacAddr));
11423 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011424 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011425
Jeff Johnson295189b2012-06-20 16:38:30 -070011426 /* Store Params pass it to WDI */
11427 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11428 pWdaParams->pWdaContext = pWDA;
11429 /* Store param pointer as passed in by caller */
11430 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011431 status = WDI_8023MulticastListReq(
11432 pwdiFltPktSetMcListReqParamsType,
11433 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11434 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011435 if(IS_WDI_STATUS_FAILURE(status))
11436 {
11437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11438 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11440 vos_mem_free(pWdaParams->wdaMsgParam);
11441 vos_mem_free(pWdaParams);
11442 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011443 return CONVERT_WDI2VOS_STATUS(status) ;
11444}
Jeff Johnson295189b2012-06-20 16:38:30 -070011445/*
11446 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11447 *
11448 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011449void WDA_ReceiveFilterSetFilterReqCallback(
11450 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11451 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011452{
11453 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011455 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011456 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011457 if(NULL == pWdaParams)
11458 {
11459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011460 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011461 VOS_ASSERT(0) ;
11462 return ;
11463 }
11464
11465 vos_mem_free(pWdaParams->wdaMsgParam) ;
11466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11467 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011468 //print a msg, nothing else to do
11469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11470 "WDA_ReceiveFilterSetFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011471 return ;
11472}
Jeff Johnson295189b2012-06-20 16:38:30 -070011473/*
11474 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11475 * Request to WDI to set Receive Filters
11476 */
11477VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11478 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11479{
Jeff Johnson43971f52012-07-17 12:26:56 -070011480 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011481 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11482 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11483 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11484 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11485 tWDA_ReqParams *pWdaParams ;
11486 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011488 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011489 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11490 {
11491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011493 VOS_ASSERT(0);
11494 return VOS_STATUS_E_NOMEM;
11495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011496 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11497 if(NULL == pWdaParams)
11498 {
11499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011501 VOS_ASSERT(0);
11502 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11503 return VOS_STATUS_E_NOMEM;
11504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011505 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11506 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11507 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11508 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011509 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11510 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11511
11512 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11513 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011514
11515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11516 "FID %d FT %d NParams %d CT %d",
11517 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11518 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11519 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11520 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11522 {
11523 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11524 &pRcvPktFilterCfg->paramsData[i],
11525 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11527 "Proto %d Comp Flag %d \n",
11528 pwdiSetRcvPktFilterReqParamsType->
11529 wdiPktFilterCfg.paramsData[i].protocolLayer,
11530 pwdiSetRcvPktFilterReqParamsType->
11531 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11533 "Data Offset %d Data Len %d\n",
11534 pwdiSetRcvPktFilterReqParamsType->
11535 wdiPktFilterCfg.paramsData[i].dataOffset,
11536 pwdiSetRcvPktFilterReqParamsType->
11537 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11539 "CData: %d:%d:%d:%d:%d:%d\n",
11540 pwdiSetRcvPktFilterReqParamsType->
11541 wdiPktFilterCfg.paramsData[i].compareData[0],
11542 pwdiSetRcvPktFilterReqParamsType->
11543 wdiPktFilterCfg.paramsData[i].compareData[1],
11544 pwdiSetRcvPktFilterReqParamsType->
11545 wdiPktFilterCfg.paramsData[i].compareData[2],
11546 pwdiSetRcvPktFilterReqParamsType->
11547 wdiPktFilterCfg.paramsData[i].compareData[3],
11548 pwdiSetRcvPktFilterReqParamsType->
11549 wdiPktFilterCfg.paramsData[i].compareData[4],
11550 pwdiSetRcvPktFilterReqParamsType->
11551 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11553 "MData: %d:%d:%d:%d:%d:%d\n",
11554 pwdiSetRcvPktFilterReqParamsType->
11555 wdiPktFilterCfg.paramsData[i].dataMask[0],
11556 pwdiSetRcvPktFilterReqParamsType->
11557 wdiPktFilterCfg.paramsData[i].dataMask[1],
11558 pwdiSetRcvPktFilterReqParamsType->
11559 wdiPktFilterCfg.paramsData[i].dataMask[2],
11560 pwdiSetRcvPktFilterReqParamsType->
11561 wdiPktFilterCfg.paramsData[i].dataMask[3],
11562 pwdiSetRcvPktFilterReqParamsType->
11563 wdiPktFilterCfg.paramsData[i].dataMask[4],
11564 pwdiSetRcvPktFilterReqParamsType->
11565 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011566 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011567 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011568 /* Store Params pass it to WDI */
11569 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11570 pWdaParams->pWdaContext = pWDA;
11571 /* Store param pointer as passed in by caller */
11572 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011573 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
11574 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterReqCallback,
11575 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011576 if(IS_WDI_STATUS_FAILURE(status))
11577 {
11578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11579 "Failure in SetFilter(),free all the memory,status %d ",status);
11580 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11581 vos_mem_free(pWdaParams->wdaMsgParam);
11582 vos_mem_free(pWdaParams);
11583 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011584 return CONVERT_WDI2VOS_STATUS(status) ;
11585}
Jeff Johnson295189b2012-06-20 16:38:30 -070011586/*
11587 * FUNCTION: WDA_FilterMatchCountReqCallback
11588 *
11589 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011590void WDA_FilterMatchCountReqCallback(
11591 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11592 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011593{
11594 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11595 tWDA_CbContext *pWDA;
11596 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11597 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11598 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11599 tANI_U8 i;
11600 vos_msg_t vosMsg;
11601
11602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011603 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11605
Jeff Johnsone7245742012-09-05 17:12:55 -070011606 if(NULL == pRcvFltPktMatchCntRsp)
11607 {
11608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011609 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011610 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011611 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011612 return ;
11613 }
11614
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 if(NULL == pWdaParams)
11616 {
11617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011618 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011619 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011620 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 return ;
11622 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011623 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11624 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011625 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11626 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11627
11628 /* Message Header */
11629 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11630 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11631
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011632 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011633
11634 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11635 {
11636 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11637 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11638 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011639 /* VOS message wrapper */
11640 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11641 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11642 vosMsg.bodyval = 0;
11643 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11644 {
11645 /* free the mem and return */
11646 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11647 }
11648
11649 vos_mem_free(pWdaParams->wdaMsgParam) ;
11650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11651 vos_mem_free(pWdaParams) ;
11652}
Jeff Johnson295189b2012-06-20 16:38:30 -070011653/*
11654 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11655 * Request to WDI to get PC Filter Match Count
11656 */
11657VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11658{
Jeff Johnson43971f52012-07-17 12:26:56 -070011659 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011660 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11661 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11662 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011664 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011665 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11666 {
11667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011668 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011669 VOS_ASSERT(0);
11670 return VOS_STATUS_E_NOMEM;
11671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011672 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11673 if(NULL == pWdaParams)
11674 {
11675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011677 VOS_ASSERT(0);
11678 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11679 return VOS_STATUS_E_NOMEM;
11680 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011681
Jeff Johnson295189b2012-06-20 16:38:30 -070011682 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11683
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011684 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11685 pRcvFltPktMatchRsp->bssId,
11686 sizeof(wpt_macAddr));
11687
Jeff Johnson295189b2012-06-20 16:38:30 -070011688 /* Store Params pass it to WDI */
11689 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11690 pWdaParams->pWdaContext = pWDA;
11691 /* Store param pointer as passed in by caller */
11692 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011693 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11694 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11695 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011696 if(IS_WDI_STATUS_FAILURE(status))
11697 {
11698 /* failure returned by WDI API */
11699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11700 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11701 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11702 vos_mem_free(pWdaParams) ;
11703 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11704 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11705 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011706 return CONVERT_WDI2VOS_STATUS(status) ;
11707}
Jeff Johnson295189b2012-06-20 16:38:30 -070011708/*
11709 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11710 *
11711 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011712void WDA_ReceiveFilterClearFilterReqCallback(
11713 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11714 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011715{
11716 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011718 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011719/* WDA_VOS_ASSERT(NULL != pWdaParams); */
11720 if(NULL == pWdaParams)
11721 {
11722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011723 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011724 VOS_ASSERT(0) ;
11725 return ;
11726 }
11727
11728 vos_mem_free(pWdaParams->wdaMsgParam) ;
11729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11730 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011731 //print a msg, nothing else to do
11732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11733 "WDA_ReceiveFilterClearFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011734 return ;
11735}
Jeff Johnson295189b2012-06-20 16:38:30 -070011736/*
11737 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
11738 * Request to WDI to clear Receive Filters
11739 */
11740VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
11741 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
11742{
Jeff Johnson43971f52012-07-17 12:26:56 -070011743 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011744 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
11745 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
11746 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011748 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011749 if(NULL == pwdiRcvFltPktClearReqParamsType)
11750 {
11751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011752 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011753 VOS_ASSERT(0);
11754 return VOS_STATUS_E_NOMEM;
11755 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011756 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11757 if(NULL == pWdaParams)
11758 {
11759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011761 VOS_ASSERT(0);
11762 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
11763 return VOS_STATUS_E_NOMEM;
11764 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011765 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
11766 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070011767 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
11768 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
11769 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
11770 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011771
11772 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011773 /* Store Params pass it to WDI */
11774 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
11775 pWdaParams->pWdaContext = pWDA;
11776 /* Store param pointer as passed in by caller */
11777 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
11779 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterReqCallback,
11780 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011781 if(IS_WDI_STATUS_FAILURE(status))
11782 {
11783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11784 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
11785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011787 return CONVERT_WDI2VOS_STATUS(status) ;
11788}
11789#endif // WLAN_FEATURE_PACKET_FILTERING
11790
Jeff Johnson295189b2012-06-20 16:38:30 -070011791/*
11792 * FUNCTION: WDA_ProcessSetPowerParamsReq
11793 * Request to WDI to set power params
11794 */
11795VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
11796 tSirSetPowerParamsReq *pPowerParams)
11797{
Jeff Johnson43971f52012-07-17 12:26:56 -070011798 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011799 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
11800 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011801 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011803 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011804 if(NULL == pwdiSetPowerParamsReqInfo)
11805 {
11806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011807 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011808 VOS_ASSERT(0);
11809 return VOS_STATUS_E_NOMEM;
11810 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011811 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11812 if(NULL == pWdaParams)
11813 {
11814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011815 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011816 VOS_ASSERT(0);
11817 vos_mem_free(pwdiSetPowerParamsReqInfo);
11818 return VOS_STATUS_E_NOMEM;
11819 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011820
Jeff Johnson295189b2012-06-20 16:38:30 -070011821
11822 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
11823 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011824 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
11825 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070011826 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
11827 pPowerParams->uListenInterval;
11828 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
11829 pPowerParams->uBcastMcastFilter;
11830 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
11831 pPowerParams->uEnableBET;
11832 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
11833 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070011834 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011835
Jeff Johnson295189b2012-06-20 16:38:30 -070011836 /* Store Params pass it to WDI */
11837 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
11838 pWdaParams->pWdaContext = pWDA;
11839 /* Store param pointer as passed in by caller */
11840 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011841 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
11842 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
11843 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011844 if(IS_WDI_STATUS_FAILURE(status))
11845 {
11846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11847 "Failure in Set power params REQ WDI API, free all the memory " );
11848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11849 vos_mem_free(pWdaParams->wdaMsgParam);
11850 pWdaParams->wdaWdiApiMsgParam = NULL;
11851 pWdaParams->wdaMsgParam = NULL;
11852 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011853 return CONVERT_WDI2VOS_STATUS(status) ;
11854}
11855
11856/*
11857 * FUNCTION: WDA_SetTmLevelRspCallback
11858 * Set TM Level response
11859 */
11860void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
11861{
11862 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11863
11864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011865 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011866
11867 if(NULL == pWdaParams)
11868 {
11869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011870 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011871 VOS_ASSERT(0) ;
11872 return ;
11873 }
11874
11875 /* Dose not need to send notification to upper layer
11876 * Just free allocated resources */
11877 if( pWdaParams != NULL )
11878 {
11879 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11880 {
11881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11882 }
11883 vos_mem_free(pWdaParams->wdaMsgParam) ;
11884 vos_mem_free(pWdaParams) ;
11885 }
11886}
11887
11888/*
11889 * FUNCTION: WDA_ProcessSetTmLevelReq
11890 * Set TM Level request
11891 */
11892VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
11893 tAniSetTmLevelReq *setTmLevelReq)
11894{
11895 WDI_Status status = WDI_STATUS_SUCCESS ;
11896 tWDA_ReqParams *pWdaParams ;
11897 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
11898 (WDI_SetTmLevelReqType *)vos_mem_malloc(
11899 sizeof(WDI_SetTmLevelReqType)) ;
11900 if(NULL == wdiSetTmLevelReq)
11901 {
11902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011904 VOS_ASSERT(0);
11905 return VOS_STATUS_E_NOMEM;
11906 }
11907
11908 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11909 if(NULL == pWdaParams)
11910 {
11911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011913 VOS_ASSERT(0);
11914 vos_mem_free(wdiSetTmLevelReq);
11915 return VOS_STATUS_E_NOMEM;
11916 }
11917
11918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011919 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011920
11921 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
11922 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
11923
11924 pWdaParams->pWdaContext = pWDA;
11925 pWdaParams->wdaMsgParam = setTmLevelReq;
11926 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
11927
11928 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
11929 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
11930
11931 if(IS_WDI_STATUS_FAILURE(status))
11932 {
11933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080011934 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070011935 vos_mem_free(pWdaParams->wdaMsgParam) ;
11936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11937 vos_mem_free(pWdaParams) ;
11938 }
11939
11940 return CONVERT_WDI2VOS_STATUS(status) ;
11941}
11942
11943VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
11944 tpTxControlParams pTxCtrlParam)
11945{
11946 VOS_STATUS wdaStatus;
11947
11948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011949 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011950 if( pTxCtrlParam == NULL )
11951 {
11952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011953 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011954 return VOS_STATUS_E_FAILURE;
11955 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011956 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
11957 {
11958 wdaStatus = WDA_SuspendDataTx(pWDA);
11959 }
11960 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
11961 {
11962 wdaStatus = WDA_ResumeDataTx(pWDA);
11963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011964 return wdaStatus;
11965}
11966
11967 /* FUNCTION WDA_featureCapsExchange
11968 * WDA API to invoke capability exchange between host and FW.
11969 */
11970void WDA_featureCapsExchange(v_PVOID_t pVosContext)
11971{
11972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011973 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011974 WDI_featureCapsExchangeReq( NULL, pVosContext);
11975}
11976
Yathish9f22e662012-12-10 14:21:35 -080011977/* FUNCTION WDA_disableCapablityFeature
11978 * WDA API to diable Active mode offload in host.
11979 */
11980void WDA_disableCapablityFeature(tANI_U8 feature_index)
11981{
11982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11983 "%s:enter", __func__ );
11984 WDI_disableCapablityFeature(feature_index);
11985}
11986
Jeff Johnson295189b2012-06-20 16:38:30 -070011987 /* FUNCTION WDA_getHostWlanFeatCaps
11988 * Wrapper for WDI API, that will return if the feature (enum value).passed
11989 * to this API is supported or not in Host
11990 * return value
11991 * 0 - implies feature is NOT Supported
11992 * any non zero value - implies feature is SUPPORTED
11993 */
11994tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
11995{
11996 return WDI_getHostWlanFeatCaps(featEnumValue);
11997}
11998
11999 /* FUNCTION WDA_getFwWlanFeatCaps
12000 * Wrapper for WDI API, that will return if the feature (enum value).passed
12001 * to this API is supported or not in FW
12002 * return value
12003 * 0 - implies feature is NOT Supported
12004 * any non zero value - implies feature is SUPPORTED
12005 */
12006tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
12007{
12008 return WDI_getFwWlanFeatCaps(featEnumValue);
12009}
12010
12011/*
12012 * FUNCTION: WDA_shutdown
12013 * Shutdown WDA/WDI without handshaking with Riva.
12014 * Synchronous function.
12015 */
12016VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
12017{
12018 WDI_Status wdiStatus;
12019 //tANI_U8 eventIdx = 0;
12020 VOS_STATUS status = VOS_STATUS_SUCCESS;
12021 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012022 if (NULL == pWDA)
12023 {
12024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012025 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012026 VOS_ASSERT(0);
12027 return VOS_STATUS_E_FAILURE;
12028 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012029 /* FTM mode stay START_STATE */
12030 if( (WDA_READY_STATE != pWDA->wdaState) &&
12031 (WDA_INIT_STATE != pWDA->wdaState) &&
12032 (WDA_START_STATE != pWDA->wdaState) )
12033 {
12034 VOS_ASSERT(0);
12035 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012036
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012037 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
12038 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070012039 {
12040 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012041 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012042 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012043
Jeff Johnson295189b2012-06-20 16:38:30 -070012044 /* call WDI shutdown */
12045 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070012046 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
12047 {
12048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12049 "error in WDA Stop" );
12050 status = VOS_STATUS_E_FAILURE;
12051 }
12052 /* WDI stop is synchrnous, shutdown is complete when it returns */
12053 pWDA->wdaState = WDA_STOP_STATE;
12054
Jeff Johnson295189b2012-06-20 16:38:30 -070012055 /* shutdown should perform the stop & close actions. */
12056 /* Destroy the event */
12057 status = vos_event_destroy(&pWDA->txFrameEvent);
12058 if(!VOS_IS_STATUS_SUCCESS(status))
12059 {
12060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12061 "VOS Event destroy failed - status = %d\n", status);
12062 status = VOS_STATUS_E_FAILURE;
12063 }
12064 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
12065 if(!VOS_IS_STATUS_SUCCESS(status))
12066 {
12067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12068 "VOS Event destroy failed - status = %d\n", status);
12069 status = VOS_STATUS_E_FAILURE;
12070 }
12071 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
12072 if(!VOS_IS_STATUS_SUCCESS(status))
12073 {
12074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12075 "VOS Event destroy failed - status = %d\n", status);
12076 status = VOS_STATUS_E_FAILURE;
12077 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012078 /* free WDA context */
12079 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
12080 if ( !VOS_IS_STATUS_SUCCESS(status) )
12081 {
12082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12083 "error in WDA close " );
12084 status = VOS_STATUS_E_FAILURE;
12085 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012086 return status;
12087}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012088
Jeff Johnsone7245742012-09-05 17:12:55 -070012089/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012090 * FUNCTION: WDA_setNeedShutdown
12091 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070012092 */
12093
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012094void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070012095{
12096 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012097 if(pWDA == NULL)
12098 {
12099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12100 "Could not get the WDA Context pointer" );
12101 return;
12102 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012103 pWDA->needShutdown = TRUE;
12104}
12105/*
12106 * FUNCTION: WDA_needShutdown
12107 * WDA needs a shutdown
12108 */
12109
12110v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
12111{
12112 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012113 if(pWDA == NULL)
12114 {
12115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12116 "Could not get the WDA Context pointer" );
12117 return 0;
12118 }
12119 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070012120}
12121
Mohit Khanna4a70d262012-09-11 16:30:12 -070012122#ifdef WLAN_FEATURE_11AC
12123/*
12124 * FUNCTION: WDA_SetBeaconFilterReqCallback
12125 *
12126 */
12127void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
12128{
12129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012131 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012132 if(NULL == pWdaParams)
12133 {
12134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012135 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012136 VOS_ASSERT(0) ;
12137 return ;
12138 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012139
Mohit Khanna4a70d262012-09-11 16:30:12 -070012140 vos_mem_free(pWdaParams->wdaMsgParam) ;
12141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12142 vos_mem_free(pWdaParams) ;
12143 /*
12144 * No respone required for SetBeaconFilter req so just free the request
12145 * param here
12146 */
12147
12148 return ;
12149}
12150
12151VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
12152 tUpdateVHTOpMode *pData)
12153{
12154 WDI_Status status = WDI_STATUS_SUCCESS ;
12155 tWDA_ReqParams *pWdaParams ;
12156 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
12157 sizeof(WDI_UpdateVHTOpMode)) ;
12158 if(NULL == wdiTemp)
12159 {
12160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012161 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012162 VOS_ASSERT(0);
12163 return VOS_STATUS_E_NOMEM;
12164 }
12165 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12166 if(NULL == pWdaParams)
12167 {
12168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012169 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012170 VOS_ASSERT(0);
12171 vos_mem_free(wdiTemp);
12172 return VOS_STATUS_E_NOMEM;
12173 }
12174
12175 wdiTemp->opMode = pData->opMode;
12176 wdiTemp->staId = pData->staId;
12177
12178 pWdaParams->pWdaContext = pWDA;
12179 /* Store Req pointer, as this will be used for response */
12180 pWdaParams->wdaMsgParam = (void *)pData;
12181 /* store Params pass it to WDI */
12182 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
12183
12184 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
12185
12186 if(IS_WDI_STATUS_FAILURE(status))
12187 {
12188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12189 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
12190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12191 vos_mem_free(pWdaParams->wdaMsgParam);
12192 vos_mem_free(pWdaParams);
12193 }
12194 return CONVERT_WDI2VOS_STATUS(status) ;
12195}
12196#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012197
12198/*==========================================================================
12199 FUNCTION WDA_TransportChannelDebug
12200
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070012201 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012202 Display Transport Channel debugging information
12203 User may request to display DXE channel snapshot
12204 Or if host driver detects any abnormal stcuk may display
12205
12206 PARAMETERS
Jeff Johnsonb88db982012-12-10 13:34:59 -080012207 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012208 enableStallDetect : Enable stall detect feature
12209 This feature will take effect to data performance
12210 Not integrate till fully verification
12211
12212 RETURN VALUE
12213 NONE
12214
12215===========================================================================*/
12216void WDA_TransportChannelDebug
12217(
12218 v_BOOL_t displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012219 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012220)
12221{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012222 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012223 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012224}