blob: 8bb48ff904ba79bc1ea423814c4b9ab611718e14 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala9c070ad2013-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 Koyyalamudi28260002013-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 Nakkalaab4786d2013-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 Koyyalamudi28260002013-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 Koyyalamudi33df5692012-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 Nakkalaba261272013-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 Koyyalamudi28260002013-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 }
Kirand170dcb2013-01-31 10:43:43 -08002914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2915 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2918 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 /* Store Init Req pointer, as this will be used for response */
2920 /* store Params pass it to WDI */
2921 pWdaParams->pWdaContext = pWDA;
2922 pWdaParams->wdaMsgParam = configBssReqParam;
2923 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2925 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 if(IS_WDI_STATUS_FAILURE(status))
2927 {
2928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2929 "Failure in Config BSS WDI API, free all the memory " );
2930 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2931 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 return CONVERT_WDI2VOS_STATUS(status) ;
2936}
Jeff Johnson295189b2012-06-20 16:38:30 -07002937#ifdef ENABLE_HAL_COMBINED_MESSAGES
2938/*
2939 * FUNCTION: WDA_PostAssocReqCallback
2940 * Post ASSOC req callback, send RSP back to PE
2941 */
2942void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2943 void* pUserData)
2944{
2945 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2946 tPostAssocParams *postAssocReqParam =
2947 (tPostAssocParams *)pWDA->wdaMsgParam ;
2948 /*STA context within the BSS Params*/
2949 tAddStaParams *staPostAssocParam =
2950 &postAssocReqParam->addBssParams.staContext ;
2951 /*STA Params for self STA*/
2952 tAddStaParams *selfStaPostAssocParam =
2953 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002955 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 postAssocReqParam->status =
2957 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2959 {
2960 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2961 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2962 sizeof(tSirMacAddr)) ;
2963 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2964 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2965 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2967 }
2968 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2969 pWDA->wdaWdiApiMsgParam = NULL;
2970 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 return ;
2973}
Jeff Johnson295189b2012-06-20 16:38:30 -07002974/*
2975 * FUNCTION: WDA_ProcessPostAssocReq
2976 * Trigger POST ASSOC processing in WDI
2977 */
2978VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2979 tPostAssocParams *postAssocReqParam)
2980{
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 WDI_Status status = WDI_STATUS_SUCCESS ;
2982
2983 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2984 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2985 sizeof(WDI_PostAssocReqParamsType)) ;
2986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002987 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002988
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 if(NULL == wdiPostAssocReqParam)
2990 {
2991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002992 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 VOS_ASSERT(0);
2994 return VOS_STATUS_E_NOMEM;
2995 }
2996
2997 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
2998 {
2999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003000 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003001 VOS_ASSERT(0);
3002 return VOS_STATUS_E_FAILURE;
3003 }
3004
Jeff Johnson295189b2012-06-20 16:38:30 -07003005 /* update BSS params into WDI structure */
3006 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3007 &postAssocReqParam->addBssParams) ;
3008 /* update STA params into WDI structure */
3009 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3010 &postAssocReqParam->addStaParams) ;
3011
3012 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3013 postAssocReqParam->addBssParams.highPerformance;
3014 WDA_UpdateEdcaParamsForAC(pWDA,
3015 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3016 &postAssocReqParam->addBssParams.acbe);
3017 WDA_UpdateEdcaParamsForAC(pWDA,
3018 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3019 &postAssocReqParam->addBssParams.acbk);
3020 WDA_UpdateEdcaParamsForAC(pWDA,
3021 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3022 &postAssocReqParam->addBssParams.acvi);
3023 WDA_UpdateEdcaParamsForAC(pWDA,
3024 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3025 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 /* Store Init Req pointer, as this will be used for response */
3027 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 /* store Params pass it to WDI */
3029 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3031 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 if(IS_WDI_STATUS_FAILURE(status))
3033 {
3034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3035 "Failure in Post Assoc WDI API, free all the memory " );
3036 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3037 pWDA->wdaWdiApiMsgParam = NULL;
3038 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 return CONVERT_WDI2VOS_STATUS(status) ;
3043}
3044#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003045/*
3046 * FUNCTION: WDA_AddStaReqCallback
3047 * ADD STA req callback, send RSP back to PE
3048 */
3049void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3050 void* pUserData)
3051{
3052 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3053 tWDA_CbContext *pWDA;
3054 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003056 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 if(NULL == pWdaParams)
3058 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 VOS_ASSERT(0) ;
3061 return ;
3062 }
3063 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3064 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 addStaReqParam->status =
3066 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3068 {
3069 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3070 /*TODO: UMAC structure doesn't have these fields*/
3071 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3072 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3073 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3074 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3075 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3076 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khannac0b992f2012-12-04 15:08:18 -08003077#ifdef FEATURE_WLAN_TDLS
3078 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3079 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3080#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003081 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khannac0b992f2012-12-04 15:08:18 -08003082#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 {
3084 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3085 wdiConfigStaRsp->ucBssIdx;
3086 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3087 WDA_VALID_STA_INDEX ;
3088 }
3089 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3090 {
3091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003092 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 VOS_ASSERT(0) ;
3094 return ;
3095 }
3096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3098 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003100 return ;
3101}
Jeff Johnson295189b2012-06-20 16:38:30 -07003102/*
3103 * FUNCTION: WDA_ConfigStaReq
3104 * Trigger Config STA processing in WDI
3105 */
3106VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3107 tAddStaParams *addStaReqParam)
3108{
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3111 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3112 sizeof(WDI_ConfigSTAReqParamsType)) ;
3113 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003115 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 if(NULL == wdiConfigStaReqParam)
3117 {
3118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003119 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 VOS_ASSERT(0);
3121 return VOS_STATUS_E_NOMEM;
3122 }
3123 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3124 if(NULL == pWdaParams)
3125 {
3126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 VOS_ASSERT(0);
3129 vos_mem_free(wdiConfigStaReqParam);
3130 return VOS_STATUS_E_NOMEM;
3131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003132 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 /* update STA params into WDI structure */
3134 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3135 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003136 /* Store Init Req pointer, as this will be used for response */
3137 /* store Params pass it to WDI */
3138 pWdaParams->pWdaContext = pWDA;
3139 pWdaParams->wdaMsgParam = addStaReqParam;
3140 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3142 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003143 if(IS_WDI_STATUS_FAILURE(status))
3144 {
3145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3146 "Failure in Config STA WDI API, free all the memory " );
3147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3148 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003149 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003152 return CONVERT_WDI2VOS_STATUS(status) ;
3153}
Jeff Johnson295189b2012-06-20 16:38:30 -07003154/*
3155 * FUNCTION: WDA_DelBSSReqCallback
3156 * Dens DEL BSS RSP back to PE
3157 */
3158void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3159 void* pUserData)
3160{
3161 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3162 tWDA_CbContext *pWDA;
3163 tDeleteBssParams *delBssReqParam;
3164 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003166 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003167 if(NULL == pWdaParams)
3168 {
3169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003170 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003171 VOS_ASSERT(0) ;
3172 return ;
3173 }
3174 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3175 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003176 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3178 {
3179 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3180 sizeof(tSirMacAddr)) ;
3181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3183 {
3184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003185 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 VOS_ASSERT(0) ;
3187 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003188 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3189 {
3190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003191 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 VOS_ASSERT(0) ;
3193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003194 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3195 {
3196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003197 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 VOS_ASSERT(0) ;
3199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3201 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 /* reset the the system role*/
3203 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3204
3205 /* Reset the BA related information */
3206 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3207 {
3208 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3209 {
3210 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3211 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3212 /* Reset framesTxed counters here */
3213 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3214 {
3215 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3216 }
3217 }
3218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 return ;
3221}
3222
Jeff Johnson295189b2012-06-20 16:38:30 -07003223/*
3224 * FUNCTION: WDA_ProcessDelBssReq
3225 * Init DEL BSS req with WDI
3226 */
3227VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3228 tDeleteBssParams *delBssParam)
3229{
3230 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3232 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3233 sizeof(WDI_DelBSSReqParamsType)) ;
3234 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003236 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 if(NULL == wdiDelBssReqParam)
3238 {
3239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003240 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003241 VOS_ASSERT(0);
3242 return VOS_STATUS_E_NOMEM;
3243 }
3244 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3245 if(NULL == pWdaParams)
3246 {
3247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 VOS_ASSERT(0);
3250 vos_mem_free(wdiDelBssReqParam);
3251 return VOS_STATUS_E_NOMEM;
3252 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3254 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3255
3256 /* Store Init Req pointer, as this will be used for response */
3257 /* store Params pass it to WDI */
3258 pWdaParams->pWdaContext = pWDA;
3259 pWdaParams->wdaMsgParam = delBssParam;
3260 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 status = WDI_DelBSSReq(wdiDelBssReqParam,
3262 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 if(IS_WDI_STATUS_FAILURE(status))
3264 {
3265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3266 "Failure in Del BSS WDI API, free all the memory " );
3267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3268 vos_mem_free(pWdaParams) ;
3269 delBssParam->status = eSIR_FAILURE ;
3270 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 return CONVERT_WDI2VOS_STATUS(status) ;
3273}
Jeff Johnson295189b2012-06-20 16:38:30 -07003274/*
3275 * FUNCTION: WDA_DelSTAReqCallback
3276 * Dens DEL STA RSP back to PE
3277 */
3278void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3279 void* pUserData)
3280{
3281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3282 tWDA_CbContext *pWDA;
3283 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003285 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 if(NULL == pWdaParams)
3287 {
3288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003289 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 VOS_ASSERT(0) ;
3291 return ;
3292 }
3293 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3294 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3297 {
3298 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3299 {
3300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003301 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 VOS_ASSERT(0) ;
3303 }
3304 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3305 }
3306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3307 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 /*Reset the BA information corresponding to this STAIdx */
3309 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3310 WDA_INVALID_STA_INDEX;
3311 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3312
3313 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 return ;
3315}
Jeff Johnson295189b2012-06-20 16:38:30 -07003316/*
3317 * FUNCTION: WDA_ProcessDelStaReq
3318 * Init DEL STA req with WDI
3319 */
3320VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3321 tDeleteStaParams *delStaParam)
3322{
3323 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3325 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3326 sizeof(WDI_DelSTAReqParamsType)) ;
3327 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003329 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 if(NULL == wdiDelStaReqParam)
3331 {
3332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003333 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 VOS_ASSERT(0);
3335 return VOS_STATUS_E_NOMEM;
3336 }
3337 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3338 if(NULL == pWdaParams)
3339 {
3340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 VOS_ASSERT(0);
3343 vos_mem_free(wdiDelStaReqParam);
3344 return VOS_STATUS_E_NOMEM;
3345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3347 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 /* Store Init Req pointer, as this will be used for response */
3349 /* store Params pass it to WDI */
3350 pWdaParams->pWdaContext = pWDA;
3351 pWdaParams->wdaMsgParam = delStaParam;
3352 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 status = WDI_DelSTAReq(wdiDelStaReqParam,
3354 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 if(IS_WDI_STATUS_FAILURE(status))
3356 {
3357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3358 "Failure in Del STA WDI API, free all the memory status = %d",
3359 status );
3360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3361 vos_mem_free(pWdaParams) ;
3362 delStaParam->status = eSIR_FAILURE ;
3363 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 return CONVERT_WDI2VOS_STATUS(status) ;
3366}
Jeff Johnson295189b2012-06-20 16:38:30 -07003367void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3368{
3369 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3370 tWDA_CbContext *pWDA;
3371 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003373 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003374 if(NULL == pWdaParams)
3375 {
3376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003377 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003378 VOS_ASSERT(0) ;
3379 return ;
3380 }
3381 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3382 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3384 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3386 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3387 pwdiAddSTASelfRsp->macSelfSta,
3388 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003390 return ;
3391}
Jeff Johnson295189b2012-06-20 16:38:30 -07003392/*
3393 * FUNCTION: WDA_ProcessAddStaSelfReq
3394 *
3395 */
3396VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3397{
3398 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003399 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3401 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3402 sizeof(WDI_AddSTASelfReqParamsType)) ;
3403 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003405 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 if( NULL == wdiAddStaSelfReq )
3407 {
3408 VOS_ASSERT( 0 );
3409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003410 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 return( VOS_STATUS_E_NOMEM );
3412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003414 if( NULL == pWdaParams )
3415 {
3416 VOS_ASSERT( 0 );
3417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003418 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 vos_mem_free(wdiAddStaSelfReq) ;
3420 return( VOS_STATUS_E_NOMEM );
3421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003423 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3424 /* Store Init Req pointer, as this will be used for response */
3425 /* store Params pass it to WDI */
3426 pWdaParams->pWdaContext = pWDA;
3427 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3428 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003429 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003430
Jeff Johnson43971f52012-07-17 12:26:56 -07003431 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003432 {
3433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3434 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003435 wstatus );
3436 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3438 vos_mem_free(pWdaParams) ;
3439 pAddStaSelfReq->status = eSIR_FAILURE ;
3440 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3441 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003442 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003443}
Jeff Johnson295189b2012-06-20 16:38:30 -07003444/*
3445 * FUNCTION: WDA_DelSTASelfRespCallback
3446 *
3447 */
3448void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3449 wdiDelStaSelfRspParams , void* pUserData)
3450{
3451 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3452 tWDA_CbContext *pWDA;
3453 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003455 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003456 if (NULL == pWdaParams)
3457 {
3458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003459 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 VOS_ASSERT(0);
3461 return;
3462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3464 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 delStaSelfParams->status =
3466 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3467
3468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3469 vos_mem_free(pWdaParams) ;
3470
3471 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 return ;
3473}
Jeff Johnson295189b2012-06-20 16:38:30 -07003474/*
3475 * FUNCTION: WDA_DelSTASelfReqCallback
3476 *
3477 */
3478void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3479 void* pUserData)
3480{
3481 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3482 tWDA_CbContext *pWDA;
3483 tDelStaSelfParams *delStaSelfParams;
3484
3485 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3486 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003487 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003488
3489 if (NULL == pWdaParams)
3490 {
3491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003492 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 VOS_ASSERT(0);
3494 return;
3495 }
3496
3497 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3498 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3499
3500 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3501
3502 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3503 {
3504 VOS_ASSERT(0);
3505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3506 vos_mem_free(pWdaParams) ;
3507 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3508 }
3509
3510 return ;
3511}
3512
3513/*
3514 * FUNCTION: WDA_DelSTASelfReq
3515 * Trigger Config STA processing in WDI
3516 */
3517VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3518 tDelStaSelfParams* pDelStaSelfReqParam)
3519{
3520 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003521 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 tWDA_ReqParams *pWdaParams = NULL;
3523 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3524 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3525 sizeof(WDI_DelSTASelfReqParamsType)) ;
3526
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003528 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 if( NULL == wdiDelStaSelfReq )
3530 {
3531 VOS_ASSERT( 0 );
3532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003533 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 return( VOS_STATUS_E_NOMEM );
3535 }
3536
3537 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3538 if( NULL == pWdaParams )
3539 {
3540 VOS_ASSERT( 0 );
3541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003542 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 vos_mem_free(wdiDelStaSelfReq) ;
3544 return( VOS_STATUS_E_NOMEM );
3545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003546 pWdaParams->pWdaContext = pWDA;
3547 /* Store param pointer as passed in by caller */
3548 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3549 /* store Params pass it to WDI */
3550 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3552 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3553
3554 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3555 wdiDelStaSelfReq->pUserData = pWdaParams;
3556
Jeff Johnson43971f52012-07-17 12:26:56 -07003557 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3559
Jeff Johnson43971f52012-07-17 12:26:56 -07003560 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 {
3562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3563 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3564 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003565 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3567 vos_mem_free(pWdaParams) ;
3568 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3569 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3570 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003571 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003572}
3573
Jeff Johnson295189b2012-06-20 16:38:30 -07003574/*
3575 * FUNCTION: WDA_SendMsg
3576 * Send Message back to PE
3577 */
3578void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3579 void *pBodyptr, tANI_U32 bodyVal)
3580{
3581 tSirMsgQ msg = {0} ;
3582 tANI_U32 status = VOS_STATUS_SUCCESS ;
3583 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 msg.type = msgType;
3585 msg.bodyval = bodyVal;
3586 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 if (VOS_STATUS_SUCCESS != status)
3589 {
3590 if(NULL != pBodyptr)
3591 {
3592 vos_mem_free(pBodyptr);
3593 }
3594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003595 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 VOS_ASSERT(0) ;
3597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 return ;
3599}
Jeff Johnson295189b2012-06-20 16:38:30 -07003600/*
3601 * FUNCTION: WDA_UpdateBSSParams
3602 * Translated WDA/PE BSS info into WDI BSS info..
3603 */
3604void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3605 WDI_ConfigBSSReqInfoType *wdiBssParams,
3606 tAddBssParams *wdaBssParams)
3607{
3608 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003609 /* copy bssReq Params to WDI structure */
3610 vos_mem_copy(wdiBssParams->macBSSID,
3611 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3612 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3613 sizeof(tSirMacAddr)) ;
3614 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3615 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3616 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 wdiBssParams->ucShortSlotTimeSupported =
3618 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3620 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3621 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3622 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3623 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3624
3625 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3626 wdiBssParams->ucTXOPProtectionFullSupport =
3627 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003628 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3629 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003630 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003631 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3632 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3633 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3634 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3635
3636 /* copy SSID into WDI structure */
3637 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3638 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3639 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3641 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003643#ifdef WLAN_FEATURE_VOWIFI
3644 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3645#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003646 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003648#ifdef WLAN_FEATURE_VOWIFI_11R
3649 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 if(wdiBssParams->bExtSetStaKeyParamValid)
3651 {
3652 /* copy set STA key params to WDI structure */
3653 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3654 wdaBssParams->extSetStaKeyParam.staIdx;
3655 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3656 wdaBssParams->extSetStaKeyParam.encType;
3657 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3658 wdaBssParams->extSetStaKeyParam.wepType;
3659 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3660 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3662 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003663 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003664 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3665 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3666 {
3667 WDA_GetWepKeysFromCfg( pWDA,
3668 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3669 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3670 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3671 }
3672 else
3673 {
3674#ifdef WLAN_SOFTAP_FEATURE
3675 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3676 keyIndex++)
3677 {
3678 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3679 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3680 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3681 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3682 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3683 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3685 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3686 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3687 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3688 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3689 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3690 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3691 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3692 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3694 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3695#else
3696 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyId =
3697 wdaBssParams->extSetStaKeyParam.key.keyId;
3698 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].unicast =
3699 wdaBssParams->extSetStaKeyParam.key.unicast;
3700 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyDirection =
3701 wdaBssParams->extSetStaKeyParam.key.keyDirection;
3702 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyRsc,
3703 wdaBssParams->extSetStaKeyParam.key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
3704 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].paeRole =
3705 wdaBssParams->extSetStaKeyParam.key.paeRole;
3706 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyLength =
3707 wdaBssParams->extSetStaKeyParam.key.keyLength;
3708 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].key,
3709 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
3710 SIR_MAC_MAX_KEY_LENGTH);
3711 wdiBssParams->wdiExtSetKeyParam.ucNumKeys = 1;
3712#endif
3713 }
3714 }
3715 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3716 }
3717 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3718 {
3719 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3720 sizeof(wdaBssParams->extSetStaKeyParam) );
3721 }
3722#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003723#ifdef WLAN_FEATURE_11AC
3724 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3725 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3726#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003727
3728 return ;
3729}
Jeff Johnson295189b2012-06-20 16:38:30 -07003730/*
3731 * FUNCTION: WDA_UpdateSTAParams
3732 * Translated WDA/PE BSS info into WDI BSS info..
3733 */
3734void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3735 WDI_ConfigStaReqInfoType *wdiStaParams,
3736 tAddStaParams *wdaStaParams)
3737{
3738 tANI_U8 i = 0;
3739 /* Update STA params */
3740 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3741 sizeof(tSirMacAddr)) ;
3742 wdiStaParams->usAssocId = wdaStaParams->assocId;
3743 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3744
3745 wdiStaParams->ucShortPreambleSupported =
3746 wdaStaParams->shortPreambleSupported;
3747 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3748 sizeof(tSirMacAddr)) ;
3749 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3750
3751 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3752
3753 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3754 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3755 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3756 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3757 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3758 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3759 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3760
3761 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3762 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 wdiStaParams->wdiSupportedRates.opRateMode =
3764 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003765 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3766 {
3767 wdiStaParams->wdiSupportedRates.llbRates[i] =
3768 wdaStaParams->supportedRates.llbRates[i];
3769 }
3770 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3771 {
3772 wdiStaParams->wdiSupportedRates.llaRates[i] =
3773 wdaStaParams->supportedRates.llaRates[i];
3774 }
3775 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3776 {
3777 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3778 wdaStaParams->supportedRates.aniLegacyRates[i];
3779 }
3780 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3781 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003782#ifdef WLAN_FEATURE_11AC
3783 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3784 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3785 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3786 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3787#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003788 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3789 {
3790 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3791 wdaStaParams->supportedRates.supportedMCSSet[i];
3792 }
3793 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3794 wdaStaParams->supportedRates.rxHighestDataRate;
3795
3796 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3797
3798 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3799
3800 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3801 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3802 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3803
3804 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3805 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3806 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3807 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3808#ifdef WLAN_FEATURE_P2P
3809 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3810#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003811#ifdef WLAN_FEATURE_11AC
3812 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3813 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi31f9ebe2013-01-17 12:51:24 -08003814 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003815#endif
Gopichand Nakkalab7ed0a62013-01-04 11:41:02 -08003816 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3817 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003818 return ;
3819}
Jeff Johnson295189b2012-06-20 16:38:30 -07003820/*
3821 * -------------------------------------------------------------------------
3822 * CFG update to WDI
3823 * -------------------------------------------------------------------------
3824 */
3825
3826 /*
3827 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3828 * Convert the WNI CFG ID to HAL CFG ID
3829 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003830static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003831{
3832 switch(wniCfgId)
3833 {
3834 case WNI_CFG_STA_ID:
3835 return QWLAN_HAL_CFG_STA_ID;
3836 case WNI_CFG_CURRENT_TX_ANTENNA:
3837 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3838 case WNI_CFG_CURRENT_RX_ANTENNA:
3839 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3840 case WNI_CFG_LOW_GAIN_OVERRIDE:
3841 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3842 case WNI_CFG_POWER_STATE_PER_CHAIN:
3843 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3844 case WNI_CFG_CAL_PERIOD:
3845 return QWLAN_HAL_CFG_CAL_PERIOD;
3846 case WNI_CFG_CAL_CONTROL:
3847 return QWLAN_HAL_CFG_CAL_CONTROL;
3848 case WNI_CFG_PROXIMITY:
3849 return QWLAN_HAL_CFG_PROXIMITY;
3850 case WNI_CFG_NETWORK_DENSITY:
3851 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3852 case WNI_CFG_MAX_MEDIUM_TIME:
3853 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3854 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3855 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3856 case WNI_CFG_RTS_THRESHOLD:
3857 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3858 case WNI_CFG_SHORT_RETRY_LIMIT:
3859 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3860 case WNI_CFG_LONG_RETRY_LIMIT:
3861 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3862 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3863 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3864 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3865 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3866 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3867 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3868 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3869 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3870 case WNI_CFG_FIXED_RATE:
3871 return QWLAN_HAL_CFG_FIXED_RATE;
3872 case WNI_CFG_RETRYRATE_POLICY:
3873 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3874 case WNI_CFG_RETRYRATE_SECONDARY:
3875 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3876 case WNI_CFG_RETRYRATE_TERTIARY:
3877 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3878 case WNI_CFG_FORCE_POLICY_PROTECTION:
3879 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3880 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3881 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3882 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3883 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3884 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3885 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3886 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3887 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3888 case WNI_CFG_MAX_BA_SESSIONS:
3889 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3890 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3891 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3892 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3893 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3894 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3895 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3896 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3897 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3898 case WNI_CFG_STATS_PERIOD:
3899 return QWLAN_HAL_CFG_STATS_PERIOD;
3900 case WNI_CFG_CFP_MAX_DURATION:
3901 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3902#if 0 /*This is not part of CFG*/
3903 case WNI_CFG_FRAME_TRANS_ENABLED:
3904 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3905#endif
3906 case WNI_CFG_DTIM_PERIOD:
3907 return QWLAN_HAL_CFG_DTIM_PERIOD;
3908 case WNI_CFG_EDCA_WME_ACBK:
3909 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3910 case WNI_CFG_EDCA_WME_ACBE:
3911 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3912 case WNI_CFG_EDCA_WME_ACVI:
3913 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3914 case WNI_CFG_EDCA_WME_ACVO:
3915 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3916#if 0
3917 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3918 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3919 case WNI_CFG_TELE_BCN_TRANS_LI:
3920 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3921 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3922 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3923 case WNI_CFG_TELE_BCN_MAX_LI:
3924 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3925 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3926 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3927#endif
3928 case WNI_CFG_ENABLE_CLOSE_LOOP:
3929 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi33df5692012-12-07 14:24:14 -08003930 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3931 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003932 default:
3933 {
3934 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3935 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3936 wniCfgId);
3937 return VOS_STATUS_E_INVAL;
3938 }
3939 }
3940}
Jeff Johnson295189b2012-06-20 16:38:30 -07003941/*
3942 * FUNCTION: WDA_UpdateCfgCallback
3943 *
3944 */
3945void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3946{
3947 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3948 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3949 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003951 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 /*
3953 * currently there is no response message is expected between PE and
3954 * WDA, Failure return from WDI is a ASSERT condition
3955 */
3956 if(WDI_STATUS_SUCCESS != wdiStatus)
3957 {
3958 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003959 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003960 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3961 }
3962
3963 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3964 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3965 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 return ;
3967}
Jeff Johnson295189b2012-06-20 16:38:30 -07003968/*
3969 * FUNCTION: WDA_UpdateCfg
3970 *
3971 */
3972VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3973{
3974
3975 WDI_Status status = WDI_STATUS_SUCCESS ;
3976 tANI_U32 val =0;
3977 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3978 tHalCfg *configData;
3979 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3980 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003982 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003983 if (NULL == pMac )
3984 {
3985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003986 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 return VOS_STATUS_E_FAILURE;
3988 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 if(WDA_START_STATE != pWDA->wdaState)
3990 {
3991 return VOS_STATUS_E_FAILURE;
3992 }
3993
3994 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3995 {
3996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003997 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003998 VOS_ASSERT(0);
3999 return VOS_STATUS_E_FAILURE;
4000 }
4001
4002 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4003 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 if(NULL == wdiCfgReqParam)
4005 {
4006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 VOS_ASSERT(0);
4009 return VOS_STATUS_E_NOMEM;
4010 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4012 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 if(NULL == wdiCfgReqParam->pConfigBuffer)
4014 {
4015 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004016 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 vos_mem_free(wdiCfgReqParam);
4018 VOS_ASSERT(0);
4019 return VOS_STATUS_E_NOMEM;
4020 }
4021
4022 /*convert the WNI CFG Id to HAL CFG Id*/
4023 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4024 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4025
4026 /*TODO: revisit this for handling string parameters */
4027 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4028 &val) != eSIR_SUCCESS)
4029 {
4030 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4031 "Failed to cfg get id %d\n", cfgParam->bodyval);
4032 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4033 vos_mem_free(wdiCfgReqParam);
4034 return eSIR_FAILURE;
4035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4037 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4038 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4039 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4040 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4041
4042 /* store Params pass it to WDI */
4043 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004044#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4045 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4046 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004047 if(IS_WDI_STATUS_FAILURE(status))
4048 {
4049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4050 "Failure in Update CFG WDI API, free all the memory " );
4051 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4052 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4053 pWDA->wdaWdiCfgApiMsgParam = NULL;
4054 /* Failure is not expected */
4055 VOS_ASSERT(0) ;
4056 }
4057#else
4058 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4059 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4060 pWDA->wdaWdiCfgApiMsgParam = NULL;
4061#endif
4062 return CONVERT_WDI2VOS_STATUS(status) ;
4063}
4064
Jeff Johnson295189b2012-06-20 16:38:30 -07004065VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4066 v_U8_t *pDefaultKeyId,
4067 v_U8_t *pNumKeys,
4068 WDI_KeysType *pWdiKeys )
4069{
4070 v_U32_t i, j, defKeyId = 0;
4071 v_U32_t val = SIR_MAC_KEY_LENGTH;
4072 VOS_STATUS status = WDI_STATUS_SUCCESS;
4073 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004074 if (NULL == pMac )
4075 {
4076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004077 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004078 return VOS_STATUS_E_FAILURE;
4079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004080 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4081 &defKeyId ))
4082 {
4083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4084 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4085 }
4086
4087 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004088 /* Need to extract ALL of the configured WEP Keys */
4089 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4090 {
4091 val = SIR_MAC_KEY_LENGTH;
4092 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4093 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4094 pWdiKeys[j].key,
4095 &val ))
4096 {
4097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4098 "WEP Key index [%d] may not configured in CFG\n",i);
4099 }
4100 else
4101 {
4102 pWdiKeys[j].keyId = (tANI_U8) i;
4103 /*
4104 * Actually, a DC (Don't Care) because
4105 * this is determined (and set) by PE/MLME
4106 */
4107 pWdiKeys[j].unicast = 0;
4108 /*
4109 * Another DC (Don't Care)
4110 */
4111 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4112 /* Another DC (Don't Care). Unused for WEP */
4113 pWdiKeys[j].paeRole = 0;
4114 /* Determined from wlan_cfgGetStr() above.*/
4115 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 j++;
4117 *pNumKeys = (tANI_U8) j;
4118 }
4119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004120 return status;
4121}
Jeff Johnson295189b2012-06-20 16:38:30 -07004122/*
4123 * FUNCTION: WDA_SetBssKeyReqCallback
4124 * send SET BSS key RSP back to PE
4125 */
4126void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4127{
4128 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4129 tWDA_CbContext *pWDA;
4130 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004132 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004133 if(NULL == pWdaParams)
4134 {
4135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004136 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 VOS_ASSERT(0) ;
4138 return ;
4139 }
4140 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4141 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4143 vos_mem_free(pWdaParams) ;
4144 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004145 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 return ;
4147}
Jeff Johnson295189b2012-06-20 16:38:30 -07004148/*
4149 * FUNCTION: WDA_ProcessSetBssKeyReq
4150 * Request to WDI for programming the BSS key( key for
4151 * broadcast/multicast frames Encryption)
4152 */
4153VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4154 tSetBssKeyParams *setBssKeyParams )
4155{
4156 WDI_Status status = WDI_STATUS_SUCCESS ;
4157 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4158 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4159 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4160 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004163 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 if(NULL == wdiSetBssKeyParam)
4165 {
4166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004168 VOS_ASSERT(0);
4169 return VOS_STATUS_E_NOMEM;
4170 }
4171 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4172 if(NULL == pWdaParams)
4173 {
4174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004176 VOS_ASSERT(0);
4177 vos_mem_free(wdiSetBssKeyParam);
4178 return VOS_STATUS_E_NOMEM;
4179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004180 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004181 /* copy set BSS params to WDI structure */
4182 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4183 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4184 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 if(setBssKeyParams->encType != eSIR_ED_NONE)
4186 {
4187 if( setBssKeyParams->numKeys == 0 &&
4188 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4189 setBssKeyParams->encType == eSIR_ED_WEP104))
4190 {
4191 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004192 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4193 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4194 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4195 }
4196 else
4197 {
4198 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4199 {
4200 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4201 setBssKeyParams->key[keyIndex].keyId;
4202 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4203 setBssKeyParams->key[keyIndex].unicast;
4204 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4205 setBssKeyParams->key[keyIndex].keyDirection;
4206 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4207 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4208 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4209 setBssKeyParams->key[keyIndex].paeRole;
4210 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4211 setBssKeyParams->key[keyIndex].keyLength;
4212 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4213 setBssKeyParams->key[keyIndex].key,
4214 SIR_MAC_MAX_KEY_LENGTH);
4215 }
4216 }
4217 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4219 setBssKeyParams->singleTidRc;
4220 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 /* Store set key pointer, as this will be used for response */
4222 /* store Params pass it to WDI */
4223 pWdaParams->pWdaContext = pWDA;
4224 pWdaParams->wdaMsgParam = setBssKeyParams;
4225 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4227 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4228
4229 if(IS_WDI_STATUS_FAILURE(status))
4230 {
4231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4232 "Failure in Set BSS Key Req WDI API, free all the memory " );
4233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4234 vos_mem_free(pWdaParams) ;
4235 setBssKeyParams->status = eSIR_FAILURE ;
4236 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 return CONVERT_WDI2VOS_STATUS(status) ;
4239}
Jeff Johnson295189b2012-06-20 16:38:30 -07004240/*
4241 * FUNCTION: WDA_RemoveBssKeyReqCallback
4242 * send SET BSS key RSP back to PE
4243 */
4244void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4245{
4246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4247 tWDA_CbContext *pWDA;
4248 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004250 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 if(NULL == pWdaParams)
4252 {
4253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004254 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 VOS_ASSERT(0) ;
4256 return ;
4257 }
4258 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4259 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4261 vos_mem_free(pWdaParams) ;
4262
4263 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004264 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004265 return ;
4266}
Jeff Johnson295189b2012-06-20 16:38:30 -07004267/*
4268 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4269 * Request to WDI to remove the BSS key( key for broadcast/multicast
4270 * frames Encryption)
4271 */
4272VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4273 tRemoveBssKeyParams *removeBssKeyParams )
4274{
4275 WDI_Status status = WDI_STATUS_SUCCESS ;
4276 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4277 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4278 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4279 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 if(NULL == wdiRemoveBssKeyParam)
4283 {
4284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 VOS_ASSERT(0);
4287 return VOS_STATUS_E_NOMEM;
4288 }
4289 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4290 if(NULL == pWdaParams)
4291 {
4292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 VOS_ASSERT(0);
4295 vos_mem_free(wdiRemoveBssKeyParam);
4296 return VOS_STATUS_E_NOMEM;
4297 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 /* copy Remove BSS key params to WDI structure*/
4299 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4300 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4301 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4302 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4303 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 /* Store remove key pointer, as this will be used for response */
4305 /* store Params pass it to WDI */
4306 pWdaParams->pWdaContext = pWDA;
4307 pWdaParams->wdaMsgParam = removeBssKeyParams;
4308 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4310 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 if(IS_WDI_STATUS_FAILURE(status))
4312 {
4313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4314 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4316 vos_mem_free(pWdaParams) ;
4317 removeBssKeyParams->status = eSIR_FAILURE ;
4318 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 return CONVERT_WDI2VOS_STATUS(status) ;
4321}
Jeff Johnson295189b2012-06-20 16:38:30 -07004322/*
4323 * FUNCTION: WDA_SetBssKeyReqCallback
4324 * send SET BSS key RSP back to PE
4325 */
4326void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4327{
4328 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4329 tWDA_CbContext *pWDA;
4330 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004332 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004333 if(NULL == pWdaParams)
4334 {
4335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004336 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 VOS_ASSERT(0) ;
4338 return ;
4339 }
4340 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4341 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4343 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004346 return ;
4347}
Jeff Johnson295189b2012-06-20 16:38:30 -07004348/*
4349 * FUNCTION: WDA_ProcessSetStaKeyReq
4350 * Request to WDI for programming the STA key( key for Unicast frames
4351 * Encryption)
4352 */
4353VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4354 tSetStaKeyParams *setStaKeyParams )
4355{
4356 WDI_Status status = WDI_STATUS_SUCCESS ;
4357 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4358 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4359 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4360 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004363 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004364 if(NULL == wdiSetStaKeyParam)
4365 {
4366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004368 VOS_ASSERT(0);
4369 return VOS_STATUS_E_NOMEM;
4370 }
4371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4372 if(NULL == pWdaParams)
4373 {
4374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 VOS_ASSERT(0);
4377 vos_mem_free(wdiSetStaKeyParam);
4378 return VOS_STATUS_E_NOMEM;
4379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004381 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 /* copy set STA key params to WDI structure */
4383 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4384 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4385 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4386 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 if(setStaKeyParams->encType != eSIR_ED_NONE)
4388 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004389 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4391 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4392 {
4393 WDA_GetWepKeysFromCfg( pWDA,
4394 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4395 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4396 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4397 }
4398 else
4399 {
4400#ifdef WLAN_SOFTAP_FEATURE
4401 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4402 keyIndex++)
4403 {
4404 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4405 setStaKeyParams->key[keyIndex].keyId;
4406 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4407 setStaKeyParams->key[keyIndex].unicast;
4408 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4409 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004410 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4411 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4412 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4413 setStaKeyParams->key[keyIndex].paeRole;
4414 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4415 setStaKeyParams->key[keyIndex].keyLength;
4416 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4417 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4418 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4419 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4420 {
4421 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4422 }
4423 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4425 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4426#else
4427 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4428 setStaKeyParams->key.keyId;
4429 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4430 setStaKeyParams->key.unicast;
4431 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4432 setStaKeyParams->key.keyDirection;
4433 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4434 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4435 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4436 setStaKeyParams->key.paeRole;
4437 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4438 setStaKeyParams->key.keyLength;
4439 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4440 setStaKeyParams->key[keyIndex].key,
4441 SIR_MAC_MAX_KEY_LENGTH);
4442 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4443#endif
4444 }
4445 }
4446 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4447 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 /* Store set key pointer, as this will be used for response */
4449 /* store Params pass it to WDI */
4450 pWdaParams->pWdaContext = pWDA;
4451 pWdaParams->wdaMsgParam = setStaKeyParams;
4452 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004453 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4454 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004455 if(IS_WDI_STATUS_FAILURE(status))
4456 {
4457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4458 "Failure in set STA Key Req WDI API, free all the memory " );
4459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4460 vos_mem_free(pWdaParams) ;
4461 setStaKeyParams->status = eSIR_FAILURE ;
4462 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 return CONVERT_WDI2VOS_STATUS(status) ;
4465}
Jeff Johnson295189b2012-06-20 16:38:30 -07004466/*
4467 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4468 * send SET Bcast STA key RSP back to PE
4469 */
4470void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4471{
4472 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4473 tWDA_CbContext *pWDA;
4474 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004476 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 if(NULL == pWdaParams)
4478 {
4479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004480 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 VOS_ASSERT(0) ;
4482 return ;
4483 }
4484 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4485 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4487 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 return ;
4491}
4492
Jeff Johnson295189b2012-06-20 16:38:30 -07004493/*
4494 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4495 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4496 * Encryption)
4497 */
4498VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4499 tSetStaKeyParams *setStaKeyParams )
4500{
4501 WDI_Status status = WDI_STATUS_SUCCESS ;
4502 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4503 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4504 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4505 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004506 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004508 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 if(NULL == wdiSetStaKeyParam)
4510 {
4511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004513 VOS_ASSERT(0);
4514 return VOS_STATUS_E_NOMEM;
4515 }
4516 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4517 if(NULL == pWdaParams)
4518 {
4519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 VOS_ASSERT(0);
4522 vos_mem_free(wdiSetStaKeyParam);
4523 return VOS_STATUS_E_NOMEM;
4524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004527 /* copy set STA key params to WDI structure */
4528 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4529 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4530 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4531 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 if(setStaKeyParams->encType != eSIR_ED_NONE)
4533 {
4534#ifdef WLAN_SOFTAP_FEATURE
4535 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4536 keyIndex++)
4537 {
4538 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4539 setStaKeyParams->key[keyIndex].keyId;
4540 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4541 setStaKeyParams->key[keyIndex].unicast;
4542 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4543 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004544 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4545 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4546 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4547 setStaKeyParams->key[keyIndex].paeRole;
4548 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4549 setStaKeyParams->key[keyIndex].keyLength;
4550 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4551 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4552 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004553 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4554 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4555#else
4556 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4557 setStaKeyParams->key.keyId;
4558 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4559 setStaKeyParams->key.unicast;
4560 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4561 setStaKeyParams->key.keyDirection;
4562 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4563 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4564 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4565 setStaKeyParams->key.paeRole;
4566 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4567 setStaKeyParams->key.keyLength;
4568 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4569 setStaKeyParams->key[keyIndex].key,
4570 SIR_MAC_MAX_KEY_LENGTH);
4571 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4572#endif
4573 }
4574 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 /* Store set key pointer, as this will be used for response */
4576 /* store Params pass it to WDI */
4577 pWdaParams->pWdaContext = pWDA;
4578 pWdaParams->wdaMsgParam = setStaKeyParams;
4579 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4581 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004582 if(IS_WDI_STATUS_FAILURE(status))
4583 {
4584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4585 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4587 vos_mem_free(pWdaParams) ;
4588 setStaKeyParams->status = eSIR_FAILURE ;
4589 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004591 return CONVERT_WDI2VOS_STATUS(status) ;
4592}
Jeff Johnson295189b2012-06-20 16:38:30 -07004593/*
4594 * FUNCTION: WDA_RemoveStaKeyReqCallback
4595 * send SET BSS key RSP back to PE
4596 */
4597void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4598{
4599 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4600 tWDA_CbContext *pWDA;
4601 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004603 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 if(NULL == pWdaParams)
4605 {
4606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004607 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 VOS_ASSERT(0) ;
4609 return ;
4610 }
4611 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4612 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4614 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004615 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004616 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 return ;
4618}
4619
Jeff Johnson295189b2012-06-20 16:38:30 -07004620/*
4621 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4622 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4623 */
4624VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4625 tRemoveStaKeyParams *removeStaKeyParams )
4626{
4627 WDI_Status status = WDI_STATUS_SUCCESS ;
4628 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4629 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4630 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4631 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004633 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 if(NULL == wdiRemoveStaKeyParam)
4635 {
4636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 VOS_ASSERT(0);
4639 return VOS_STATUS_E_NOMEM;
4640 }
4641 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4642 if(NULL == pWdaParams)
4643 {
4644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004645 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004646 VOS_ASSERT(0);
4647 vos_mem_free(wdiRemoveStaKeyParam);
4648 return VOS_STATUS_E_NOMEM;
4649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004650 /* copy remove STA key params to WDI structure*/
4651 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4652 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4653 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4654 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4655 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 /* Store remove key pointer, as this will be used for response */
4657 /* store Params pass it to WDI */
4658 pWdaParams->pWdaContext = pWDA;
4659 pWdaParams->wdaMsgParam = removeStaKeyParams;
4660 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004661 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4662 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004663 if(IS_WDI_STATUS_FAILURE(status))
4664 {
4665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4666 "Failure in remove STA Key Req WDI API, free all the memory " );
4667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4668 vos_mem_free(pWdaParams) ;
4669 removeStaKeyParams->status = eSIR_FAILURE ;
4670 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004672 return CONVERT_WDI2VOS_STATUS(status) ;
4673}
Jeff Johnson295189b2012-06-20 16:38:30 -07004674/*
4675 * FUNCTION: WDA_IsHandleSetLinkStateReq
4676 * Update the WDA state and return the status to handle this message or not
4677 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004678WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4679 tWDA_CbContext *pWDA,
4680 tLinkStateParams *linkStateParams)
4681{
4682 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 switch(linkStateParams->state)
4684 {
4685 case eSIR_LINK_PREASSOC_STATE:
4686 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4687 /*
4688 * set the WDA state to PRE ASSOC
4689 * copy the BSSID into pWDA to use it in join request and return,
4690 * No need to handle these messages.
4691 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004692 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4693 {
4694 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004695 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004696 }
4697 else
4698 {
4699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004700 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004701 VOS_ASSERT(0);
4702 }
4703
4704 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4705 {
4706 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004708 }
4709 else
4710 {
4711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004712 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004713 VOS_ASSERT(0);
4714 }
4715
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4717 *channel and after ) so reset the WDA state to ready when the second
4718 * time UMAC issue the link state with PREASSOC
4719 */
4720 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4721 {
4722 /* RESET WDA state back to WDA_READY_STATE */
4723 pWDA->wdaState = WDA_READY_STATE;
4724 }
4725 else
4726 {
4727 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4728 }
4729 //populate linkState info in WDACbCtxt
4730 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004732 default:
4733 if(pWDA->wdaState != WDA_READY_STATE)
4734 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004735 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4736 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4737 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4738 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4739 *the ASSERT in WDA_Stop during module unload.*/
4740 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4741 {
4742 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004743 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004744 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004745 else
4746 {
4747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004748 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004749 status = WDA_IGNORE_SET_LINK_STATE;
4750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004751 }
4752 break;
4753 }
4754
4755 return status;
4756}
Jeff Johnson295189b2012-06-20 16:38:30 -07004757/*
4758 * FUNCTION: WDA_SetLinkStateCallback
4759 * call back function for set link state from WDI
4760 */
4761void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4762{
4763 tWDA_CbContext *pWDA;
4764 tLinkStateParams *linkStateParams;
4765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004767 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 if(NULL == pWdaParams)
4769 {
4770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004771 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004772 VOS_ASSERT(0) ;
4773 return ;
4774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 /*
4778 * In STA mode start the BA activity check timer after association
4779 * and in AP mode start BA activity check timer after BSS start */
4780 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4781 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4782 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4783 {
4784 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004787 /*
4788 * No respone required for WDA_SET_LINK_STATE so free the request
4789 * param here
4790 */
4791 if( pWdaParams != NULL )
4792 {
4793 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4794 {
4795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4796 }
4797 vos_mem_free(pWdaParams);
4798 }
4799 return ;
4800}
Jeff Johnson295189b2012-06-20 16:38:30 -07004801/*
4802 * FUNCTION: WDA_ProcessSetLinkState
4803 * Request to WDI to set the link status.
4804 */
4805VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4806 tLinkStateParams *linkStateParams)
4807{
4808 WDI_Status status = WDI_STATUS_SUCCESS ;
4809 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4810 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4811 sizeof(WDI_SetLinkReqParamsType)) ;
4812 tWDA_ReqParams *pWdaParams ;
4813 tpAniSirGlobal pMac;
4814 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4815
4816 if(NULL == pMac)
4817 {
4818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004819 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004821 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 return VOS_STATUS_E_FAILURE;
4823 }
4824
4825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004826 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 if(NULL == wdiSetLinkStateParam)
4828 {
4829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 VOS_ASSERT(0);
4832 return VOS_STATUS_E_NOMEM;
4833 }
4834 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4835 if(NULL == pWdaParams)
4836 {
4837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004839 VOS_ASSERT(0);
4840 vos_mem_free(wdiSetLinkStateParam);
4841 return VOS_STATUS_E_NOMEM;
4842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 if(WDA_IGNORE_SET_LINK_STATE ==
4844 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4845 {
4846 status = WDI_STATUS_E_FAILURE;
4847 }
4848 else
4849 {
4850 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4851 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4853 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4855 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 pWdaParams->pWdaContext = pWDA;
4857 /* Store remove key pointer, as this will be used for response */
4858 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 /* store Params pass it to WDI */
4860 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4861 /* Stop Timer only other than GO role and concurrent session */
4862 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4863 && !vos_concurrent_sessions_running() &&
4864 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4865 {
4866 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4869 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 if(IS_WDI_STATUS_FAILURE(status))
4871 {
4872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4873 "Failure in set link state Req WDI API, free all the memory " );
4874 }
4875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 if(IS_WDI_STATUS_FAILURE(status))
4877 {
4878 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004879 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 vos_mem_free(pWdaParams);
4881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 return CONVERT_WDI2VOS_STATUS(status) ;
4883}
Jeff Johnson295189b2012-06-20 16:38:30 -07004884/*
4885 * FUNCTION: WDA_GetStatsReqParamsCallback
4886 * send the response to PE with Stats received from WDI
4887 */
4888void WDA_GetStatsReqParamsCallback(
4889 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4890 void* pUserData)
4891{
4892 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4893 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4894
4895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004896 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 pGetPEStatsRspParams =
4898 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4899 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4900
4901 if(NULL == pGetPEStatsRspParams)
4902 {
4903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004905 VOS_ASSERT(0);
4906 return;
4907 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4909 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4910 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4911 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4912 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4913
4914 //Fill the Session Id Properly in PE
4915 pGetPEStatsRspParams->sessionId = 0;
4916 pGetPEStatsRspParams->rc =
4917 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4918 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4919 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004920 vos_mem_copy( pGetPEStatsRspParams + 1,
4921 wdiGetStatsRsp + 1,
4922 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 /* send response to UMAC*/
4924 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4925
4926 return;
4927}
4928
Jeff Johnson295189b2012-06-20 16:38:30 -07004929/*
4930 * FUNCTION: WDA_ProcessGetStatsReq
4931 * Request to WDI to get the statistics
4932 */
4933VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4934 tAniGetPEStatsReq *pGetStatsParams)
4935{
4936 WDI_Status status = WDI_STATUS_SUCCESS ;
4937 WDI_GetStatsReqParamsType wdiGetStatsParam;
4938 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004940 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4942 pGetStatsParams->staId;
4943 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4944 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004946 status = WDI_GetStatsReq(&wdiGetStatsParam,
4947 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 if(IS_WDI_STATUS_FAILURE(status))
4949 {
4950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4951 "Failure in Get Stats Req WDI API, free all the memory " );
4952 pGetPEStatsRspParams =
4953 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4954 if(NULL == pGetPEStatsRspParams)
4955 {
4956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004957 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004959 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004960 return VOS_STATUS_E_NOMEM;
4961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4963 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4964 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4965 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4966 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4967 (void *)pGetPEStatsRspParams, 0) ;
4968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004969 /* Free the request message */
4970 vos_mem_free(pGetStatsParams);
4971 return CONVERT_WDI2VOS_STATUS(status);
4972}
Jeff Johnson295189b2012-06-20 16:38:30 -07004973/*
4974 * FUNCTION: WDA_UpdateEDCAParamCallback
4975 * call back function for Update EDCA params from WDI
4976 */
4977void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4978{
4979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4980 tEdcaParams *pEdcaParams;
4981
4982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004983 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 if(NULL == pWdaParams)
4985 {
4986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004987 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 VOS_ASSERT(0) ;
4989 return ;
4990 }
4991 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4993 vos_mem_free(pWdaParams);
4994 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 return ;
4996}
Jeff Johnson295189b2012-06-20 16:38:30 -07004997/*
4998 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4999 * Request to WDI to Update the EDCA params.
5000 */
5001VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5002 tEdcaParams *pEdcaParams)
5003{
5004 WDI_Status status = WDI_STATUS_SUCCESS ;
5005 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5006 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5007 sizeof(WDI_UpdateEDCAParamsType)) ;
5008 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005010 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005011 if(NULL == wdiEdcaParam)
5012 {
5013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005015 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005016 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005017 return VOS_STATUS_E_NOMEM;
5018 }
5019 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5020 if(NULL == pWdaParams)
5021 {
5022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005024 VOS_ASSERT(0);
5025 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005026 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005027 return VOS_STATUS_E_NOMEM;
5028 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005029 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5030 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5031 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5032 &pEdcaParams->acbe);
5033 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5034 &pEdcaParams->acbk);
5035 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5036 &pEdcaParams->acvi);
5037 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5038 &pEdcaParams->acvo);
5039 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005040 pWdaParams->pWdaContext = pWDA;
5041 /* Store remove key pointer, as this will be used for response */
5042 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005043 /* store Params pass it to WDI */
5044 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5046 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 if(IS_WDI_STATUS_FAILURE(status))
5048 {
5049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5050 "Failure in Update EDCA Params WDI API, free all the memory " );
5051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5052 vos_mem_free(pWdaParams);
5053 vos_mem_free(pEdcaParams);
5054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005055 return CONVERT_WDI2VOS_STATUS(status) ;
5056}
Jeff Johnson295189b2012-06-20 16:38:30 -07005057/*
5058 * FUNCTION: WDA_AddBAReqCallback
5059 * send ADD BA RSP back to PE
5060 */
5061void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5062 void* pUserData)
5063{
5064 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5065 tWDA_CbContext *pWDA;
5066 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005068 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005069 if(NULL == pWdaParams)
5070 {
5071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005072 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 VOS_ASSERT(0) ;
5074 return ;
5075 }
5076 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5077 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5079 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005080 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005081 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 return ;
5083}
5084
Jeff Johnson295189b2012-06-20 16:38:30 -07005085/*
5086 * FUNCTION: WDA_ProcessAddBAReq
5087 * Request to WDI to Update the ADDBA REQ params.
5088 */
5089VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5090 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5091{
Jeff Johnson43971f52012-07-17 12:26:56 -07005092 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005093 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5094 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5095 sizeof(WDI_AddBAReqParamsType)) ;
5096 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 if(NULL == wdiAddBAReqParam)
5100 {
5101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005102 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005103 VOS_ASSERT(0);
5104 return VOS_STATUS_E_NOMEM;
5105 }
5106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5107 if(NULL == pWdaParams)
5108 {
5109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005110 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 VOS_ASSERT(0);
5112 vos_mem_free(wdiAddBAReqParam);
5113 return VOS_STATUS_E_NOMEM;
5114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 do
5116 {
5117 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005118 wdiAddBaInfo->ucSTAIdx = staIdx ;
5119 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5120 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 } while(0) ;
5122 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 pWdaParams->pWdaContext = pWDA;
5124 /* store Params pass it to WDI */
5125 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5126 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005127 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5128 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005129
Jeff Johnson43971f52012-07-17 12:26:56 -07005130 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005131 {
5132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005133 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5134 status = CONVERT_WDI2VOS_STATUS(wstatus);
5135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005136 vos_mem_free(pWdaParams);
5137 pAddBAReqParams->status = eSIR_FAILURE;
5138 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5139 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005140 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005141}
Jeff Johnson295189b2012-06-20 16:38:30 -07005142/*
5143 * FUNCTION: WDA_AddBASessionReqCallback
5144 * send ADD BA SESSION RSP back to PE/(or TL)
5145 */
5146void WDA_AddBASessionReqCallback(
5147 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5148{
5149 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5150 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5151 tWDA_CbContext *pWDA;
5152 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005154 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005155 if(NULL == pWdaParams)
5156 {
5157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005158 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 VOS_ASSERT(0) ;
5160 return ;
5161 }
5162 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5163 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 if( NULL == pAddBAReqParams )
5165 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005167 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5170 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005171 return ;
5172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5174 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 /*
5176 * if WDA in update TL state, update TL with BA session parama and send
5177 * another request to HAL(/WDI) (ADD_BA_REQ)
5178 */
5179
5180 if((VOS_STATUS_SUCCESS ==
5181 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5182 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5183 {
5184 /* Update TL with BA info received from HAL/WDI */
5185 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5186 wdiAddBaSession->usBaSessionID,
5187 wdiAddBaSession->ucSTAIdx,
5188 wdiAddBaSession->ucBaTID,
5189 wdiAddBaSession->ucBaBufferSize,
5190 wdiAddBaSession->ucWinSize,
5191 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005192 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5193 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5194 }
5195 else
5196 {
5197 pAddBAReqParams->status =
5198 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5199
5200 /* Setting Flag to indicate that Set BA is success */
5201 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5202 {
5203 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5204 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5205 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 /*Reset the WDA state to READY */
5210 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005211 return ;
5212}
5213
Jeff Johnson295189b2012-06-20 16:38:30 -07005214/*
5215 * FUNCTION: WDA_ProcessAddBASessionReq
5216 * Request to WDI to Update the ADDBA REQ params.
5217 */
5218VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5219 tAddBAParams *pAddBAReqParams)
5220{
5221 WDI_Status status = WDI_STATUS_SUCCESS ;
5222 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5223 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5224 sizeof(WDI_AddBASessionReqParamsType)) ;
5225 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005227 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005228 if(NULL == wdiAddBASessionReqParam)
5229 {
5230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005231 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005232 VOS_ASSERT(0);
5233 return VOS_STATUS_E_NOMEM;
5234 }
5235 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5236 if(NULL == pWdaParams)
5237 {
5238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005239 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005240 VOS_ASSERT(0);
5241 vos_mem_free(wdiAddBASessionReqParam);
5242 return VOS_STATUS_E_NOMEM;
5243 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 /*
5245 * Populate ADD BA parameters and pass these paarmeters to WDI.
5246 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5247 * the state to track if these is BA recipient case or BA initiator
5248 * case.
5249 */
5250 do
5251 {
5252 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5253 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5254 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5255 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5256 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5257 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5258 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005259 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5261 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5262 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5263 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5264 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005265 /* check the BA direction and update state accordingly */
5266 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5267 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5268 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5269
5270 }while(0) ;
5271 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 pWdaParams->pWdaContext = pWDA;
5273 /* Store ADD BA pointer, as this will be used for response */
5274 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5275 /* store Params pass it to WDI */
5276 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5278 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 if(IS_WDI_STATUS_FAILURE(status))
5280 {
5281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5282 "Failure in ADD BA Session REQ Params WDI API, free all the memory " );
5283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5284 vos_mem_free(pWdaParams->wdaMsgParam);
5285 vos_mem_free(pWdaParams);
5286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005287 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005288}
Jeff Johnson295189b2012-06-20 16:38:30 -07005289/*
5290 * FUNCTION: WDA_DelBANotifyTL
5291 * send DEL BA IND to TL
5292 */
5293void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5294 tDelBAParams *pDelBAReqParams)
5295{
5296 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5297 //tSirMsgQ msg;
5298 vos_msg_t vosMsg;
5299 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005300 if(NULL == pDelBAInd)
5301 {
5302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005303 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 VOS_ASSERT(0) ;
5305 return;
5306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5308 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5309 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5310 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005311
Jeff Johnson295189b2012-06-20 16:38:30 -07005312
5313 vosMsg.type = WDA_DELETEBA_IND;
5314 vosMsg.bodyptr = pDelBAInd;
5315 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5316 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5317 {
5318 vosStatus = VOS_STATUS_E_BADMSG;
5319 }
5320}
Jeff Johnson295189b2012-06-20 16:38:30 -07005321/*
5322 * FUNCTION: WDA_DelBAReqCallback
5323 * send DEL BA RSP back to PE
5324 */
5325void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5326{
5327 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5328 tWDA_CbContext *pWDA;
5329 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005331 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 if(NULL == pWdaParams)
5333 {
5334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005335 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 VOS_ASSERT(0) ;
5337 return ;
5338 }
5339 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5340 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005341 /* Notify TL about DEL BA in case of recipinet */
5342 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5343 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5344 {
5345 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 /*
5348 * No respone required for WDA_DELBA_IND so just free the request
5349 * param here
5350 */
5351 vos_mem_free(pDelBAReqParams);
5352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5353 vos_mem_free(pWdaParams);
5354 return ;
5355}
5356
Jeff Johnson295189b2012-06-20 16:38:30 -07005357/*
5358 * FUNCTION: WDA_ProcessDelBAReq
5359 * Request to WDI to Update the DELBA REQ params.
5360 */
5361VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5362 tDelBAParams *pDelBAReqParams)
5363{
5364 WDI_Status status = WDI_STATUS_SUCCESS ;
5365 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5366 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5367 sizeof(WDI_DelBAReqParamsType)) ;
5368 tWDA_ReqParams *pWdaParams ;
5369 tANI_U16 staIdx = 0;
5370 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005372 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 if(NULL == wdiDelBAReqParam)
5374 {
5375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005376 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 VOS_ASSERT(0);
5378 return VOS_STATUS_E_NOMEM;
5379 }
5380 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5381 if(NULL == pWdaParams)
5382 {
5383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005384 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 VOS_ASSERT(0);
5386 vos_mem_free(wdiDelBAReqParam);
5387 return VOS_STATUS_E_NOMEM;
5388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5390 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5391 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5392 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005393 pWdaParams->pWdaContext = pWDA;
5394 /* Store DEL BA pointer, as this will be used for response */
5395 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005396 /* store Params pass it to WDI */
5397 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005398 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5399 * maintained in WDA, so that WDA can retry for another BA session
5400 */
5401 staIdx = pDelBAReqParams->staIdx;
5402 tid = pDelBAReqParams->baTID;
5403 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 status = WDI_DelBAReq(wdiDelBAReqParam,
5405 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 if(IS_WDI_STATUS_FAILURE(status))
5407 {
5408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5409 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5411 vos_mem_free(pWdaParams->wdaMsgParam);
5412 vos_mem_free(pWdaParams);
5413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005415}
Jeff Johnson295189b2012-06-20 16:38:30 -07005416/*
5417 * FUNCTION: WDA_AddTSReqCallback
5418 * send ADD TS RSP back to PE
5419 */
5420void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5421{
5422 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5423 tWDA_CbContext *pWDA;
5424 tAddTsParams *pAddTsReqParams;
5425
5426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005427 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 if(NULL == pWdaParams)
5429 {
5430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005431 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 VOS_ASSERT(0) ;
5433 return ;
5434 }
5435 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5436 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5437 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5438 vos_mem_free(pWdaParams);
5439
5440 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 return ;
5443}
5444
Jeff Johnson295189b2012-06-20 16:38:30 -07005445/*
5446 * FUNCTION: WDA_ProcessAddTSReq
5447 * Request to WDI to Update the ADD TS REQ params.
5448 */
5449VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5450 tAddTsParams *pAddTsReqParams)
5451{
5452 WDI_Status status = WDI_STATUS_SUCCESS ;
5453 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5454 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5455 sizeof(WDI_AddTSReqParamsType)) ;
5456 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005458 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 if(NULL == wdiAddTSReqParam)
5460 {
5461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 VOS_ASSERT(0);
5464 return VOS_STATUS_E_NOMEM;
5465 }
5466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5467 if(NULL == pWdaParams)
5468 {
5469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005471 VOS_ASSERT(0);
5472 vos_mem_free(wdiAddTSReqParam);
5473 return VOS_STATUS_E_NOMEM;
5474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5476 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 //TS IE
5478 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5479 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5480 pAddTsReqParams->tspec.length;
5481
5482 //TS IE : TS INFO : TRAFFIC
5483 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5484 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5485 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5486 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5487 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5488 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5489 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5490 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5491 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5492 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5493 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5494 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5495 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5496 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5497 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5498 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5499
5500 //TS IE : TS INFO : SCHEDULE
5501 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5502 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5503 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5504 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 //TS IE
5506 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5507 pAddTsReqParams->tspec.nomMsduSz;
5508 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5509 pAddTsReqParams->tspec.maxMsduSz;
5510 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5511 pAddTsReqParams->tspec.minSvcInterval;
5512 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5513 pAddTsReqParams->tspec.maxSvcInterval;
5514 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5515 pAddTsReqParams->tspec.inactInterval;
5516 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5517 pAddTsReqParams->tspec.suspendInterval;
5518 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5519 pAddTsReqParams->tspec.svcStartTime;
5520 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5521 pAddTsReqParams->tspec.minDataRate;
5522 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5523 pAddTsReqParams->tspec.meanDataRate;
5524 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5525 pAddTsReqParams->tspec.peakDataRate;
5526 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5527 pAddTsReqParams->tspec.maxBurstSz;
5528 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5529 pAddTsReqParams->tspec.delayBound;
5530 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5531 pAddTsReqParams->tspec.minPhyRate;
5532 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5533 pAddTsReqParams->tspec.surplusBw;
5534 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5535 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 /* TODO: tAddTsParams doesn't have the following fields */
5537#if 0
5538 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5539 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5540 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5541 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5542#endif
5543 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5544
5545 pWdaParams->pWdaContext = pWDA;
5546 /* Store ADD TS pointer, as this will be used for response */
5547 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005548 /* store Params pass it to WDI */
5549 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005550 status = WDI_AddTSReq(wdiAddTSReqParam,
5551 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005552 if(IS_WDI_STATUS_FAILURE(status))
5553 {
5554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5555 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5557 vos_mem_free(pWdaParams);
5558 pAddTsReqParams->status = eSIR_FAILURE ;
5559 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5560 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005561 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005562}
5563
Jeff Johnson295189b2012-06-20 16:38:30 -07005564/*
5565 * FUNCTION: WDA_DelTSReqCallback
5566 * send DEL TS RSP back to PE
5567 */
5568void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5569{
5570 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005572 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5574 vos_mem_free(pWdaParams->wdaMsgParam) ;
5575 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 /*
5577 * No respone required for WDA_DEL_TS_REQ so just free the request
5578 * param here
5579 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005580 return ;
5581}
5582
Jeff Johnson295189b2012-06-20 16:38:30 -07005583/*
5584 * FUNCTION: WDA_ProcessDelTSReq
5585 * Request to WDI to Update the DELTS REQ params.
5586 */
5587VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5588 tDelTsParams *pDelTSReqParams)
5589{
5590 WDI_Status status = WDI_STATUS_SUCCESS ;
5591 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5592 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5593 sizeof(WDI_DelTSReqParamsType)) ;
5594 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005596 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 if(NULL == wdiDelTSReqParam)
5598 {
5599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 VOS_ASSERT(0);
5602 return VOS_STATUS_E_NOMEM;
5603 }
5604 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5605 if(NULL == pWdaParams)
5606 {
5607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005609 VOS_ASSERT(0);
5610 vos_mem_free(wdiDelTSReqParam);
5611 return VOS_STATUS_E_NOMEM;
5612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5614 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5615 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5616 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5617 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005618 pWdaParams->pWdaContext = pWDA;
5619 /* Store DEL TS pointer, as this will be used for response */
5620 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005621 /* store Params pass it to WDI */
5622 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005623 status = WDI_DelTSReq(wdiDelTSReqParam,
5624 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005625 if(IS_WDI_STATUS_FAILURE(status))
5626 {
5627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5628 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5630 vos_mem_free(pWdaParams->wdaMsgParam);
5631 vos_mem_free(pWdaParams);
5632 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005634}
Jeff Johnson295189b2012-06-20 16:38:30 -07005635/*
5636 * FUNCTION: WDA_UpdateBeaconParamsCallback
5637 * Free the memory. No need to send any response to PE in this case
5638 */
5639void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5640{
5641 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005643 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005644 if(NULL == pWdaParams)
5645 {
5646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005647 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 VOS_ASSERT(0) ;
5649 return ;
5650 }
5651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5652 vos_mem_free(pWdaParams->wdaMsgParam) ;
5653 vos_mem_free(pWdaParams);
5654 /*
5655 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5656 * param here
5657 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005658 return ;
5659}
Jeff Johnson295189b2012-06-20 16:38:30 -07005660/*
5661 * FUNCTION: WDA_ProcessUpdateBeaconParams
5662 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5663 */
5664VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5665 tUpdateBeaconParams *pUpdateBeaconParams)
5666{
5667 WDI_Status status = WDI_STATUS_SUCCESS ;
5668 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5669 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5670 sizeof(WDI_UpdateBeaconParamsType)) ;
5671 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005673 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005674 if(NULL == wdiUpdateBeaconParams)
5675 {
5676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005677 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 VOS_ASSERT(0);
5679 return VOS_STATUS_E_NOMEM;
5680 }
5681 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5682 if(NULL == pWdaParams)
5683 {
5684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005685 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005686 VOS_ASSERT(0);
5687 vos_mem_free(wdiUpdateBeaconParams);
5688 return VOS_STATUS_E_NOMEM;
5689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005690 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5691 pUpdateBeaconParams->bssIdx;
5692 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5693 pUpdateBeaconParams->fShortPreamble;
5694 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5695 pUpdateBeaconParams->fShortSlotTime;
5696 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5697 pUpdateBeaconParams->beaconInterval;
5698 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5699 pUpdateBeaconParams->llaCoexist;
5700 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5701 pUpdateBeaconParams->llbCoexist;
5702 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5703 pUpdateBeaconParams->llgCoexist;
5704 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5705 pUpdateBeaconParams->ht20MhzCoexist;
5706 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5707 pUpdateBeaconParams->llnNonGFCoexist;
5708 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5709 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5710 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5711 pUpdateBeaconParams->fRIFSMode;
5712 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5713 pUpdateBeaconParams->paramChangeBitmap;
5714 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5715
5716 pWdaParams->pWdaContext = pWDA;
5717 /* Store UpdateBeacon Req pointer, as this will be used for response */
5718 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005719 /* store Params pass it to WDI */
5720 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005721 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5722 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5723 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005724 if(IS_WDI_STATUS_FAILURE(status))
5725 {
5726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5727 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5728 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5729 vos_mem_free(pWdaParams->wdaMsgParam);
5730 vos_mem_free(pWdaParams);
5731 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005732 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005733}
Jeff Johnson295189b2012-06-20 16:38:30 -07005734#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005735/*
5736 * FUNCTION: WDA_TSMStatsReqCallback
5737 * send TSM Stats RSP back to PE
5738 */
5739void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5740{
5741 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5742 tWDA_CbContext *pWDA = NULL;
5743 tTSMStats *pTsmRspParams = NULL;
5744
5745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005746 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 if(NULL == pWdaParams)
5748 {
5749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005750 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 VOS_ASSERT(0) ;
5752 return ;
5753 }
5754 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5755 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 if( NULL == pTsmRspParams )
5757 {
5758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005759 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005760 VOS_ASSERT( 0 );
5761 return ;
5762 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5764 vos_mem_free(pWdaParams);
5765
5766 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5767 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5768 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5769 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5770 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5771 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5772 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5773 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5774 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5775 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005776 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005777 return ;
5778}
5779
5780
Jeff Johnson295189b2012-06-20 16:38:30 -07005781/*
5782 * FUNCTION: WDA_ProcessTsmStatsReq
5783 * Request to WDI to get the TSM Stats params.
5784 */
5785VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5786 tTSMStats *pTsmStats)
5787{
5788 WDI_Status status = WDI_STATUS_SUCCESS ;
5789 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5790 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005792 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005793 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5794 sizeof(WDI_TSMStatsReqParamsType));
5795 if(NULL == wdiTSMReqParam)
5796 {
5797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005798 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005799 VOS_ASSERT(0);
5800 return VOS_STATUS_E_NOMEM;
5801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005802 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5803 if(NULL == pWdaParams)
5804 {
5805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005807 VOS_ASSERT(0);
5808 vos_mem_free(wdiTSMReqParam);
5809 return VOS_STATUS_E_NOMEM;
5810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5812 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5813 pTsmStats->bssId,
5814 sizeof(wpt_macAddr));
5815 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5816
5817 pWdaParams->pWdaContext = pWDA;
5818 /* Store TSM Stats pointer, as this will be used for response */
5819 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005820 /* store Params pass it to WDI */
5821 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005822 status = WDI_TSMStatsReq(wdiTSMReqParam,
5823 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005824 if(IS_WDI_STATUS_FAILURE(status))
5825 {
5826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5827 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5829 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005830 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 return CONVERT_WDI2VOS_STATUS(status) ;
5833}
5834#endif
5835/*
5836 * FUNCTION: WDA_SendBeaconParamsCallback
5837 * No need to send any response to PE in this case
5838 */
5839void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5840{
5841
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005843 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 return ;
5845}
Jeff Johnson295189b2012-06-20 16:38:30 -07005846/*
5847 * FUNCTION: WDA_ProcessSendBeacon
5848 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5849 * start beacon trasmission
5850 */
5851VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5852 tSendbeaconParams *pSendbeaconParams)
5853{
5854 WDI_Status status = WDI_STATUS_SUCCESS ;
5855 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005857 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5859 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5860 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5861 pSendbeaconParams->beaconLength;
5862#ifdef WLAN_SOFTAP_FEATURE
5863 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5864 pSendbeaconParams->timIeOffset;
5865#endif
5866#ifdef WLAN_FEATURE_P2P
5867 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5868 pSendbeaconParams->p2pIeOffset;
5869#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 /* Copy the beacon template to local buffer */
5871 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5872 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5873 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5874
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5876 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 if(IS_WDI_STATUS_FAILURE(status))
5878 {
5879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5880 "Failure in SEND BEACON REQ Params WDI API" );
5881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005882 vos_mem_free(pSendbeaconParams);
5883 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005884}
Jeff Johnson295189b2012-06-20 16:38:30 -07005885/*
5886 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5887 * No need to send any response to PE in this case
5888 */
5889void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5890{
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005892 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 return ;
5894}
5895
Jeff Johnson295189b2012-06-20 16:38:30 -07005896/*
5897 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5898 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5899 * send probe response
5900 */
5901VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5902 tSendProbeRespParams *pSendProbeRspParams)
5903{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005904 WDI_Status status = WDI_STATUS_SUCCESS;
5905 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5906 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005908 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005909
5910 if (!wdiSendProbeRspParam)
5911 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5912
Jeff Johnson295189b2012-06-20 16:38:30 -07005913 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005914 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005915 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005916 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 /* Copy the Probe Response template to local buffer */
5919 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005920 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 pSendProbeRspParams->pProbeRespTemplate,
5922 pSendProbeRspParams->probeRespTemplateLen);
5923 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005924 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5926 WDI_PROBE_REQ_BITMAP_IE_LEN);
5927
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005928 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005929
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005930 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 if(IS_WDI_STATUS_FAILURE(status))
5933 {
5934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5935 "Failure in SEND Probe RSP Params WDI API" );
5936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005938 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005940}
Jeff Johnson295189b2012-06-20 16:38:30 -07005941#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5942/*
5943 * FUNCTION: WDA_SetMaxTxPowerCallBack
5944 * send the response to PE with power value received from WDI
5945 */
5946void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5947 void* pUserData)
5948{
5949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5950 tWDA_CbContext *pWDA = NULL;
5951 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5952
5953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005954 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 if(NULL == pWdaParams)
5956 {
5957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005958 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005959 VOS_ASSERT(0) ;
5960 return ;
5961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5963 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005964 if( NULL == pMaxTxPowerParams )
5965 {
5966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005967 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005968 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5970 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 return ;
5972 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005973
Jeff Johnson295189b2012-06-20 16:38:30 -07005974
5975 /*need to free memory for the pointers used in the
5976 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5978 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005979 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005980
Jeff Johnson295189b2012-06-20 16:38:30 -07005981
5982 /* send response to UMAC*/
5983 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5984
5985 return;
5986}
Jeff Johnson295189b2012-06-20 16:38:30 -07005987/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005988 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 * Request to WDI to send set Max Tx Power Request
5990 */
5991 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5992 tMaxTxPowerParams *MaxTxPowerParams)
5993{
5994 WDI_Status status = WDI_STATUS_SUCCESS;
5995 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5996 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005997
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005999 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006000
Jeff Johnson295189b2012-06-20 16:38:30 -07006001 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6002 sizeof(WDI_SetMaxTxPowerParamsType));
6003 if(NULL == wdiSetMaxTxPowerParams)
6004 {
6005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006006 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 VOS_ASSERT(0);
6008 return VOS_STATUS_E_NOMEM;
6009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6011 if(NULL == pWdaParams)
6012 {
6013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006015 vos_mem_free(wdiSetMaxTxPowerParams);
6016 VOS_ASSERT(0);
6017 return VOS_STATUS_E_NOMEM;
6018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006019 /* Copy.Max.Tx.Power Params to WDI structure */
6020 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6021 MaxTxPowerParams->bssId,
6022 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6024 MaxTxPowerParams->selfStaMacAddr,
6025 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006026 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6027 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006029 pWdaParams->pWdaContext = pWDA;
6030 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006031 /* store Params pass it to WDI */
6032 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6034 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 if(IS_WDI_STATUS_FAILURE(status))
6036 {
6037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6038 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6040 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006041 /* send response to UMAC*/
6042 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 }
6044 return CONVERT_WDI2VOS_STATUS(status);
6045
6046}
Jeff Johnson295189b2012-06-20 16:38:30 -07006047#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006048#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07006049/*
6050 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6051 * Free the memory. No need to send any response to PE in this case
6052 */
6053void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6054{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6056
Jeff Johnson295189b2012-06-20 16:38:30 -07006057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006058 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006059
6060 if(NULL == pWdaParams)
6061 {
6062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006063 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006064 VOS_ASSERT(0) ;
6065 return ;
6066 }
6067
6068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6069 vos_mem_free(pWdaParams->wdaMsgParam) ;
6070 vos_mem_free(pWdaParams);
6071
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 /*
6073 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6074 * so just free the request param here
6075 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 return ;
6077}
6078
Jeff Johnson295189b2012-06-20 16:38:30 -07006079/*
6080 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6081 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6082 */
6083VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6084 tP2pPsParams *pP2pPsConfigParams)
6085{
6086 WDI_Status status = WDI_STATUS_SUCCESS ;
6087 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6088 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6089 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006090 tWDA_ReqParams *pWdaParams = NULL;
6091
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006093 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 if(NULL == wdiSetP2PGONOAReqParam)
6095 {
6096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006097 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 VOS_ASSERT(0);
6099 return VOS_STATUS_E_NOMEM;
6100 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006101
6102 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6103 if(NULL == pWdaParams)
6104 {
6105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006106 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006107 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006108 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006109 VOS_ASSERT(0);
6110 return VOS_STATUS_E_NOMEM;
6111 }
6112
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6114 pP2pPsConfigParams->opp_ps;
6115 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6116 pP2pPsConfigParams->ctWindow;
6117 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6118 pP2pPsConfigParams->count;
6119 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6120 pP2pPsConfigParams->duration;
6121 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6122 pP2pPsConfigParams->interval;
6123 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6124 pP2pPsConfigParams->single_noa_duration;
6125 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6126 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006127
Jeff Johnson295189b2012-06-20 16:38:30 -07006128 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6129 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006130 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6131
Jeff Johnson295189b2012-06-20 16:38:30 -07006132 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006133 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6134 pWdaParams->pWdaContext = pWDA;
6135
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006137 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6138
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 if(IS_WDI_STATUS_FAILURE(status))
6140 {
6141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6142 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6144 vos_mem_free(pWdaParams->wdaMsgParam);
6145 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 return CONVERT_WDI2VOS_STATUS(status);
6148
Jeff Johnson295189b2012-06-20 16:38:30 -07006149}
6150#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006151#ifdef WLAN_FEATURE_VOWIFI_11R
6152/*
6153 * FUNCTION: WDA_AggrAddTSReqCallback
6154 * send ADD AGGREGATED TS RSP back to PE
6155 */
6156void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6157{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006158 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6159 tWDA_CbContext *pWDA;
6160 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006161 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006163 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006164 if(NULL == pWdaParams)
6165 {
6166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006167 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006168 VOS_ASSERT(0) ;
6169 return ;
6170 }
6171
6172 pWDA = pWdaParams->pWdaContext;
6173 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006174
6175 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6176 {
6177 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006179 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006180
6181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6182 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 return ;
6184}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006185/*
6186 * FUNCTION: WDA_ProcessAddTSReq
6187 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6188 */
6189VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6190 tAggrAddTsParams *pAggrAddTsReqParams)
6191{
6192 WDI_Status status = WDI_STATUS_SUCCESS ;
6193 int i;
6194 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006195 tWDA_ReqParams *pWdaParams = NULL;
6196
6197
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006199 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6201 sizeof(WDI_AggrAddTSReqParamsType)) ;
6202 if(NULL == wdiAggrAddTSReqParam)
6203 {
6204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006206 VOS_ASSERT(0);
6207 return VOS_STATUS_E_NOMEM;
6208 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006209
6210
6211 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6212 if(NULL == pWdaParams)
6213 {
6214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006215 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006216 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006217 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006218 VOS_ASSERT(0);
6219 return VOS_STATUS_E_NOMEM;
6220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6222 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6223 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006224 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6225 {
6226 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6227 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6228 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006229 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6230 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6231 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6232 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6233 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6234 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6235 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6236 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6237 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6238 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6239 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6240 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6241 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6242 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6243 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6244 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006245 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6246 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006247 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6248 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6249 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6250 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6251 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6252 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6253 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6254 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6255 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6256 pAggrAddTsReqParams->tspec[i].inactInterval;
6257 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6258 pAggrAddTsReqParams->tspec[i].suspendInterval;
6259 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6260 pAggrAddTsReqParams->tspec[i].svcStartTime;
6261 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6262 pAggrAddTsReqParams->tspec[i].minDataRate;
6263 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6264 pAggrAddTsReqParams->tspec[i].meanDataRate;
6265 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6266 pAggrAddTsReqParams->tspec[i].peakDataRate;
6267 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6268 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6269 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6270 pAggrAddTsReqParams->tspec[i].delayBound;
6271 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6272 pAggrAddTsReqParams->tspec[i].minPhyRate;
6273 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6274 pAggrAddTsReqParams->tspec[i].surplusBw;
6275 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6276 pAggrAddTsReqParams->tspec[i].mediumTime;
6277 }
6278
6279 /* TODO: tAggrAddTsParams doesn't have the following fields */
6280#if 0
6281 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6282 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6283 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6284 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6285#endif
6286 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6287
6288 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006289 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006290 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006291 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6292
6293 pWdaParams->pWdaContext = pWDA;
6294
Jeff Johnson295189b2012-06-20 16:38:30 -07006295 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006296 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6297
Jeff Johnson295189b2012-06-20 16:38:30 -07006298 if(IS_WDI_STATUS_FAILURE(status))
6299 {
6300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6301 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6303 vos_mem_free(pWdaParams);
6304
6305 /* send the failure response back to PE*/
6306 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6307 {
6308 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6309 }
6310
6311 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6312 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006313 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 return CONVERT_WDI2VOS_STATUS(status) ;
6315}
6316#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006317/*
6318 * FUNCTION: WDA_EnterImpsReqCallback
6319 * send Enter IMPS RSP back to PE
6320 */
6321void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6322{
6323 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006325 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 return ;
6328}
Jeff Johnson295189b2012-06-20 16:38:30 -07006329/*
6330 * FUNCTION: WDA_ProcessEnterImpsReq
6331 * Request to WDI to Enter IMPS power state.
6332 */
6333VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6334{
6335 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006337 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006339 if(IS_WDI_STATUS_FAILURE(status))
6340 {
6341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6342 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006343 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006345 return CONVERT_WDI2VOS_STATUS(status) ;
6346}
Jeff Johnson295189b2012-06-20 16:38:30 -07006347/*
6348 * FUNCTION: WDA_ExitImpsReqCallback
6349 * send Exit IMPS RSP back to PE
6350 */
6351void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6352{
6353 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006355 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 return ;
6358}
Jeff Johnson295189b2012-06-20 16:38:30 -07006359/*
6360 * FUNCTION: WDA_ProcessExitImpsReq
6361 * Request to WDI to Exit IMPS power state.
6362 */
6363VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6364{
6365 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006367 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006369 if(IS_WDI_STATUS_FAILURE(status))
6370 {
6371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6372 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006373 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006375 return CONVERT_WDI2VOS_STATUS(status) ;
6376}
Jeff Johnson295189b2012-06-20 16:38:30 -07006377/*
6378 * FUNCTION: WDA_EnterBmpsReqCallback
6379 * send Enter BMPS RSP back to PE
6380 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006381void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006382{
6383 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6384 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006385 tEnterBmpsParams *pEnterBmpsRspParams;
6386
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006388 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 if(NULL == pWdaParams)
6390 {
6391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006392 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006393 VOS_ASSERT(0) ;
6394 return ;
6395 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006396
6397 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6398 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6399
6400 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6401 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6402
6403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006405 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6406
Jeff Johnson295189b2012-06-20 16:38:30 -07006407 return ;
6408}
Jeff Johnson295189b2012-06-20 16:38:30 -07006409/*
6410 * FUNCTION: WDA_ProcessEnterBmpsReq
6411 * Request to WDI to Enter BMPS power state.
6412 */
6413VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6414 tEnterBmpsParams *pEnterBmpsReqParams)
6415{
6416 WDI_Status status = WDI_STATUS_SUCCESS;
6417 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6418 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006420 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006421 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6422 {
6423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006424 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006425 VOS_ASSERT(0);
6426 return VOS_STATUS_E_FAILURE;
6427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006428 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6429 if (NULL == wdiEnterBmpsReqParams)
6430 {
6431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006432 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006434 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6435 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 return VOS_STATUS_E_NOMEM;
6437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6439 if (NULL == pWdaParams)
6440 {
6441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006442 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 VOS_ASSERT(0);
6444 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006445 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6446 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006447 return VOS_STATUS_E_NOMEM;
6448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006449 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6450 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6451 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6452 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006453 // For CCX and 11R Roaming
6454 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6455 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6456 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6457 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006458
Jeff Johnson295189b2012-06-20 16:38:30 -07006459 /* Store param pointer as passed in by caller */
6460 /* store Params pass it to WDI */
6461 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006462 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6465 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 if (IS_WDI_STATUS_FAILURE(status))
6467 {
6468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6469 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006471 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006472 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006473 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 return CONVERT_WDI2VOS_STATUS(status);
6476}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006477
6478
6479static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6480 WDI_Status wdiStatus,
6481 tExitBmpsParams *pExitBmpsReqParams)
6482{
6483 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6484
6485 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6486}
6487
6488
Jeff Johnson295189b2012-06-20 16:38:30 -07006489/*
6490 * FUNCTION: WDA_ExitBmpsReqCallback
6491 * send Exit BMPS RSP back to PE
6492 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006493void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006494{
6495 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6496 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006497 tExitBmpsParams *pExitBmpsRspParams;
6498
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006500 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006501 if(NULL == pWdaParams)
6502 {
6503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006504 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006505 VOS_ASSERT(0) ;
6506 return ;
6507 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006508
6509 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6510 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6511
6512 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6513 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006514
Jeff Johnson295189b2012-06-20 16:38:30 -07006515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6516 vos_mem_free(pWdaParams) ;
6517
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006518 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006519 return ;
6520}
Jeff Johnson295189b2012-06-20 16:38:30 -07006521/*
6522 * FUNCTION: WDA_ProcessExitBmpsReq
6523 * Request to WDI to Exit BMPS power state.
6524 */
6525VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6526 tExitBmpsParams *pExitBmpsReqParams)
6527{
6528 WDI_Status status = WDI_STATUS_SUCCESS ;
6529 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6530 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6531 sizeof(WDI_ExitBmpsReqParamsType)) ;
6532 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006534 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006535 if(NULL == wdiExitBmpsReqParams)
6536 {
6537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006538 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006539 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006540 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006541 return VOS_STATUS_E_NOMEM;
6542 }
6543 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6544 if(NULL == pWdaParams)
6545 {
6546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006547 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006548 VOS_ASSERT(0);
6549 vos_mem_free(wdiExitBmpsReqParams);
6550 return VOS_STATUS_E_NOMEM;
6551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006552 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006553
6554 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6555
Jeff Johnson295189b2012-06-20 16:38:30 -07006556 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6557
6558 /* Store param pointer as passed in by caller */
6559 /* store Params pass it to WDI */
6560 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6561 pWdaParams->pWdaContext = pWDA;
6562 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6564 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006565 if(IS_WDI_STATUS_FAILURE(status))
6566 {
6567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6568 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6570 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006571 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006573 return CONVERT_WDI2VOS_STATUS(status) ;
6574}
Jeff Johnson295189b2012-06-20 16:38:30 -07006575/*
6576 * FUNCTION: WDA_EnterUapsdReqCallback
6577 * send Enter UAPSD RSP back to PE
6578 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006579void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006580{
6581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6582 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006583 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006585 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006586 if(NULL == pWdaParams)
6587 {
6588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006589 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006590 VOS_ASSERT(0) ;
6591 return ;
6592 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006593
6594 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6595 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6596
6597 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6598 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6599
Jeff Johnson295189b2012-06-20 16:38:30 -07006600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6601 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006602 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006603 return ;
6604}
Jeff Johnson295189b2012-06-20 16:38:30 -07006605/*
6606 * FUNCTION: WDA_ProcessEnterUapsdReq
6607 * Request to WDI to Enter UAPSD power state.
6608 */
6609VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6610 tUapsdParams *pEnterUapsdReqParams)
6611{
6612 WDI_Status status = WDI_STATUS_SUCCESS ;
6613 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6614 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6615 sizeof(WDI_EnterUapsdReqParamsType)) ;
6616 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006618 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006619 if(NULL == wdiEnterUapsdReqParams)
6620 {
6621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006622 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 VOS_ASSERT(0);
6624 return VOS_STATUS_E_NOMEM;
6625 }
6626 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6627 if(NULL == pWdaParams)
6628 {
6629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006630 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 VOS_ASSERT(0);
6632 vos_mem_free(wdiEnterUapsdReqParams);
6633 return VOS_STATUS_E_NOMEM;
6634 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006635 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6636 pEnterUapsdReqParams->beDeliveryEnabled;
6637 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6638 pEnterUapsdReqParams->beTriggerEnabled;
6639 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6640 pEnterUapsdReqParams->bkDeliveryEnabled;
6641 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6642 pEnterUapsdReqParams->bkTriggerEnabled;
6643 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6644 pEnterUapsdReqParams->viDeliveryEnabled;
6645 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6646 pEnterUapsdReqParams->viTriggerEnabled;
6647 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6648 pEnterUapsdReqParams->voDeliveryEnabled;
6649 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6650 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006651 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006652
6653 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6654
Jeff Johnson295189b2012-06-20 16:38:30 -07006655 /* Store param pointer as passed in by caller */
6656 /* store Params pass it to WDI */
6657 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6658 pWdaParams->pWdaContext = pWDA;
6659 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6661 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 if(IS_WDI_STATUS_FAILURE(status))
6663 {
6664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6665 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6666 vos_mem_free(pWdaParams->wdaMsgParam) ;
6667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6668 vos_mem_free(pWdaParams) ;
6669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 return CONVERT_WDI2VOS_STATUS(status) ;
6671}
Jeff Johnson295189b2012-06-20 16:38:30 -07006672/*
6673 * FUNCTION: WDA_ExitUapsdReqCallback
6674 * send Exit UAPSD RSP back to PE
6675 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006676void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006677{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006678
6679 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6680 tWDA_CbContext *pWDA;
6681 tExitUapsdParams *pExitUapsdRspParams;
6682
Jeff Johnson295189b2012-06-20 16:38:30 -07006683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006684 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006685 if(NULL == pWdaParams)
6686 {
6687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006688 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006689 VOS_ASSERT(0);
6690 return;
6691 }
6692
6693 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6694 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6695
6696 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6697 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6698
6699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6700 vos_mem_free(pWdaParams) ;
6701
6702 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006703 return ;
6704}
Jeff Johnson295189b2012-06-20 16:38:30 -07006705/*
6706 * FUNCTION: WDA_ProcessExitUapsdReq
6707 * Request to WDI to Exit UAPSD power state.
6708 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006709VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6710 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006711{
6712 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006713 tWDA_ReqParams *pWdaParams ;
6714 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6715 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6716 sizeof(WDI_ExitUapsdReqParamsType)) ;
6717
Jeff Johnson295189b2012-06-20 16:38:30 -07006718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006719 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006720
6721 if(NULL == wdiExitUapsdReqParams)
6722 {
6723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006724 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006725 VOS_ASSERT(0);
6726 return VOS_STATUS_E_NOMEM;
6727 }
6728 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6729 if(NULL == pWdaParams)
6730 {
6731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006732 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006733 VOS_ASSERT(0);
6734 vos_mem_free(wdiExitUapsdReqParams);
6735 return VOS_STATUS_E_NOMEM;
6736 }
6737
6738 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6739 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6740
6741 /* Store param pointer as passed in by caller */
6742 /* store Params pass it to WDI */
6743 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6744 pWdaParams->pWdaContext = pWDA;
6745 pWdaParams->wdaMsgParam = pExitUapsdParams;
6746
6747 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 if(IS_WDI_STATUS_FAILURE(status))
6749 {
6750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6751 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006752 vos_mem_free(pWdaParams->wdaMsgParam) ;
6753 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6754 vos_mem_free(pWdaParams) ;
6755
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006757 return CONVERT_WDI2VOS_STATUS(status) ;
6758}
6759
Jeff Johnson295189b2012-06-20 16:38:30 -07006760/*
6761 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6762 *
6763 */
6764void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6765{
6766 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006768 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006769 if(NULL == pWdaParams)
6770 {
6771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006772 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006773 VOS_ASSERT(0) ;
6774 return ;
6775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 if( pWdaParams != NULL )
6777 {
6778 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6779 {
6780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6781 }
6782 if( pWdaParams->wdaMsgParam != NULL )
6783 {
6784 vos_mem_free(pWdaParams->wdaMsgParam) ;
6785 }
6786 vos_mem_free(pWdaParams) ;
6787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 return ;
6789}
Jeff Johnson295189b2012-06-20 16:38:30 -07006790/*
6791 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6792 * Request to WDI to set the power save params at start.
6793 */
6794VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6795 tSirPowerSaveCfg *pPowerSaveCfg)
6796{
6797 WDI_Status status = WDI_STATUS_SUCCESS ;
6798 tHalCfg *tlvStruct = NULL ;
6799 tANI_U8 *tlvStructStart = NULL ;
6800 v_PVOID_t *configParam;
6801 tANI_U32 configParamSize;
6802 tANI_U32 *configDataValue;
6803 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6804 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006806 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6808 {
6809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006810 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006812 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006813 return VOS_STATUS_E_FAILURE;
6814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6816 if (NULL == wdiPowerSaveCfg)
6817 {
6818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006819 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006820 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006821 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006822 return VOS_STATUS_E_NOMEM;
6823 }
6824 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6825 if(NULL == pWdaParams)
6826 {
6827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 VOS_ASSERT(0);
6830 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006831 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 return VOS_STATUS_E_NOMEM;
6833 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6835 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 if(NULL == configParam)
6837 {
6838 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006839 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006840 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 vos_mem_free(pWdaParams);
6842 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006843 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 return VOS_STATUS_E_NOMEM;
6845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006846 vos_mem_set(configParam, configParamSize, 0);
6847 wdiPowerSaveCfg->pConfigBuffer = configParam;
6848 tlvStruct = (tHalCfg *)configParam;
6849 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6851 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6852 tlvStruct->length = sizeof(tANI_U32);
6853 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6854 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6856 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
6858 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6859 tlvStruct->length = sizeof(tANI_U32);
6860 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6861 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6863 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
6865 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6866 tlvStruct->length = sizeof(tANI_U32);
6867 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6868 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6870 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
6872 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6873 tlvStruct->length = sizeof(tANI_U32);
6874 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6875 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07006876 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6877 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006878 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
6879 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6880 tlvStruct->length = sizeof(tANI_U32);
6881 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6882 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6884 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6886 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6887 tlvStruct->length = sizeof(tANI_U32);
6888 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6889 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6891 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6893 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6894 tlvStruct->length = sizeof(tANI_U32);
6895 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6896 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6898 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
6900 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6901 tlvStruct->length = sizeof(tANI_U32);
6902 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6903 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6904 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6905 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6907 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6908 tlvStruct->length = sizeof(tANI_U32);
6909 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6910 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6911 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6912 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6914 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6915 tlvStruct->length = sizeof(tANI_U32);
6916 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6917 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6919 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006920 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6921 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6922 tlvStruct->length = sizeof(tANI_U32);
6923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6924 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006925 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6926 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 /* store Params pass it to WDI */
6930 pWdaParams->wdaMsgParam = configParam;
6931 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6932 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6934 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 if(IS_WDI_STATUS_FAILURE(status))
6936 {
6937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6938 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6939 vos_mem_free(pWdaParams->wdaMsgParam);
6940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6941 vos_mem_free(pWdaParams);
6942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006943 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 return CONVERT_WDI2VOS_STATUS(status);
6945}
Jeff Johnson295189b2012-06-20 16:38:30 -07006946/*
6947 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6948 *
6949 */
6950void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6951{
6952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006954 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6956 vos_mem_free(pWdaParams);
6957
Jeff Johnson295189b2012-06-20 16:38:30 -07006958 return ;
6959}
Jeff Johnson295189b2012-06-20 16:38:30 -07006960/*
6961 * FUNCTION: WDA_SetUapsdAcParamsReq
6962 * Request to WDI to set the UAPSD params for an ac (sta mode).
6963 */
6964VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6965 tUapsdInfo *pUapsdInfo)
6966{
6967 WDI_Status status = WDI_STATUS_SUCCESS;
6968 tWDA_CbContext *pWDA = NULL ;
6969 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6970 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6971 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6972 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006974 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006975 if(NULL == wdiUapsdParams)
6976 {
6977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 VOS_ASSERT(0);
6980 return VOS_STATUS_E_NOMEM;
6981 }
6982 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6983 if(NULL == pWdaParams)
6984 {
6985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 VOS_ASSERT(0);
6988 vos_mem_free(wdiUapsdParams);
6989 return VOS_STATUS_E_NOMEM;
6990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006991 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6992 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6993 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6994 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6995 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6996 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006997 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 pWdaParams->pWdaContext = pWDA;
7000 /* Store param pointer as passed in by caller */
7001 pWdaParams->wdaMsgParam = pUapsdInfo;
7002 /* store Params pass it to WDI */
7003 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007004 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
7005 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
7006 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 if(IS_WDI_STATUS_FAILURE(status))
7008 {
7009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7010 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7011 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7012 vos_mem_free(pWdaParams);
7013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7015 return VOS_STATUS_SUCCESS;
7016 else
7017 return VOS_STATUS_E_FAILURE;
7018
Jeff Johnson295189b2012-06-20 16:38:30 -07007019}
7020/*
7021 * FUNCTION: WDA_ClearUapsdAcParamsReq
7022 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7023 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7024 * and again enter the UPASD with the modified params. Hence the disable
7025 * function was kept empty.
7026 *
7027 */
7028VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7029{
7030 /* do nothing */
7031 return VOS_STATUS_SUCCESS;
7032}
Jeff Johnson295189b2012-06-20 16:38:30 -07007033/*
7034 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7035 *
7036 */
7037void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
7038{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007039 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7040
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007042 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007043
7044 if(NULL == pWdaParams)
7045 {
7046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007047 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007048 VOS_ASSERT(0) ;
7049 return ;
7050 }
7051
7052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7053 vos_mem_free(pWdaParams->wdaMsgParam);
7054 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007055
Jeff Johnson295189b2012-06-20 16:38:30 -07007056 //print a msg, nothing else to do
7057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7058 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007059 return ;
7060}
Jeff Johnson295189b2012-06-20 16:38:30 -07007061/*
7062 * FUNCTION: WDA_UpdateUapsdParamsReq
7063 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7064 */
7065VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7066 tUpdateUapsdParams* pUpdateUapsdInfo)
7067{
7068 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007069 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007070 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7071 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7072 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007073 tWDA_ReqParams *pWdaParams = NULL;
7074
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007076 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007077 if(NULL == wdiUpdateUapsdParams)
7078 {
7079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007080 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 VOS_ASSERT(0);
7082 return VOS_STATUS_E_NOMEM;
7083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007084 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7085 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7086 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007087
7088 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7089 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 {
7091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007092 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007094 vos_mem_free(pUpdateUapsdInfo);
7095 vos_mem_free(wdiUpdateUapsdParams);
7096 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007099 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007100 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007101 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7102 pWdaParams->pWdaContext = pWDA;
7103
Jeff Johnson43971f52012-07-17 12:26:56 -07007104 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007105 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7106 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007107
Jeff Johnson43971f52012-07-17 12:26:56 -07007108 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 {
7110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7111 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007112 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7113 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7114 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007115 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007116 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007117 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007118}
Jeff Johnson295189b2012-06-20 16:38:30 -07007119/*
7120 * FUNCTION: WDA_ConfigureRxpFilterCallback
7121 *
7122 */
7123void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7124{
7125 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007127 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 if(WDI_STATUS_SUCCESS != wdiStatus)
7129 {
7130 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007131 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 if(NULL == pWdaParams)
7134 {
7135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007136 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 VOS_ASSERT(0) ;
7138 return ;
7139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7141 vos_mem_free(pWdaParams->wdaMsgParam);
7142 vos_mem_free(pWdaParams);
7143 return ;
7144}
Jeff Johnson295189b2012-06-20 16:38:30 -07007145/*
7146 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7147 *
7148 */
7149VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7150 tSirWlanSetRxpFilters *pWlanSuspendParam)
7151{
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007153 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007154 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7155 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7156 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7157 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007159 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 if(NULL == wdiRxpFilterParams)
7161 {
7162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 VOS_ASSERT(0);
7165 vos_mem_free(pWlanSuspendParam);
7166 return VOS_STATUS_E_NOMEM;
7167 }
7168 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7169 if(NULL == pWdaParams)
7170 {
7171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007172 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 VOS_ASSERT(0);
7174 vos_mem_free(wdiRxpFilterParams);
7175 vos_mem_free(pWlanSuspendParam);
7176 return VOS_STATUS_E_NOMEM;
7177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7179 pWlanSuspendParam->setMcstBcstFilter;
7180 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7181 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7182
7183 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 pWdaParams->pWdaContext = pWDA;
7185 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7186 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007187 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7189 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007190 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 {
7192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7193 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007194 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7196 vos_mem_free(pWdaParams->wdaMsgParam);
7197 vos_mem_free(pWdaParams);
7198 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007199 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007200}
Jeff Johnson295189b2012-06-20 16:38:30 -07007201/*
7202 * FUNCTION: WDA_WdiIndicationCallback
7203 *
7204 */
7205void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7206 void* pUserData)
7207{
7208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007209 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007210}
Jeff Johnson295189b2012-06-20 16:38:30 -07007211/*
7212 * FUNCTION: WDA_ProcessWlanSuspendInd
7213 *
7214 */
7215VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7216 tSirWlanSuspendParam *pWlanSuspendParam)
7217{
7218 WDI_Status wdiStatus;
7219 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007221 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7223 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7224 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7225 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007227 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7228 if(WDI_STATUS_PENDING == wdiStatus)
7229 {
7230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007231 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 }
7233 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7234 {
7235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007236 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007238 vos_mem_free(pWlanSuspendParam);
7239 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7240}
7241
Jeff Johnson295189b2012-06-20 16:38:30 -07007242/*
7243 * FUNCTION: WDA_ProcessWlanResumeCallback
7244 *
7245 */
7246void WDA_ProcessWlanResumeCallback(
7247 WDI_SuspendResumeRspParamsType *resumeRspParams,
7248 void* pUserData)
7249{
7250 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007252 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007253 if(NULL == pWdaParams)
7254 {
7255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007256 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007257 VOS_ASSERT(0) ;
7258 return ;
7259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007260 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7261 {
7262 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007263 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7266 vos_mem_free(pWdaParams->wdaMsgParam);
7267 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007268 return ;
7269}
Jeff Johnson295189b2012-06-20 16:38:30 -07007270/*
7271 * FUNCTION: WDA_ProcessWlanResumeReq
7272 *
7273 */
7274VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7275 tSirWlanResumeParam *pWlanResumeParam)
7276{
7277 WDI_Status wdiStatus;
7278 WDI_ResumeParamsType *wdiResumeParams =
7279 (WDI_ResumeParamsType *)vos_mem_malloc(
7280 sizeof(WDI_ResumeParamsType) ) ;
7281 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007283 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007284 if(NULL == wdiResumeParams)
7285 {
7286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 VOS_ASSERT(0);
7289 return VOS_STATUS_E_NOMEM;
7290 }
7291 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7292 if(NULL == pWdaParams)
7293 {
7294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007296 VOS_ASSERT(0);
7297 vos_mem_free(wdiResumeParams);
7298 return VOS_STATUS_E_NOMEM;
7299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007300 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7301 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007303 wdiResumeParams->wdiReqStatusCB = NULL;
7304 pWdaParams->wdaMsgParam = pWlanResumeParam;
7305 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7306 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007307 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7308 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7309 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007310 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7311 {
7312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7313 "Failure in Host Resume REQ WDI API, free all the memory " );
7314 VOS_ASSERT(0);
7315 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7316 vos_mem_free(pWdaParams->wdaMsgParam);
7317 vos_mem_free(pWdaParams);
7318 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007319 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7320}
7321
Jeff Johnson295189b2012-06-20 16:38:30 -07007322/*
7323 * FUNCTION: WDA_SetBeaconFilterReqCallback
7324 *
7325 */
7326void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7327{
7328 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007330 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007331 if(NULL == pWdaParams)
7332 {
7333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007334 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007335 VOS_ASSERT(0) ;
7336 return ;
7337 }
7338
7339 vos_mem_free(pWdaParams->wdaMsgParam) ;
7340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7341 vos_mem_free(pWdaParams) ;
7342 /*
7343 * No respone required for SetBeaconFilter req so just free the request
7344 * param here
7345 */
7346
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 return ;
7348}
Jeff Johnson295189b2012-06-20 16:38:30 -07007349/*
7350 * FUNCTION: WDA_SetBeaconFilterReq
7351 * Request to WDI to send the beacon filtering related information.
7352 */
7353VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7354 tBeaconFilterMsg* pBeaconFilterInfo)
7355{
7356 WDI_Status status = WDI_STATUS_SUCCESS;
7357 tANI_U8 *dstPtr, *srcPtr;
7358 tANI_U8 filterLength;
7359 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7360 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7361 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7362 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007364 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007365 if(NULL == wdiBeaconFilterInfo)
7366 {
7367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007368 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007369 VOS_ASSERT(0);
7370 return VOS_STATUS_E_NOMEM;
7371 }
7372 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7373 if(NULL == pWdaParams)
7374 {
7375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007376 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007377 VOS_ASSERT(0);
7378 vos_mem_free(wdiBeaconFilterInfo);
7379 return VOS_STATUS_E_NOMEM;
7380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007381 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7382 pBeaconFilterInfo->beaconInterval;
7383 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7384 pBeaconFilterInfo->capabilityInfo;
7385 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7386 pBeaconFilterInfo->capabilityMask;
7387 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007388
7389 //Fill the BssIdx
7390 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7391
Jeff Johnson295189b2012-06-20 16:38:30 -07007392 //Fill structure with info contained in the beaconFilterTable
7393 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7394 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7395 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7396 if(WDI_BEACON_FILTER_LEN < filterLength)
7397 {
7398 filterLength = WDI_BEACON_FILTER_LEN;
7399 }
7400 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7402 /* Store param pointer as passed in by caller */
7403 /* store Params pass it to WDI */
7404 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7405 pWdaParams->pWdaContext = pWDA;
7406 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7407
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7409 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 if(IS_WDI_STATUS_FAILURE(status))
7411 {
7412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7413 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7414 vos_mem_free(pWdaParams->wdaMsgParam) ;
7415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7416 vos_mem_free(pWdaParams) ;
7417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007418 return CONVERT_WDI2VOS_STATUS(status) ;
7419}
Jeff Johnson295189b2012-06-20 16:38:30 -07007420/*
7421 * FUNCTION: WDA_RemBeaconFilterReqCallback
7422 *
7423 */
7424void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7425{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7427
Jeff Johnson295189b2012-06-20 16:38:30 -07007428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007429 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007430
7431 if(NULL == pWdaParams)
7432 {
7433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007434 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007435 VOS_ASSERT(0) ;
7436 return ;
7437 }
7438
7439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7440 vos_mem_free(pWdaParams->wdaMsgParam);
7441 vos_mem_free(pWdaParams);
7442
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 //print a msg, nothing else to do
7444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7445 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007446 return ;
7447}
Jeff Johnson295189b2012-06-20 16:38:30 -07007448 // TODO: PE does not have this feature for now implemented,
7449 // but the support for removing beacon filter exists between
7450 // HAL and FW. This function can be called whenever PE defines
7451 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007452/*
7453 * FUNCTION: WDA_RemBeaconFilterReq
7454 * Request to WDI to send the removal of beacon filtering related information.
7455 */
7456VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7457 tRemBeaconFilterMsg* pBeaconFilterInfo)
7458{
7459 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007460 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7462 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7463 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007464 tWDA_ReqParams *pWdaParams ;
7465
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007467 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007468 if(NULL == wdiBeaconFilterInfo)
7469 {
7470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 VOS_ASSERT(0);
7473 return VOS_STATUS_E_NOMEM;
7474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7476 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007477 //Fill structure with info contained in the ucRemIeId
7478 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7479 pBeaconFilterInfo->ucRemIeId,
7480 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7481 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007482
7483 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7484 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 {
7486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007487 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007489 vos_mem_free(wdiBeaconFilterInfo);
7490 vos_mem_free(pBeaconFilterInfo);
7491 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 }
7493
7494 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007495 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007497 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7498
7499 pWdaParams->pWdaContext = pWDA;
7500
Jeff Johnson43971f52012-07-17 12:26:56 -07007501 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007502 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007503 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 {
7505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7506 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007507 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7509 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007510 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007511 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007512 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007513}
Jeff Johnson295189b2012-06-20 16:38:30 -07007514/*
7515 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7516 *
7517 */
7518void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7519{
7520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007522 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007523 if(NULL == pWdaParams)
7524 {
7525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007526 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 VOS_ASSERT(0) ;
7528 return ;
7529 }
7530
7531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7532 vos_mem_free(pWdaParams) ;
7533
Jeff Johnson295189b2012-06-20 16:38:30 -07007534 return ;
7535}
Jeff Johnson295189b2012-06-20 16:38:30 -07007536/*
7537 * FUNCTION: WDA_SetRSSIThresholdsReq
7538 * Request to WDI to set the RSSI thresholds (sta mode).
7539 */
7540VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7541{
7542 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007543 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007544 tWDA_CbContext *pWDA = NULL ;
7545 v_PVOID_t pVosContext = NULL;
7546 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7547 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7548 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7549 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007551 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007552 if(NULL == wdiRSSIThresholdsInfo)
7553 {
7554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007555 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 VOS_ASSERT(0);
7557 return VOS_STATUS_E_NOMEM;
7558 }
7559 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7560 if(NULL == pWdaParams)
7561 {
7562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 VOS_ASSERT(0);
7565 vos_mem_free(wdiRSSIThresholdsInfo);
7566 return VOS_STATUS_E_NOMEM;
7567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007569 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7570 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7571 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7573 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7574 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007575 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7576 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7577 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007579 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7580 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7581
Jeff Johnson295189b2012-06-20 16:38:30 -07007582 /* Store param pointer as passed in by caller */
7583 /* store Params pass it to WDI */
7584 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7585 pWdaParams->pWdaContext = pWDA;
7586 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007587 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007588 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007589 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 {
7591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7592 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007593 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7595 vos_mem_free(pWdaParams) ;
7596 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007597 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007598
7599}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007600/*
7601 * FUNCTION: WDA_HostOffloadReqCallback
7602 *
7603 */
7604void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7605{
7606 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7607
7608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007609 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 if(NULL == pWdaParams)
7611 {
7612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007613 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007614 VOS_ASSERT(0) ;
7615 return ;
7616 }
7617
7618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7619 vos_mem_free(pWdaParams->wdaMsgParam);
7620 vos_mem_free(pWdaParams) ;
7621
7622 //print a msg, nothing else to do
7623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7624 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 return ;
7626}
Jeff Johnson295189b2012-06-20 16:38:30 -07007627/*
7628 * FUNCTION: WDA_ProcessHostOffloadReq
7629 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7630 * to broadcast traffic (sta mode).
7631 */
7632VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7633 tSirHostOffloadReq *pHostOffloadParams)
7634{
7635 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007636 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007637 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7638 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7639 sizeof(WDI_HostOffloadReqParamsType)) ;
7640 tWDA_ReqParams *pWdaParams ;
7641
7642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007643 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007644
7645 if(NULL == wdiHostOffloadInfo)
7646 {
7647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007649 VOS_ASSERT(0);
7650 return VOS_STATUS_E_NOMEM;
7651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007652 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7653 if(NULL == pWdaParams)
7654 {
7655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007656 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 VOS_ASSERT(0);
7658 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007659 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007660 return VOS_STATUS_E_NOMEM;
7661 }
7662
7663 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7664 pHostOffloadParams->offloadType;
7665 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7666 pHostOffloadParams->enableOrDisable;
7667
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007668 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7669 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7670
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7672 {
7673 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7674 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7675 pHostOffloadParams->params.hostIpv4Addr,
7676 4);
7677 break;
7678 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7679 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7680 pHostOffloadParams->params.hostIpv6Addr,
7681 16);
7682 break;
7683 case SIR_IPV6_NS_OFFLOAD:
7684 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7685 pHostOffloadParams->params.hostIpv6Addr,
7686 16);
7687
7688#ifdef WLAN_NS_OFFLOAD
7689 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7690 {
7691 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7692 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7693 16);
7694 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7695 }
7696 else
7697 {
7698 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7699 }
7700
7701 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7702 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7703 16);
7704 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7705 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7706 6);
7707
7708 //Only two are supported so let's go through them without a loop
7709 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7710 {
7711 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7712 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7713 16);
7714 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7715 }
7716 else
7717 {
7718 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7719 }
7720
7721 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7722 {
7723 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7724 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7725 16);
7726 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7727 }
7728 else
7729 {
7730 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7731 }
7732 break;
7733#endif //WLAN_NS_OFFLOAD
7734 default:
7735 {
7736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7737 "No Handling for Offload Type %x in WDA "
7738 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7739 //WDA_VOS_ASSERT(0) ;
7740 }
7741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007743
Jeff Johnson295189b2012-06-20 16:38:30 -07007744 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007745 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007746 /* store Params pass it to WDI */
7747 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7748 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007749
Jeff Johnson295189b2012-06-20 16:38:30 -07007750
Jeff Johnson43971f52012-07-17 12:26:56 -07007751 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7753
Jeff Johnson43971f52012-07-17 12:26:56 -07007754 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007755 {
7756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7757 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007758 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7760 vos_mem_free(pWdaParams->wdaMsgParam);
7761 vos_mem_free(pWdaParams) ;
7762 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007763 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007764
7765}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007766/*
7767 * FUNCTION: WDA_KeepAliveReqCallback
7768 *
7769 */
7770void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7771{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007772 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7773
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007775 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007776
7777 if(NULL == pWdaParams)
7778 {
7779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007780 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007781 VOS_ASSERT(0) ;
7782 return ;
7783 }
7784
7785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7786 vos_mem_free(pWdaParams->wdaMsgParam);
7787 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007788
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 //print a msg, nothing else to do
7790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7791 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 return ;
7793}
Jeff Johnson295189b2012-06-20 16:38:30 -07007794/*
7795 * FUNCTION: WDA_ProcessKeepAliveReq
7796 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7797 * wakeup due to broadcast traffic (sta mode).
7798 */
7799VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7800 tSirKeepAliveReq *pKeepAliveParams)
7801{
7802 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007803 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7805 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7806 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007807 tWDA_ReqParams *pWdaParams;
7808
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007810 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007811 if(NULL == wdiKeepAliveInfo)
7812 {
7813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007816 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 return VOS_STATUS_E_NOMEM;
7818 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007819
7820 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7821 if(NULL == pWdaParams)
7822 {
7823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007824 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007825 VOS_ASSERT(0);
7826 vos_mem_free(wdiKeepAliveInfo);
7827 vos_mem_free(pKeepAliveParams);
7828 return VOS_STATUS_E_NOMEM;
7829 }
7830
Jeff Johnson295189b2012-06-20 16:38:30 -07007831 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7832 pKeepAliveParams->packetType;
7833 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7834 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007835
7836 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7837 pKeepAliveParams->bssId,
7838 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007839
7840 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7841 {
7842 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7843 pKeepAliveParams->hostIpv4Addr,
7844 SIR_IPV4_ADDR_LEN);
7845 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7846 pKeepAliveParams->destIpv4Addr,
7847 SIR_IPV4_ADDR_LEN);
7848 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7849 pKeepAliveParams->destMacAddr,
7850 SIR_MAC_ADDR_LEN);
7851 }
7852 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7853 {
7854 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7855 SIR_IPV4_ADDR_LEN,
7856 0);
7857 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7858 SIR_IPV4_ADDR_LEN,
7859 0);
7860 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7861 SIR_MAC_ADDR_LEN,
7862 0);
7863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007864 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007865
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007867 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007868 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007869 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7870 pWdaParams->pWdaContext = pWDA;
7871
Jeff Johnson295189b2012-06-20 16:38:30 -07007872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7873 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7874 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7875 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7876 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7878 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7879 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7880 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7881 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7883 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7884 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7885 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7886 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7887 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7888 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7889 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7891 "TimePeriod %d PacketType %d",
7892 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7893 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007894 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007895 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7896
Jeff Johnson43971f52012-07-17 12:26:56 -07007897 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007898 {
7899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7900 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007901 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7903 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007904 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007906 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007907
7908}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007909/*
7910 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7911 *
7912 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007913void WDA_WowlAddBcPtrnReqCallback(
7914 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7915 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007916{
7917 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007919 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 if(NULL == pWdaParams)
7921 {
7922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007923 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007924 VOS_ASSERT(0) ;
7925 return ;
7926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7928 vos_mem_free(pWdaParams->wdaMsgParam);
7929 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007930 return ;
7931}
Jeff Johnson295189b2012-06-20 16:38:30 -07007932/*
7933 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7934 * Request to WDI to add WOWL Bcast pattern
7935 */
7936VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7937 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7938{
7939 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007940 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7942 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7943 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7944 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007946 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007947 if(NULL == wdiWowlAddBcPtrnInfo)
7948 {
7949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007951 VOS_ASSERT(0);
7952 return VOS_STATUS_E_NOMEM;
7953 }
7954 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7955 if(NULL == pWdaParams)
7956 {
7957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007959 VOS_ASSERT(0);
7960 vos_mem_free(wdiWowlAddBcPtrnInfo);
7961 return VOS_STATUS_E_NOMEM;
7962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007963 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7964 pWowlAddBcPtrnParams->ucPatternId;
7965 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7966 pWowlAddBcPtrnParams->ucPatternByteOffset;
7967 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7968 pWowlAddBcPtrnParams->ucPatternMaskSize;
7969 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7970 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7972 {
7973 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7974 pWowlAddBcPtrnParams->ucPattern,
7975 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7976 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7977 pWowlAddBcPtrnParams->ucPatternMask,
7978 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7979 }
7980 else
7981 {
7982 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7983 pWowlAddBcPtrnParams->ucPattern,
7984 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7985 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7986 pWowlAddBcPtrnParams->ucPatternMask,
7987 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7988
7989 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7990 pWowlAddBcPtrnParams->ucPatternExt,
7991 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7992 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7993 pWowlAddBcPtrnParams->ucPatternMaskExt,
7994 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7995 }
7996
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007997 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7998 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7999
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008001 /* Store param pointer as passed in by caller */
8002 /* store Params pass it to WDI */
8003 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8004 pWdaParams->pWdaContext = pWDA;
8005 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008006 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008007 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008008 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 {
8010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8011 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008012 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 vos_mem_free(pWdaParams->wdaMsgParam) ;
8014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8015 vos_mem_free(pWdaParams) ;
8016 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008017 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008018
8019}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008020/*
8021 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8022 *
8023 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008024void WDA_WowlDelBcPtrnReqCallback(
8025 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8026 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008027{
8028 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008030 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 if(NULL == pWdaParams)
8032 {
8033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008034 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 VOS_ASSERT(0) ;
8036 return ;
8037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8039 vos_mem_free(pWdaParams->wdaMsgParam);
8040 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008041 return ;
8042}
Jeff Johnson295189b2012-06-20 16:38:30 -07008043/*
8044 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8045 * Request to WDI to delete WOWL Bcast pattern
8046 */
8047VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8048 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8049{
8050 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008051 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008052 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8053 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8054 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8055 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008057 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008058 if(NULL == wdiWowlDelBcPtrnInfo)
8059 {
8060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 VOS_ASSERT(0);
8063 return VOS_STATUS_E_NOMEM;
8064 }
8065 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8066 if(NULL == pWdaParams)
8067 {
8068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 VOS_ASSERT(0);
8071 vos_mem_free(wdiWowlDelBcPtrnInfo);
8072 return VOS_STATUS_E_NOMEM;
8073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8075 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008076
8077 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8078 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8079
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 /* Store param pointer as passed in by caller */
8082 /* store Params pass it to WDI */
8083 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8084 pWdaParams->pWdaContext = pWDA;
8085 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008086 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008088 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 {
8090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8091 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008092 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 vos_mem_free(pWdaParams->wdaMsgParam) ;
8094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8095 vos_mem_free(pWdaParams) ;
8096 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008097 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008098
8099}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008100/*
8101 * FUNCTION: WDA_WowlEnterReqCallback
8102 *
8103 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008104void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008105{
8106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8107 tWDA_CbContext *pWDA;
8108 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008111 if(NULL == pWdaParams)
8112 {
8113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008115 VOS_ASSERT(0) ;
8116 return ;
8117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8119 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8120
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008121 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8122
Jeff Johnson295189b2012-06-20 16:38:30 -07008123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8124 vos_mem_free(pWdaParams) ;
8125
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008126 pWowlEnterParams->status =
8127 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008129 return ;
8130}
Jeff Johnson295189b2012-06-20 16:38:30 -07008131/*
8132 * FUNCTION: WDA_ProcessWowlEnterReq
8133 * Request to WDI to enter WOWL
8134 */
8135VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8136 tSirHalWowlEnterParams *pWowlEnterParams)
8137{
8138 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008139 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008140 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8141 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8142 sizeof(WDI_WowlEnterReqParamsType)) ;
8143 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 if(NULL == wdiWowlEnterInfo)
8147 {
8148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008149 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 VOS_ASSERT(0);
8151 return VOS_STATUS_E_NOMEM;
8152 }
8153 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8154 if(NULL == pWdaParams)
8155 {
8156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008158 VOS_ASSERT(0);
8159 vos_mem_free(wdiWowlEnterInfo);
8160 return VOS_STATUS_E_NOMEM;
8161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008162 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8163 pWowlEnterParams->magicPtrn,
8164 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008165 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8166 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008167 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8168 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008169 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8170 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8172 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008173 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8174 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8176 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008177 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8178 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008179 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8180 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008181#ifdef WLAN_WAKEUP_EVENTS
8182 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8183 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8184
8185 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8186 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8187
8188 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8189 pWowlEnterParams->ucWowNetScanOffloadMatch;
8190
8191 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8192 pWowlEnterParams->ucWowGTKRekeyError;
8193
8194 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8195 pWowlEnterParams->ucWoWBSSConnLoss;
8196#endif // WLAN_WAKEUP_EVENTS
8197
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008198 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8199 pWowlEnterParams->bssIdx;
8200
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008202 /* Store param pointer as passed in by caller */
8203 /* store Params pass it to WDI */
8204 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8205 pWdaParams->pWdaContext = pWDA;
8206 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008207 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008208 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008209 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008210 {
8211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8212 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008213 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008214 vos_mem_free(pWdaParams->wdaMsgParam) ;
8215 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8216 vos_mem_free(pWdaParams) ;
8217 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008218 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008219
8220}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008221/*
8222 * FUNCTION: WDA_WowlExitReqCallback
8223 *
8224 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008225void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008226{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008227 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8228 tWDA_CbContext *pWDA;
8229 tSirHalWowlExitParams *pWowlExitParams;
8230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008231 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008232 if(NULL == pWdaParams)
8233 {
8234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008235 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008236 VOS_ASSERT(0) ;
8237 return ;
8238 }
8239 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8240 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8241
8242 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8243 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8244
8245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8246 vos_mem_free(pWdaParams) ;
8247
Jeff Johnson295189b2012-06-20 16:38:30 -07008248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008249 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008250 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008251 return ;
8252}
Jeff Johnson295189b2012-06-20 16:38:30 -07008253/*
8254 * FUNCTION: WDA_ProcessWowlExitReq
8255 * Request to WDI to add WOWL Bcast pattern
8256 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008257VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8258 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008259{
8260 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008261 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008262 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8263 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8264 sizeof(WDI_WowlExitReqParamsType)) ;
8265 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008267 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008268 if(NULL == wdiWowlExitInfo)
8269 {
8270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008271 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008272 VOS_ASSERT(0);
8273 return VOS_STATUS_E_NOMEM;
8274 }
8275 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8276 if(NULL == pWdaParams)
8277 {
8278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008279 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008280 VOS_ASSERT(0);
8281 vos_mem_free(wdiWowlExitInfo);
8282 return VOS_STATUS_E_NOMEM;
8283 }
8284
8285 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8286 pWowlExitParams->bssIdx;
8287
8288 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8289
8290 /* Store param pointer as passed in by caller */
8291 /* store Params pass it to WDI */
8292 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8293 pWdaParams->pWdaContext = pWDA;
8294 pWdaParams->wdaMsgParam = pWowlExitParams;
8295
8296 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8297 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008298
Jeff Johnson43971f52012-07-17 12:26:56 -07008299 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 {
8301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8302 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008303 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8305 vos_mem_free(pWdaParams->wdaMsgParam);
8306 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008308 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008309}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008310/*
8311 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8312 * Request to WDI to determine whether a given station is capable of
8313 * using HW-based frame translation
8314 */
8315v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8316 tANI_U8 staIdx)
8317{
8318 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8319}
Jeff Johnson295189b2012-06-20 16:38:30 -07008320/*
8321 * FUNCTION: WDA_NvDownloadReqCallback
8322 * send NV Download RSP back to PE
8323 */
8324void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8325 void* pUserData)
8326{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008327
8328 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8329 tWDA_CbContext *pWDA;
8330
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008332 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008333
8334 if(NULL == pWdaParams)
8335 {
8336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008337 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008338 VOS_ASSERT(0) ;
8339 return ;
8340 }
8341
8342 pWDA = pWdaParams->pWdaContext;
8343
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8346 vos_mem_free(pWdaParams);
8347
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 return ;
8350}
Jeff Johnson295189b2012-06-20 16:38:30 -07008351/*
8352 * FUNCTION: WDA_ProcessNvDownloadReq
8353 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8354 */
8355VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8356{
8357 /* Initialize the local Variables*/
8358 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8359 v_VOID_t *pNvBuffer=NULL;
8360 v_SIZE_t bufferSize = 0;
8361 WDI_Status status = WDI_STATUS_E_FAILURE;
8362 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008363 tWDA_ReqParams *pWdaParams ;
8364
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008366 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008367 if(NULL == pWDA)
8368 {
8369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008370 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008371 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008372 return VOS_STATUS_E_FAILURE;
8373 }
8374
8375 /* Get the NV structure base address and size from VOS */
8376 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8378 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 if(NULL == wdiNvDownloadReqParam)
8380 {
8381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 VOS_ASSERT(0);
8384 return VOS_STATUS_E_NOMEM;
8385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008386 /* Copy Params to wdiNvDownloadReqParam*/
8387 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8388 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008389
8390 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8391 if(NULL == pWdaParams)
8392 {
8393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008394 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008395 VOS_ASSERT(0);
8396 vos_mem_free(wdiNvDownloadReqParam);
8397 return VOS_STATUS_E_NOMEM;
8398 }
8399
Jeff Johnson295189b2012-06-20 16:38:30 -07008400 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008401 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8402 pWdaParams->wdaMsgParam = NULL;
8403 pWdaParams->pWdaContext = pWDA;
8404
8405
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008407
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008409 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8410
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 if(IS_WDI_STATUS_FAILURE(status))
8412 {
8413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8414 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8416 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008418 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008419}
8420/*
8421 * FUNCTION: WDA_FlushAcReqCallback
8422 * send Flush AC RSP back to TL
8423 */
8424void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8425{
8426 vos_msg_t wdaMsg = {0} ;
8427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8428 tFlushACReq *pFlushACReqParams;
8429 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008431 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008432 if(NULL == pWdaParams)
8433 {
8434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008435 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008436 VOS_ASSERT(0) ;
8437 return ;
8438 }
8439
8440 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8441 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8442 if(NULL == pFlushACRspParams)
8443 {
8444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008445 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008446 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008447 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008448 return ;
8449 }
8450 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8451 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8452 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8453 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8454 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8455 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008456 vos_mem_free(pWdaParams->wdaMsgParam) ;
8457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8458 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8460 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8461 // POST message to TL
8462 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8463
Jeff Johnson295189b2012-06-20 16:38:30 -07008464 return ;
8465}
Jeff Johnson295189b2012-06-20 16:38:30 -07008466/*
8467 * FUNCTION: WDA_ProcessFlushAcReq
8468 * Request to WDI to Update the DELBA REQ params.
8469 */
8470VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8471 tFlushACReq *pFlushAcReqParams)
8472{
8473 WDI_Status status = WDI_STATUS_SUCCESS ;
8474 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8475 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8476 sizeof(WDI_FlushAcReqParamsType)) ;
8477 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008478 if(NULL == wdiFlushAcReqParam)
8479 {
8480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 VOS_ASSERT(0);
8483 return VOS_STATUS_E_NOMEM;
8484 }
8485 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8486 if(NULL == pWdaParams)
8487 {
8488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008489 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008490 VOS_ASSERT(0);
8491 vos_mem_free(wdiFlushAcReqParam);
8492 return VOS_STATUS_E_NOMEM;
8493 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008495 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008496 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8497 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8498 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8499 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 /* Store Flush AC pointer, as this will be used for response */
8501 /* store Params pass it to WDI */
8502 pWdaParams->pWdaContext = pWDA;
8503 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8504 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008505 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8506 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 if(IS_WDI_STATUS_FAILURE(status))
8508 {
8509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8510 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8511 vos_mem_free(pWdaParams->wdaMsgParam) ;
8512 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8513 vos_mem_free(pWdaParams) ;
8514 //TODO: respond to TL with failure
8515 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008516 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008517}
Jeff Johnson295189b2012-06-20 16:38:30 -07008518/*
8519 * FUNCTION: WDA_BtAmpEventReqCallback
8520 *
8521 */
8522void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8523{
8524 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8525 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008526 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008527
8528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008529 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008530 if(NULL == pWdaParams)
8531 {
8532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008533 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008534 VOS_ASSERT(0) ;
8535 return ;
8536 }
8537 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8538 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8539 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8540 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8541 {
8542 pWDA->wdaAmpSessionOn = VOS_FALSE;
8543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008544 vos_mem_free(pWdaParams->wdaMsgParam) ;
8545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8546 vos_mem_free(pWdaParams) ;
8547 /*
8548 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8549 * param here
8550 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 return ;
8552}
8553
Jeff Johnson295189b2012-06-20 16:38:30 -07008554/*
8555 * FUNCTION: WDA_ProcessBtAmpEventReq
8556 * Request to WDI to Update with BT AMP events.
8557 */
8558VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8559 tSmeBtAmpEvent *pBtAmpEventParams)
8560{
8561 WDI_Status status = WDI_STATUS_SUCCESS ;
8562 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8563 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8564 sizeof(WDI_BtAmpEventParamsType)) ;
8565 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008567 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 if(NULL == wdiBtAmpEventParam)
8569 {
8570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008571 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008572 VOS_ASSERT(0);
8573 return VOS_STATUS_E_NOMEM;
8574 }
8575 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8576 if(NULL == pWdaParams)
8577 {
8578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008579 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008580 VOS_ASSERT(0);
8581 vos_mem_free(wdiBtAmpEventParam);
8582 return VOS_STATUS_E_NOMEM;
8583 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008584 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8585 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008587 /* Store BT AMP event pointer, as this will be used for response */
8588 /* store Params pass it to WDI */
8589 pWdaParams->pWdaContext = pWDA;
8590 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8591 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8593 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 if(IS_WDI_STATUS_FAILURE(status))
8595 {
8596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8597 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8598 vos_mem_free(pWdaParams->wdaMsgParam) ;
8599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8600 vos_mem_free(pWdaParams) ;
8601 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008602 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8603 {
8604 pWDA->wdaAmpSessionOn = VOS_TRUE;
8605 }
8606 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008607}
8608
Jeff Johnson295189b2012-06-20 16:38:30 -07008609#ifdef ANI_MANF_DIAG
8610/*
8611 * FUNCTION: WDA_FTMCommandReqCallback
8612 * Handle FTM CMD response came from HAL
8613 * Route responce to HDD FTM
8614 */
8615void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8616 void *usrData)
8617{
8618 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8620 {
8621 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008622 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008623 return;
8624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008625 /* Release Current FTM Command Request */
8626 vos_mem_free(pWDA->wdaFTMCmdReq);
8627 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008628#ifndef WLAN_FTM_STUB
8629 /* Post FTM Responce to HDD FTM */
8630 wlan_sys_ftm(ftmCmdRspData);
8631#endif /* WLAN_FTM_STUB */
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 return;
8633}
Jeff Johnson295189b2012-06-20 16:38:30 -07008634/*
8635 * FUNCTION: WDA_ProcessFTMCommand
8636 * Send FTM command to WDI
8637 */
8638VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8639 tPttMsgbuffer *pPTTFtmCmd)
8640{
8641 WDI_Status status = WDI_STATUS_SUCCESS;
8642 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008643 ftmCMDReq = (WDI_FTMCommandReqType *)
8644 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8645 if(NULL == ftmCMDReq)
8646 {
8647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8648 "WDA FTM Command buffer alloc fail");
8649 return VOS_STATUS_E_NOMEM;
8650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008651 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8652 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008654 /* Send command to WDI */
8655 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 return status;
8657}
8658#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07008659#ifdef FEATURE_OEM_DATA_SUPPORT
8660/*
8661 * FUNCTION: WDA_StartOemDataReqCallback
8662 *
8663 */
8664void WDA_StartOemDataReqCallback(
8665 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8666 void* pUserData)
8667{
8668 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8670 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008671 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008672
Jeff Johnsone7245742012-09-05 17:12:55 -07008673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008674 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008675
8676 if(NULL == pWdaParams)
8677 {
8678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008679 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008680 VOS_ASSERT(0) ;
8681 return ;
8682 }
8683 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8684
Jeff Johnsone7245742012-09-05 17:12:55 -07008685 if(NULL == pWDA)
8686 {
8687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008688 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008689 VOS_ASSERT(0);
8690 return ;
8691 }
8692
8693 /*
8694 * Allocate memory for response params sent to PE
8695 */
8696 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8697
8698 // Check if memory is allocated for OemdataMeasRsp Params.
8699 if(NULL == pOemDataRspParams)
8700 {
8701 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8702 "OEM DATA WDA callback alloc fail");
8703 VOS_ASSERT(0) ;
8704 return;
8705 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008706
Jeff Johnsone7245742012-09-05 17:12:55 -07008707 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8709 vos_mem_free(pWdaParams->wdaMsgParam);
8710 vos_mem_free(pWdaParams) ;
8711
Jeff Johnsone7245742012-09-05 17:12:55 -07008712 /*
Jeff Johnson3d30ed12012-12-10 14:41:22 -08008713 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07008714 * Also, here success always means that we have atleast one BSSID.
8715 */
8716 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8717
8718 //enable Tx
8719 status = WDA_ResumeDataTx(pWDA);
8720 if(status != VOS_STATUS_SUCCESS)
8721 {
8722 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8723 }
8724 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8725 return ;
8726}
8727/*
8728 * FUNCTION: WDA_ProcessStartOemDataReq
8729 * Send Start Oem Data Req to WDI
8730 */
8731VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8732 tStartOemDataReq *pOemDataReqParams)
8733{
8734 WDI_Status status = WDI_STATUS_SUCCESS;
8735 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008736 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008737
8738 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8739
8740 if(NULL == wdiOemDataReqParams)
8741 {
8742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008744 VOS_ASSERT(0);
8745 return VOS_STATUS_E_NOMEM;
8746 }
8747
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008748 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8749 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8750 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8751 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008752
8753 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8754
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008755 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8756 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008757 {
8758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008759 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008760 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008761 vos_mem_free(pOemDataReqParams);
8762 VOS_ASSERT(0);
8763 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008764 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008765
Bernal9088f0b2013-01-09 08:30:39 -08008766 pWdaParams->pWdaContext = (void*)pWDA;
8767 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
8768 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008769
8770 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8771 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008772
8773 if(IS_WDI_STATUS_FAILURE(status))
8774 {
8775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8776 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8778 vos_mem_free(pWdaParams->wdaMsgParam);
8779 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008780 }
8781 return CONVERT_WDI2VOS_STATUS(status) ;
8782}
8783#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008784/*
8785 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8786 *
8787 */
8788void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8789{
8790 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008792 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008793 if(NULL == pWdaParams)
8794 {
8795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008796 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008797 VOS_ASSERT(0) ;
8798 return ;
8799 }
8800
8801 if(NULL != pWdaParams->wdaMsgParam)
8802 {
8803 vos_mem_free(pWdaParams->wdaMsgParam);
8804 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008805 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8806 {
8807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8808 }
8809
8810 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008811 return ;
8812}
Jeff Johnson295189b2012-06-20 16:38:30 -07008813#ifdef WLAN_FEATURE_GTK_OFFLOAD
8814/*
8815 * FUNCTION: WDA_HostOffloadReqCallback
8816 *
8817 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008818void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8819 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008820{
8821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8822
8823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008824 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008825
8826 VOS_ASSERT(NULL != pWdaParams);
8827
8828 vos_mem_free(pWdaParams->wdaMsgParam) ;
8829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8830 vos_mem_free(pWdaParams) ;
8831
8832 //print a msg, nothing else to do
8833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8834 "WDA_GTKOffloadReqCallback invoked " );
8835
8836 return ;
8837}
8838
8839/*
8840 * FUNCTION: WDA_ProcessGTKOffloadReq
8841 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8842 * to broadcast traffic (sta mode).
8843 */
8844VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8845 tpSirGtkOffloadParams pGtkOffloadParams)
8846{
8847 VOS_STATUS status = VOS_STATUS_SUCCESS;
8848 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8849 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8850 sizeof(WDI_GtkOffloadReqMsg)) ;
8851 tWDA_ReqParams *pWdaParams ;
8852
8853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008854 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008855
8856 if(NULL == wdiGtkOffloadReqMsg)
8857 {
8858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008860 VOS_ASSERT(0);
8861 return VOS_STATUS_E_NOMEM;
8862 }
8863
8864 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8865 if(NULL == pWdaParams)
8866 {
8867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008868 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008869 VOS_ASSERT(0);
8870 vos_mem_free(wdiGtkOffloadReqMsg);
8871 return VOS_STATUS_E_NOMEM;
8872 }
8873
8874 //
8875 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8876 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008877
8878 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8879 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8880
Jeff Johnson295189b2012-06-20 16:38:30 -07008881 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8882 // Copy KCK
8883 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8884 // Copy KEK
8885 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8886 // Copy KeyReplayCounter
8887 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8888 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8889
8890 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8891
8892 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8893 (NULL == pWDA->wdaWdiApiMsgParam));
8894
8895 /* Store Params pass it to WDI */
8896 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8897 pWdaParams->pWdaContext = pWDA;
8898 /* Store param pointer as passed in by caller */
8899 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8900
8901 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8902
8903 if(IS_WDI_STATUS_FAILURE(status))
8904 {
8905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8906 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8908 vos_mem_free(pWdaParams->wdaMsgParam);
8909 vos_mem_free(pWdaParams);
8910 }
8911
8912 return CONVERT_WDI2VOS_STATUS(status) ;
8913}
8914
8915/*
8916 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8917 *
8918 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008919void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8920 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008921{
8922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8923 tWDA_CbContext *pWDA;
8924 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8925 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8926 tANI_U8 i;
8927 vos_msg_t vosMsg;
8928
8929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008930 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008931
8932 VOS_ASSERT(NULL != pWdaParams);
8933
8934 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8935 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8936
8937 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8938 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8939
8940 /* Message Header */
8941 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8942 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8943
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008944 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8945 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8946 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8947 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8948 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8949 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008950
8951 /* VOS message wrapper */
8952 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8953 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8954 vosMsg.bodyval = 0;
8955
8956 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8957 {
8958 /* free the mem and return */
8959 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8960 }
8961
8962 vos_mem_free(pWdaParams->wdaMsgParam) ;
8963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8964 vos_mem_free(pWdaParams) ;
8965}
8966#endif
8967
8968/*
8969 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8970 * Request to WDI to set Tx Per Tracking configurations
8971 */
8972VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8973{
8974 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008975 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008976 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8977 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8978 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8979 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008981 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 if(NULL == pwdiSetTxPerTrackingReqParams)
8983 {
8984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008985 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008986 vos_mem_free(pTxPerTrackingParams);
8987 VOS_ASSERT(0);
8988 return VOS_STATUS_E_NOMEM;
8989 }
8990 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8991 if(NULL == pWdaParams)
8992 {
8993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008995 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8996 vos_mem_free(pTxPerTrackingParams);
8997 VOS_ASSERT(0);
8998 return VOS_STATUS_E_NOMEM;
8999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009000 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
9001 pTxPerTrackingParams->ucTxPerTrackingEnable;
9002 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
9003 pTxPerTrackingParams->ucTxPerTrackingPeriod;
9004 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
9005 pTxPerTrackingParams->ucTxPerTrackingRatio;
9006 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
9007 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07009008 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 /* Store param pointer as passed in by caller */
9010 /* store Params pass it to WDI
9011 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
9012 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
9013 pWdaParams->pWdaContext = pWDA;
9014 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009015 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07009016 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009017 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 {
9019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9020 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009021 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009022 vos_mem_free(pWdaParams->wdaMsgParam) ;
9023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9024 vos_mem_free(pWdaParams) ;
9025 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009026 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009027
9028}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009029/*
9030 * FUNCTION: WDA_HALDumpCmdCallback
9031 * Send the VOS complete .
9032 */
9033void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
9034 void* pUserData)
9035{
9036 tANI_U8 *buffer = NULL;
9037 tWDA_CbContext *pWDA = NULL;
9038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009039 if(NULL == pWdaParams)
9040 {
9041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009042 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009043 VOS_ASSERT(0) ;
9044 return ;
9045 }
9046
9047 pWDA = pWdaParams->pWdaContext;
9048 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009049 if(wdiRspParams->usBufferLen > 0)
9050 {
9051 /*Copy the Resp data to UMAC supplied buffer*/
9052 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
9053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9055 vos_mem_free(pWdaParams);
9056
9057 /* Indicate VOSS about the start complete */
9058 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 return ;
9060}
9061
Jeff Johnson295189b2012-06-20 16:38:30 -07009062/*
9063 * FUNCTION: WDA_ProcessHALDumpCmdReq
9064 * Send Dump command to WDI
9065 */
9066VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9067 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9068 tANI_U32 arg4, tANI_U8 *pBuffer)
9069{
9070 WDI_Status status = WDI_STATUS_SUCCESS;
9071 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9072 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9073 tWDA_ReqParams *pWdaParams ;
9074 pVosContextType pVosContext = NULL;
9075 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9077 (void *)pMac);
9078
9079 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9080 if(NULL == pWdaParams)
9081 {
9082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009083 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009084 return VOS_STATUS_E_NOMEM;
9085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 /* Allocate memory WDI request structure*/
9087 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9088 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9089 if(NULL == wdiHALDumpCmdReqParam)
9090 {
9091 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9092 "WDA HAL DUMP Command buffer alloc fail");
9093 vos_mem_free(pWdaParams);
9094 return WDI_STATUS_E_FAILURE;
9095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009097 /* Extract the arguments */
9098 wdiHalDumpCmdInfo->command = cmd;
9099 wdiHalDumpCmdInfo->argument1 = arg1;
9100 wdiHalDumpCmdInfo->argument2 = arg2;
9101 wdiHalDumpCmdInfo->argument3 = arg3;
9102 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009103 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009104 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9105
9106 /* Response message will be passed through the buffer */
9107 pWdaParams->wdaMsgParam = (void *)pBuffer;
9108
9109 /* store Params pass it to WDI */
9110 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009111 /* Send command to WDI */
9112 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalaab4786d2013-01-07 15:01:01 -08009113 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 if ( vStatus != VOS_STATUS_SUCCESS )
9115 {
9116 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9117 {
9118 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson1920a722012-12-10 14:28:09 -08009119 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009120 }
9121 else
9122 {
9123 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009124 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009125 }
9126 VOS_ASSERT(0);
9127 }
9128 return status;
9129}
Jeff Johnson295189b2012-06-20 16:38:30 -07009130#ifdef WLAN_FEATURE_GTK_OFFLOAD
9131/*
9132 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9133 * Request to WDI to get GTK Offload Information
9134 */
9135VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9136 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9137{
9138 VOS_STATUS status = VOS_STATUS_SUCCESS;
9139 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9140 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9141 tWDA_ReqParams *pWdaParams ;
9142
9143 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9144 {
9145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009147 VOS_ASSERT(0);
9148 return VOS_STATUS_E_NOMEM;
9149 }
9150
9151 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9152 if(NULL == pWdaParams)
9153 {
9154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009155 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009156 VOS_ASSERT(0);
9157 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9158 return VOS_STATUS_E_NOMEM;
9159 }
9160
9161 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9162
9163 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9164 (NULL == pWDA->wdaWdiApiMsgParam));
9165
9166 /* Store Params pass it to WDI */
9167 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9168 pWdaParams->pWdaContext = pWDA;
9169 /* Store param pointer as passed in by caller */
9170 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9171
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009172 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9173 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9174
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9176
9177 if(IS_WDI_STATUS_FAILURE(status))
9178 {
9179 /* failure returned by WDI API */
9180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9181 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9182 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9183 vos_mem_free(pWdaParams) ;
9184 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9185 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9186 }
9187
9188 return CONVERT_WDI2VOS_STATUS(status) ;
9189}
9190#endif // WLAN_FEATURE_GTK_OFFLOAD
9191
9192/*
9193 * -------------------------------------------------------------------------
9194 * DATA interface with WDI for Mgmt Frames
9195 * -------------------------------------------------------------------------
9196 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009197/*
9198 * FUNCTION: WDA_TxComplete
9199 * Callback function for the WDA_TxPacket
9200 */
9201VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9202 VOS_STATUS status )
9203{
9204
9205 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9206 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009207 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009208
9209 if(NULL == wdaContext)
9210 {
9211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9212 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009213 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009214 VOS_ASSERT(0);
9215 return VOS_STATUS_E_FAILURE;
9216 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009217
9218 /*Check if frame was timed out or not*/
9219 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9220 (v_PVOID_t)&uUserData);
9221
9222 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9223 {
9224 /*Discard frame - no further processing is needed*/
9225 vos_pkt_return_packet(pData);
9226 return VOS_STATUS_SUCCESS;
9227 }
9228
Jeff Johnson295189b2012-06-20 16:38:30 -07009229 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9230 if( NULL!=wdaContext->pTxCbFunc)
9231 {
9232 /*check if packet is freed already*/
9233 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9234 {
9235 wdaContext->pTxCbFunc(pMac, pData);
9236 }
9237 else
9238 {
9239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9240 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009241 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009242 //Return from here since we reaching here because the packet already timeout
9243 return status;
9244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009245 }
9246
9247 /*
9248 * Trigger the event to bring the HAL TL Tx complete function to come
9249 * out of wait
9250 * Let the coe above to complete the packet first. When this event is set,
9251 * the thread waiting for the event may run and set Vospacket_freed causing the original
9252 * packet not being freed.
9253 */
9254 status = vos_event_set(&wdaContext->txFrameEvent);
9255 if(!VOS_IS_STATUS_SUCCESS(status))
9256 {
9257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9258 "NEW VOS Event Set failed - status = %d \n", status);
9259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 return status;
9261}
Jeff Johnson295189b2012-06-20 16:38:30 -07009262/*
9263 * FUNCTION: WDA_TxPacket
9264 * Forward TX management frame to WDI
9265 */
9266VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9267 void *pFrmBuf,
9268 tANI_U16 frmLen,
9269 eFrameType frmType,
9270 eFrameTxDir txDir,
9271 tANI_U8 tid,
9272 pWDATxRxCompFunc pCompFunc,
9273 void *pData,
9274 pWDAAckFnTxComp pAckTxComp,
9275 tANI_U8 txFlag)
9276{
9277 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9278 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9279 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9280 tANI_U8 eventIdx = 0;
9281 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9282 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009283 if((NULL == pWDA)||(NULL == pFrmBuf))
9284 {
9285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9286 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009287 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 VOS_ASSERT(0);
9289 return VOS_STATUS_E_FAILURE;
9290 }
9291
9292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9293 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009294 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9295 if(NULL == pMac)
9296 {
9297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009298 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009299 VOS_ASSERT(0);
9300 return VOS_STATUS_E_FAILURE;
9301 }
9302
9303
9304
9305 /* store the call back function in WDA context */
9306 pWDA->pTxCbFunc = pCompFunc;
9307 /* store the call back for the function of ackTxComplete */
9308 if( pAckTxComp )
9309 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009310 if( NULL != pWDA->pAckTxCbFunc )
9311 {
9312 /* Already TxComp is active no need to active again */
9313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9314 "There is already one request pending for tx complete\n");
9315 pWDA->pAckTxCbFunc( pMac, 0);
9316 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009317
Jeff Johnsone7245742012-09-05 17:12:55 -07009318 if( VOS_STATUS_SUCCESS !=
9319 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9320 {
9321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9322 "Tx Complete timeout Timer Stop Failed ");
9323 }
9324 else
9325 {
9326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson3d30ed12012-12-10 14:41:22 -08009327 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -07009328 }
9329 }
9330
9331 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9332 pWDA->pAckTxCbFunc = pAckTxComp;
9333 if( VOS_STATUS_SUCCESS !=
9334 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9335 {
9336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9337 "Tx Complete Timer Start Failed ");
9338 pWDA->pAckTxCbFunc = NULL;
9339 return eHAL_STATUS_FAILURE;
9340 }
9341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 /* Reset the event to be not signalled */
9343 status = vos_event_reset(&pWDA->txFrameEvent);
9344 if(!VOS_IS_STATUS_SUCCESS(status))
9345 {
9346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9347 "VOS Event reset failed - status = %d\n",status);
9348 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9349 if( pAckTxComp )
9350 {
9351 pWDA->pAckTxCbFunc = NULL;
9352 if( VOS_STATUS_SUCCESS !=
9353 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9354 {
9355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9356 "Tx Complete timeout Timer Stop Failed ");
9357 }
9358 }
9359 return VOS_STATUS_E_FAILURE;
9360 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009361
9362 /* If Peer Sta mask is set don't overwrite to self sta */
9363 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009364 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009365 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009366 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009367 else
9368 {
Madan Mohan Koyyalamudi4a3b2f12012-12-13 15:04:41 -08009369 /* Get system role, use the self station if in unknown role or STA role */
9370 systemRole = wdaGetGlobalSystemRole(pMac);
9371 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9372 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khannac0b992f2012-12-04 15:08:18 -08009373#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Madan Mohan Koyyalamudi4a3b2f12012-12-13 15:04:41 -08009374 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009375#endif
Madan Mohan Koyyalamudi4a3b2f12012-12-13 15:04:41 -08009376 ))
9377 {
9378 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9379 }
Madan Mohan Koyyalamudi33df5692012-12-07 14:24:14 -08009380 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009381
Jeff Johnsone7245742012-09-05 17:12:55 -07009382 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9383 disassoc frame reaches the HW, HAL has already deleted the peer station */
9384 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009386 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009387 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009389 /*Send Probe request frames on self sta idx*/
9390 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009392 /* Since we donot want probe responses to be retried, send probe responses
9393 through the NO_ACK queues */
9394 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9395 {
9396 //probe response is sent out using self station and no retries options.
9397 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9398 }
9399 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9400 {
9401 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9402 }
9403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009404 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9405
9406 /*Set frame tag to 0
9407 We will use the WDA user data in order to tag a frame as expired*/
9408 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9409 (v_PVOID_t)0);
9410
9411
9412 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9413 frmLen, ucTypeSubType, tid,
9414 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9415 {
9416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9417 "Sending Mgmt Frame failed - status = %d\n", status);
9418 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9419 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9420 if( pAckTxComp )
9421 {
9422 pWDA->pAckTxCbFunc = NULL;
9423 if( VOS_STATUS_SUCCESS !=
9424 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9425 {
9426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9427 "Tx Complete timeout Timer Stop Failed ");
9428 }
9429 }
9430 return VOS_STATUS_E_FAILURE;
9431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009432 /*
9433 * Wait for the event to be set by the TL, to get the response of TX
9434 * complete, this event should be set by the Callback function called by TL
9435 */
9436 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9437 &eventIdx);
9438 if(!VOS_IS_STATUS_SUCCESS(status))
9439 {
9440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9441 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009442 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009443 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9444 after the packet gets completed(packet freed once)*/
9445
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009446 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Gopichand Nakkala742df6c2012-12-21 15:34:30 -08009447 WDA_TransportChannelDebug(1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009448
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009449 /*Tag Frame as timed out for later deletion*/
9450 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9451 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9452
Jeff Johnson295189b2012-06-20 16:38:30 -07009453 /* check whether the packet was freed already,so need not free again when
9454 * TL calls the WDA_Txcomplete routine
9455 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009456 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9457 /*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 -07009458 {
9459 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009460 } */
9461
Jeff Johnson295189b2012-06-20 16:38:30 -07009462 if( pAckTxComp )
9463 {
9464 pWDA->pAckTxCbFunc = NULL;
9465 if( VOS_STATUS_SUCCESS !=
9466 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9467 {
9468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9469 "Tx Complete timeout Timer Stop Failed ");
9470 }
9471 }
9472 status = VOS_STATUS_E_FAILURE;
9473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009474 return status;
9475}
Jeff Johnson295189b2012-06-20 16:38:30 -07009476/*
9477 * FUNCTION: WDA_McProcessMsg
9478 * Trigger DAL-AL to start CFG download
9479 */
9480VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9481{
9482 VOS_STATUS status = VOS_STATUS_SUCCESS;
9483 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009484 if(NULL == pMsg)
9485 {
9486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009487 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 VOS_ASSERT(0);
9489 return VOS_STATUS_E_FAILURE;
9490 }
9491
9492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009493 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009494
9495 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9496 if(NULL == pWDA )
9497 {
9498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009499 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009501 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 return VOS_STATUS_E_FAILURE;
9503 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009504 /* Process all the WDA messages.. */
9505 switch( pMsg->type )
9506 {
9507 case WNI_CFG_DNLD_REQ:
9508 {
9509 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 /* call WDA complete event if config download success */
9511 if( VOS_IS_STATUS_SUCCESS(status) )
9512 {
9513 vos_WDAComplete_cback(pVosContext);
9514 }
9515 else
9516 {
9517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9518 "WDA Config Download failure" );
9519 }
9520 break ;
9521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009522 /*
9523 * Init SCAN request from PE, convert it into DAL format
9524 * and send it to DAL
9525 */
9526 case WDA_INIT_SCAN_REQ:
9527 {
9528 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9529 break ;
9530 }
9531 /* start SCAN request from PE */
9532 case WDA_START_SCAN_REQ:
9533 {
9534 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9535 break ;
9536 }
9537 /* end SCAN request from PE */
9538 case WDA_END_SCAN_REQ:
9539 {
9540 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9541 break ;
9542 }
9543 /* end SCAN request from PE */
9544 case WDA_FINISH_SCAN_REQ:
9545 {
9546 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9547 break ;
9548 }
9549 /* join request from PE */
9550 case WDA_CHNL_SWITCH_REQ:
9551 {
9552 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9553 {
9554 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9555 }
9556 else
9557 {
9558 WDA_ProcessChannelSwitchReq(pWDA,
9559 (tSwitchChannelParams*)pMsg->bodyptr) ;
9560 }
9561 break ;
9562 }
9563 /* ADD BSS request from PE */
9564 case WDA_ADD_BSS_REQ:
9565 {
9566 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9567 break ;
9568 }
9569 case WDA_ADD_STA_REQ:
9570 {
9571 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9572 break ;
9573 }
9574 case WDA_DELETE_BSS_REQ:
9575 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009576 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9577 break ;
9578 }
9579 case WDA_DELETE_STA_REQ:
9580 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9582 break ;
9583 }
9584 case WDA_CONFIG_PARAM_UPDATE_REQ:
9585 {
9586 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9587 break ;
9588 }
9589 case WDA_SET_BSSKEY_REQ:
9590 {
9591 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9592 break ;
9593 }
9594 case WDA_SET_STAKEY_REQ:
9595 {
9596 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9597 break ;
9598 }
9599 case WDA_SET_STA_BCASTKEY_REQ:
9600 {
9601 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9602 break ;
9603 }
9604 case WDA_REMOVE_BSSKEY_REQ:
9605 {
9606 WDA_ProcessRemoveBssKeyReq(pWDA,
9607 (tRemoveBssKeyParams *)pMsg->bodyptr);
9608 break ;
9609 }
9610 case WDA_REMOVE_STAKEY_REQ:
9611 {
9612 WDA_ProcessRemoveStaKeyReq(pWDA,
9613 (tRemoveStaKeyParams *)pMsg->bodyptr);
9614 break ;
9615 }
9616 case WDA_REMOVE_STA_BCASTKEY_REQ:
9617 {
9618 /* TODO: currently UMAC is not sending this request, Add the code for
9619 handling this request when UMAC supports */
9620 break;
9621 }
9622#ifdef FEATURE_WLAN_CCX
9623 case WDA_TSM_STATS_REQ:
9624 {
9625 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9626 break;
9627 }
9628#endif
9629 case WDA_UPDATE_EDCA_PROFILE_IND:
9630 {
9631 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9632 break;
9633 }
9634 case WDA_ADD_TS_REQ:
9635 {
9636 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9637 break;
9638 }
9639 case WDA_DEL_TS_REQ:
9640 {
9641 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9642 break;
9643 }
9644 case WDA_ADDBA_REQ:
9645 {
9646 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9647 break;
9648 }
9649 case WDA_DELBA_IND:
9650 {
9651 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9652 break;
9653 }
9654 case WDA_SET_LINK_STATE:
9655 {
9656 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9657 break;
9658 }
9659 case WDA_GET_STATISTICS_REQ:
9660 {
9661 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9662 break;
9663 }
9664 case WDA_PWR_SAVE_CFG:
9665 {
9666 if(pWDA->wdaState == WDA_READY_STATE)
9667 {
9668 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9669 }
9670 else
9671 {
9672 if(NULL != pMsg->bodyptr)
9673 {
9674 vos_mem_free(pMsg->bodyptr);
9675 }
9676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9677 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9678 }
9679 break;
9680 }
9681 case WDA_ENTER_IMPS_REQ:
9682 {
9683 if(pWDA->wdaState == WDA_READY_STATE)
9684 {
9685 WDA_ProcessEnterImpsReq(pWDA);
9686 }
9687 else
9688 {
9689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9690 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9691 }
9692 break;
9693 }
9694 case WDA_EXIT_IMPS_REQ:
9695 {
9696 if(pWDA->wdaState == WDA_READY_STATE)
9697 {
9698 WDA_ProcessExitImpsReq(pWDA);
9699 }
9700 else
9701 {
9702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9703 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9704 }
9705 break;
9706 }
9707 case WDA_ENTER_BMPS_REQ:
9708 {
9709 if(pWDA->wdaState == WDA_READY_STATE)
9710 {
9711 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9712 }
9713 else
9714 {
9715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9716 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9717 }
9718 break;
9719 }
9720 case WDA_EXIT_BMPS_REQ:
9721 {
9722 if(pWDA->wdaState == WDA_READY_STATE)
9723 {
9724 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9725 }
9726 else
9727 {
9728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9729 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9730 }
9731 break;
9732 }
9733 case WDA_ENTER_UAPSD_REQ:
9734 {
9735 if(pWDA->wdaState == WDA_READY_STATE)
9736 {
9737 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9738 }
9739 else
9740 {
9741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9742 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9743 }
9744 break;
9745 }
9746 case WDA_EXIT_UAPSD_REQ:
9747 {
9748 if(pWDA->wdaState == WDA_READY_STATE)
9749 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009750 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009751 }
9752 else
9753 {
9754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9755 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9756 }
9757 break;
9758 }
9759 case WDA_UPDATE_UAPSD_IND:
9760 {
9761 if(pWDA->wdaState == WDA_READY_STATE)
9762 {
9763 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9764 }
9765 else
9766 {
9767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9768 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9769 }
9770 break;
9771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009772 case WDA_REGISTER_PE_CALLBACK :
9773 {
9774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9775 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9776 /*TODO: store the PE callback */
9777 /* Do Nothing? MSG Body should be freed at here */
9778 if(NULL != pMsg->bodyptr)
9779 {
9780 vos_mem_free(pMsg->bodyptr);
9781 }
9782 break;
9783 }
9784 case WDA_SYS_READY_IND :
9785 {
9786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9787 "Handling msg type WDA_SYS_READY_IND " );
9788 pWDA->wdaState = WDA_READY_STATE;
9789 if(NULL != pMsg->bodyptr)
9790 {
9791 vos_mem_free(pMsg->bodyptr);
9792 }
9793 break;
9794 }
9795 case WDA_BEACON_FILTER_IND :
9796 {
9797 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9798 break;
9799 }
9800 case WDA_BTC_SET_CFG:
9801 {
9802 /*TODO: handle this while dealing with BTC */
9803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9804 "Handling msg type WDA_BTC_SET_CFG " );
9805 /* Do Nothing? MSG Body should be freed at here */
9806 if(NULL != pMsg->bodyptr)
9807 {
9808 vos_mem_free(pMsg->bodyptr);
9809 }
9810 break;
9811 }
9812 case WDA_SIGNAL_BT_EVENT:
9813 {
9814 /*TODO: handle this while dealing with BTC */
9815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9816 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9817 /* Do Nothing? MSG Body should be freed at here */
9818 if(NULL != pMsg->bodyptr)
9819 {
9820 vos_mem_free(pMsg->bodyptr);
9821 }
9822 break;
9823 }
9824 case WDA_CFG_RXP_FILTER_REQ:
9825 {
9826 WDA_ProcessConfigureRxpFilterReq(pWDA,
9827 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9828 break;
9829 }
9830 case WDA_SET_HOST_OFFLOAD:
9831 {
9832 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9833 break;
9834 }
9835 case WDA_SET_KEEP_ALIVE:
9836 {
9837 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9838 break;
9839 }
9840#ifdef WLAN_NS_OFFLOAD
9841 case WDA_SET_NS_OFFLOAD:
9842 {
9843 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9844 break;
9845 }
9846#endif //WLAN_NS_OFFLOAD
9847 case WDA_ADD_STA_SELF_REQ:
9848 {
9849 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9850 break;
9851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 case WDA_DEL_STA_SELF_REQ:
9853 {
9854 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9855 break;
9856 }
9857 case WDA_WOWL_ADD_BCAST_PTRN:
9858 {
9859 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9860 break;
9861 }
9862 case WDA_WOWL_DEL_BCAST_PTRN:
9863 {
9864 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9865 break;
9866 }
9867 case WDA_WOWL_ENTER_REQ:
9868 {
9869 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9870 break;
9871 }
9872 case WDA_WOWL_EXIT_REQ:
9873 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009874 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009875 break;
9876 }
9877 case WDA_TL_FLUSH_AC_REQ:
9878 {
9879 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9880 break;
9881 }
9882 case WDA_SIGNAL_BTAMP_EVENT:
9883 {
9884 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9885 break;
9886 }
9887#ifdef WDA_UT
9888 case WDA_WDI_EVENT_MSG:
9889 {
9890 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9891 break ;
9892 }
9893#endif
9894 case WDA_UPDATE_BEACON_IND:
9895 {
9896 WDA_ProcessUpdateBeaconParams(pWDA,
9897 (tUpdateBeaconParams *)pMsg->bodyptr);
9898 break;
9899 }
9900 case WDA_SEND_BEACON_REQ:
9901 {
9902 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9903 break;
9904 }
9905 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9906 {
9907 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9908 (tSendProbeRespParams *)pMsg->bodyptr);
9909 break;
9910 }
9911#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9912 case WDA_SET_MAX_TX_POWER_REQ:
9913 {
9914 WDA_ProcessSetMaxTxPowerReq(pWDA,
9915 (tMaxTxPowerParams *)pMsg->bodyptr);
9916 break;
9917 }
9918#endif
9919#ifdef WLAN_FEATURE_P2P
9920 case WDA_SET_P2P_GO_NOA_REQ:
9921 {
9922 WDA_ProcessSetP2PGONOAReq(pWDA,
9923 (tP2pPsParams *)pMsg->bodyptr);
9924 break;
9925 }
9926#endif
9927 /* timer related messages */
9928 case WDA_TIMER_BA_ACTIVITY_REQ:
9929 {
9930 WDA_BaCheckActivity(pWDA) ;
9931 break ;
9932 }
Madan Mohan Koyyalamudi28260002013-01-10 21:56:05 -08009933
9934 /* timer related messages */
9935 case WDA_TIMER_TRAFFIC_STATS_IND:
9936 {
9937 WDA_TimerTrafficStatsInd(pWDA);
9938 break;
9939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009940#ifdef WLAN_FEATURE_VOWIFI_11R
9941 case WDA_AGGR_QOS_REQ:
9942 {
9943 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9944 break;
9945 }
9946#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009947#ifdef ANI_MANF_DIAG
9948 case WDA_FTM_CMD_REQ:
9949 {
9950 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9951 break ;
9952 }
9953#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07009954#ifdef FEATURE_OEM_DATA_SUPPORT
9955 case WDA_START_OEM_DATA_REQ:
9956 {
9957 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9958 break;
9959 }
9960#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009961 /* Tx Complete Time out Indication */
9962 case WDA_TX_COMPLETE_TIMEOUT_IND:
9963 {
9964 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9965 break;
9966 }
9967 case WDA_WLAN_SUSPEND_IND:
9968 {
9969 WDA_ProcessWlanSuspendInd(pWDA,
9970 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9971 break;
9972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009973 case WDA_WLAN_RESUME_REQ:
9974 {
9975 WDA_ProcessWlanResumeReq(pWDA,
9976 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9977 break;
9978 }
9979
9980 case WDA_UPDATE_CF_IND:
9981 {
9982 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9983 pMsg->bodyptr = NULL;
9984 break;
9985 }
9986#ifdef FEATURE_WLAN_SCAN_PNO
9987 case WDA_SET_PNO_REQ:
9988 {
9989 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9990 break;
9991 }
9992 case WDA_UPDATE_SCAN_PARAMS_REQ:
9993 {
9994 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9995 break;
9996 }
9997 case WDA_SET_RSSI_FILTER_REQ:
9998 {
9999 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
10000 break;
10001 }
10002#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 case WDA_SET_TX_PER_TRACKING_REQ:
10004 {
10005 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
10006 break;
10007 }
10008
10009#ifdef WLAN_FEATURE_PACKET_FILTERING
10010 case WDA_8023_MULTICAST_LIST_REQ:
10011 {
10012 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
10013 break;
10014 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010015 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
10016 {
10017 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
10018 break;
10019 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
10021 {
10022 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
10023 break;
10024 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
10026 {
10027 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
10028 break;
10029 }
10030#endif // WLAN_FEATURE_PACKET_FILTERING
10031
10032
10033 case WDA_TRANSMISSION_CONTROL_IND:
10034 {
10035 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
10036 break;
10037 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010038 case WDA_SET_POWER_PARAMS_REQ:
10039 {
10040 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
10041 break;
10042 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010043#ifdef WLAN_FEATURE_GTK_OFFLOAD
10044 case WDA_GTK_OFFLOAD_REQ:
10045 {
10046 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
10047 break;
10048 }
10049
10050 case WDA_GTK_OFFLOAD_GETINFO_REQ:
10051 {
10052 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
10053 break;
10054 }
10055#endif //WLAN_FEATURE_GTK_OFFLOAD
10056
10057 case WDA_SET_TM_LEVEL_REQ:
10058 {
10059 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
10060 break;
10061 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070010062#ifdef WLAN_FEATURE_11AC
10063 case WDA_UPDATE_OP_MODE:
10064 {
10065 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
10066 {
10067 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10068 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10069 else
10070 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10071 " VHT OpMode Feature is Not Supported \n");
10072 }
10073 else
10074 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10075 " 11AC Feature is Not Supported \n");
10076 break;
10077 }
10078#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010079 default:
10080 {
10081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10082 "No Handling for msg type %x in WDA "
10083 ,pMsg->type);
10084 /* Do Nothing? MSG Body should be freed at here */
10085 if(NULL != pMsg->bodyptr)
10086 {
10087 vos_mem_free(pMsg->bodyptr);
10088 }
10089 //WDA_VOS_ASSERT(0) ;
10090 }
10091 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 return status ;
10093}
10094
Jeff Johnson295189b2012-06-20 16:38:30 -070010095/*
10096 * FUNCTION: WDA_LowLevelIndCallback
10097 * IND API callback from WDI, send Ind to PE
10098 */
10099void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10100 void* pUserData )
10101{
10102 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10103#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10104 tSirRSSINotification rssiNotification;
10105#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010106 if(NULL == pWDA)
10107 {
10108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010109 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010110 VOS_ASSERT(0);
10111 return ;
10112 }
10113
10114 switch(wdiLowLevelInd->wdiIndicationType)
10115 {
10116 case WDI_RSSI_NOTIFICATION_IND:
10117 {
10118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10119 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010120#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10121 rssiNotification.bReserved =
10122 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10123 rssiNotification.bRssiThres1NegCross =
10124 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10125 rssiNotification.bRssiThres1PosCross =
10126 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10127 rssiNotification.bRssiThres2NegCross =
10128 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10129 rssiNotification.bRssiThres2PosCross =
10130 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10131 rssiNotification.bRssiThres3NegCross =
10132 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10133 rssiNotification.bRssiThres3PosCross =
10134 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Madan Mohan Koyyalamudi313a5932012-12-12 15:59:44 -080010135 rssiNotification.avgRssi = (v_S7_t)
10136 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070010137 WLANTL_BMPSRSSIRegionChangedNotification(
10138 pWDA->pVosContext,
10139 &rssiNotification);
10140#endif
10141 break ;
10142 }
10143 case WDI_MISSED_BEACON_IND:
10144 {
10145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10146 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010147 /* send IND to PE */
10148 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, NULL, 0) ;
10149 break ;
10150 }
10151 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10152 {
10153 /* TODO: Decode Ind and send Ind to PE */
10154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10155 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10156 break ;
10157 }
10158
10159 case WDI_MIC_FAILURE_IND:
10160 {
10161 tpSirSmeMicFailureInd pMicInd =
10162 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10163
10164 if(NULL == pMicInd)
10165 {
10166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010168 break;
10169 }
10170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10171 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010172 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10173 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10174 vos_mem_copy(pMicInd->bssId,
10175 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10176 sizeof(tSirMacAddr));
10177 vos_mem_copy(pMicInd->info.srcMacAddr,
10178 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10179 sizeof(tSirMacAddr));
10180 vos_mem_copy(pMicInd->info.taMacAddr,
10181 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10182 sizeof(tSirMacAddr));
10183 vos_mem_copy(pMicInd->info.dstMacAddr,
10184 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10185 sizeof(tSirMacAddr));
10186 vos_mem_copy(pMicInd->info.rxMacAddr,
10187 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10188 sizeof(tSirMacAddr));
10189 pMicInd->info.multicast =
10190 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10191 pMicInd->info.keyId=
10192 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10193 pMicInd->info.IV1=
10194 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10195 vos_mem_copy(pMicInd->info.TSC,
10196 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010197 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10198 (void *)pMicInd , 0) ;
10199 break ;
10200 }
10201 case WDI_FATAL_ERROR_IND:
10202 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010203 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 /* TODO: Decode Ind and send Ind to PE */
10205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10206 "Received WDI_FATAL_ERROR_IND from WDI ");
10207 break ;
10208 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010209 case WDI_DEL_STA_IND:
10210 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010211 tpDeleteStaContext pDelSTACtx =
10212 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10213
10214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10215 "Received WDI_DEL_STA_IND from WDI ");
10216 if(NULL == pDelSTACtx)
10217 {
10218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010219 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010220 break;
10221 }
10222 vos_mem_copy(pDelSTACtx->addr2,
10223 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10224 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010225 vos_mem_copy(pDelSTACtx->bssId,
10226 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10227 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010228 pDelSTACtx->assocId =
10229 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10230 pDelSTACtx->reasonCode =
10231 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10232 pDelSTACtx->staId =
10233 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10235 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010236 break ;
10237 }
10238 case WDI_COEX_IND:
10239 {
10240 tANI_U32 index;
10241 vos_msg_t vosMsg;
10242 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10243 if(NULL == pSmeCoexInd)
10244 {
10245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010246 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 break;
10248 }
10249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10250 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 /* Message Header */
10252 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10253 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 /* Info from WDI Indication */
10255 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10256 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10257 {
10258 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10259 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010260 /* VOS message wrapper */
10261 vosMsg.type = eWNI_SME_COEX_IND;
10262 vosMsg.bodyptr = (void *)pSmeCoexInd;
10263 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 /* Send message to SME */
10265 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10266 {
10267 /* free the mem and return */
10268 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10269 }
10270 else
10271 {
10272 /* DEBUG */
10273 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10274 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10275 pSmeCoexInd->coexIndType,
10276 pSmeCoexInd->coexIndData[0],
10277 pSmeCoexInd->coexIndData[1],
10278 pSmeCoexInd->coexIndData[2],
10279 pSmeCoexInd->coexIndData[3]);
10280 }
10281 break;
10282 }
10283 case WDI_TX_COMPLETE_IND:
10284 {
10285 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10286 /* Calling TxCompleteAck Indication from wda context*/
10287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10288 "Complete Indication received from HAL");
10289 if( pWDA->pAckTxCbFunc )
10290 {
10291 if( VOS_STATUS_SUCCESS !=
10292 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10293 {
10294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10295 "Tx Complete timeout Timer Stop Failed ");
10296 }
10297 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10298 pWDA->pAckTxCbFunc = NULL;
10299 }
10300 else
10301 {
10302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10303 "Tx Complete Indication is received after timeout ");
10304 }
10305 break;
10306 }
10307#ifdef WLAN_FEATURE_P2P
Viral Modi9dc288a2012-12-10 13:09:21 -080010308 case WDI_P2P_NOA_START_IND :
10309 {
10310 tSirP2PNoaStart *pP2pNoaStart =
10311 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
10312
10313 if (NULL == pP2pNoaStart)
10314 {
10315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10316 "Memory allocation failure, "
10317 "WDI_P2P_NOA_START_IND not forwarded");
10318 break;
10319 }
10320 pP2pNoaStart->status =
10321 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
10322 pP2pNoaStart->bssIdx =
10323 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
10324 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
10325 (void *)pP2pNoaStart , 0) ;
10326 break;
10327 }
10328
Jeff Johnson295189b2012-06-20 16:38:30 -070010329 case WDI_P2P_NOA_ATTR_IND :
10330 {
10331 tSirP2PNoaAttr *pP2pNoaAttr =
10332 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10334 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010335 if (NULL == pP2pNoaAttr)
10336 {
10337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10338 "Memory allocation failure, "
10339 "WDI_P2P_NOA_ATTR_IND not forwarded");
10340 break;
10341 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010342 pP2pNoaAttr->index =
10343 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10344 pP2pNoaAttr->oppPsFlag =
10345 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10346 pP2pNoaAttr->ctWin =
10347 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10348
10349 pP2pNoaAttr->uNoa1IntervalCnt =
10350 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10351 pP2pNoaAttr->uNoa1Duration =
10352 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10353 pP2pNoaAttr->uNoa1Interval =
10354 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10355 pP2pNoaAttr->uNoa1StartTime =
10356 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 pP2pNoaAttr->uNoa2IntervalCnt =
10358 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10359 pP2pNoaAttr->uNoa2Duration =
10360 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10361 pP2pNoaAttr->uNoa2Interval =
10362 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10363 pP2pNoaAttr->uNoa2StartTime =
10364 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10366 (void *)pP2pNoaAttr , 0) ;
10367 break;
10368 }
10369#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010370#ifdef FEATURE_WLAN_SCAN_PNO
10371 case WDI_PREF_NETWORK_FOUND_IND:
10372 {
10373 vos_msg_t vosMsg;
10374 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10376 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010377 if (NULL == pPrefNetworkFoundInd)
10378 {
10379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10380 "Memory allocation failure, "
10381 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10382 break;
10383 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 /* Message Header */
10385 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10386 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10387
10388 /* Info from WDI Indication */
10389 pPrefNetworkFoundInd->ssId.length =
10390 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010391 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010392 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10393 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10394 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010395 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010396 /* VOS message wrapper */
10397 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10398 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10399 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010400 /* Send message to SME */
10401 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10402 {
10403 /* free the mem and return */
10404 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10405 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010406 break;
10407 }
10408#endif // FEATURE_WLAN_SCAN_PNO
10409
10410#ifdef WLAN_WAKEUP_EVENTS
10411 case WDI_WAKE_REASON_IND:
10412 {
10413 vos_msg_t vosMsg;
10414 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10415 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10416 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10417
10418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10419 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10420 wdiLowLevelInd->wdiIndicationType,
10421 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10422 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10423 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10424
10425 if (NULL == pWakeReasonInd)
10426 {
10427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10428 "Memory allocation failure, "
10429 "WDI_WAKE_REASON_IND not forwarded");
10430 break;
10431 }
10432
10433 vos_mem_zero(pWakeReasonInd, allocSize);
10434
10435 /* Message Header */
10436 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10437 pWakeReasonInd->mesgLen = allocSize;
10438
10439 /* Info from WDI Indication */
10440 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10441 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10442 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10443 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10444 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10445 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10446 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10447 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10448
10449 /* VOS message wrapper */
10450 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10451 vosMsg.bodyptr = (void *) pWakeReasonInd;
10452 vosMsg.bodyval = 0;
10453
10454 /* Send message to SME */
10455 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10456 {
10457 /* free the mem and return */
10458 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10459 }
10460
10461 break;
10462 }
10463#endif // WLAN_WAKEUP_EVENTS
10464
10465 case WDI_TX_PER_HIT_IND:
10466 {
10467 vos_msg_t vosMsg;
10468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10469 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10470 /* VOS message wrapper */
10471 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10472 vosMsg.bodyptr = NULL;
10473 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010474 /* Send message to SME */
10475 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10476 {
10477 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10478 }
10479 break;
10480 }
10481
10482 default:
10483 {
10484 /* TODO error */
10485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10486 "Received UNKNOWN Indication from WDI ");
10487 }
10488 }
10489 return ;
10490}
10491
Jeff Johnson295189b2012-06-20 16:38:30 -070010492/*
10493 * BA related processing in WDA.
10494 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010495void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10496 void* pUserData)
10497{
10498 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10499 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010500 if(NULL == pWdaParams)
10501 {
10502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010503 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010504 VOS_ASSERT(0) ;
10505 return ;
10506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010507 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010508 vos_mem_free(pWdaParams->wdaMsgParam) ;
10509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10510 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010512 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010513 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10514 {
10515 tANI_U8 i = 0 ;
10516 tBaActivityInd *baActivityInd = NULL ;
10517 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10518 tANI_U8 allocSize = sizeof(tBaActivityInd)
10519 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10520 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10521 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010522 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010523 if(NULL == baActivityInd)
10524 {
10525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010526 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010527 VOS_ASSERT(0) ;
10528 return;
10529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010530 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10531 sizeof(tSirMacAddr)) ;
10532 baActivityInd->baCandidateCnt = baCandidateCount ;
10533
10534 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10535 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10536
10537 for(i = 0 ; i < baCandidateCount ; i++)
10538 {
10539 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010540 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10541 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010542 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10543 {
10544 baCandidate->baInfo[tid].fBaEnable =
10545 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10546 baCandidate->baInfo[tid].startingSeqNum =
10547 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10548 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010549 wdiBaCandidate++ ;
10550 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010552 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10553 }
10554 else
10555 {
10556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10557 "BA Trigger RSP with Failure received ");
10558 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010559 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010560}
Madan Mohan Koyyalamudi28260002013-01-10 21:56:05 -080010561
10562
10563/*
10564 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
10565 * during MCC
10566 */
10567void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
10568{
10569 wpt_uint32 enabled;
10570 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
10571 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
10572 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
10573
10574 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10575 != eSIR_SUCCESS)
10576 {
10577 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10578 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10579 return;
10580 }
10581
10582 if(!enabled)
10583 {
10584 return;
10585 }
10586
10587 if(NULL == pWDA)
10588 {
10589 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10590 "%s:WDA context is NULL", __func__);
10591 VOS_ASSERT(0);
10592 return;
10593 }
10594
10595 if(activate)
10596 {
10597 if( VOS_STATUS_SUCCESS !=
10598 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10599 {
10600 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10601 "Traffic Stats Timer Start Failed ");
10602 return;
10603 }
10604 WDI_DS_ActivateTrafficStats();
10605 }
10606 else
10607 {
10608 WDI_DS_DeactivateTrafficStats();
10609 WDI_DS_ClearTrafficStats();
10610
10611 if( VOS_STATUS_SUCCESS !=
10612 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10613 {
10614 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10615 "Traffic Stats Timer Stop Failed ");
10616 return;
10617 }
10618 }
10619}
10620
10621/*
10622 * Traffic Stats Timer handler
10623 */
10624void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
10625{
10626 WDI_Status wdiStatus;
10627 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
10628 WDI_TrafficStatsIndType trafficStatsIndParams;
10629 wpt_uint32 length, enabled;
10630 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10631
10632 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10633 != eSIR_SUCCESS)
10634 {
10635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10636 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10637 return;
10638 }
10639
10640 if(!enabled)
10641 {
10642 WDI_DS_DeactivateTrafficStats();
10643 return;
10644 }
10645
10646 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
10647
10648 if(pWdiTrafficStats != NULL)
10649 {
10650 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
10651 trafficStatsIndParams.length = length;
10652 trafficStatsIndParams.duration =
Kumar Anand817c2a72013-01-18 15:24:47 -080010653 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi28260002013-01-10 21:56:05 -080010654 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10655 trafficStatsIndParams.pUserData = pWDA;
10656
10657 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
10658
10659 if(WDI_STATUS_PENDING == wdiStatus)
10660 {
10661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10662 "Pending received for %s:%d ",__func__,__LINE__ );
10663 }
10664 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10665 {
10666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10667 "Failure in %s:%d ",__func__,__LINE__ );
10668 }
10669
10670 WDI_DS_ClearTrafficStats();
10671 }
10672 else
10673 {
10674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10675 "pWdiTrafficStats is Null");
10676 }
10677
10678 if( VOS_STATUS_SUCCESS !=
10679 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10680 {
10681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10682 "Traffic Stats Timer Start Failed ");
10683 return;
10684 }
10685}
10686
Jeff Johnson295189b2012-06-20 16:38:30 -070010687/*
10688 * BA Activity check timer handler
10689 */
10690void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10691{
10692 tANI_U8 curSta = 0 ;
10693 tANI_U8 tid = 0 ;
10694 tANI_U8 size = 0 ;
10695 tANI_U8 baCandidateCount = 0 ;
10696 tANI_U8 newBaCandidate = 0 ;
10697 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10698
10699 if(NULL == pWDA)
10700 {
10701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010702 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010703 VOS_ASSERT(0);
10704 return ;
10705 }
10706 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10707 {
10708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10709 "Inconsistent STA entries in WDA");
10710 VOS_ASSERT(0) ;
10711 }
10712 /* walk through all STA entries and find out TX packet count */
10713 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10714 {
Gopichand Nakkalaba261272013-01-03 15:45:56 -080010715#ifdef WLAN_SOFTAP_VSTA_FEATURE
10716 // We can only do BA on "hard" STAs.
10717 if (!(IS_HWSTA_IDX(curSta)))
10718 {
10719 continue;
10720 }
10721#endif //WLAN_SOFTAP_VSTA_FEATURE
10722 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10723 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010724 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 tANI_U32 txPktCount = 0 ;
10726 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010727 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010728 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10729 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010730 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10731 curSta, tid, &txPktCount)))
10732 {
10733#if 0
10734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10735 "************* %d:%d, %d ",curSta, txPktCount,
10736 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10737#endif
10738 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010739 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010740 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10741 curSta, tid)))
10742 {
10743 /* get prepare for sending message to HAL */
10744 //baCandidate[baCandidateCount].staIdx = curSta ;
10745 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10746 newBaCandidate = WDA_ENABLE_BA ;
10747 }
10748 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10749 }
10750 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 /* fill the entry for all the sta with given TID's */
10752 if(WDA_ENABLE_BA == newBaCandidate)
10753 {
10754 /* move to next BA candidate */
10755 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
10756 size += sizeof(WDI_TriggerBAReqCandidateType) ;
10757 baCandidateCount++ ;
10758 newBaCandidate = WDA_DISABLE_BA ;
10759 }
10760 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010761 /* prepare and send message to hal */
10762 if( 0 < baCandidateCount)
10763 {
10764 WDI_Status status = WDI_STATUS_SUCCESS ;
10765 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
10766 tWDA_ReqParams *pWdaParams =
10767 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 if(NULL == pWdaParams)
10769 {
10770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 VOS_ASSERT(0) ;
10773 return;
10774 }
10775 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
10776 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
10777 if(NULL == wdiTriggerBaReq)
10778 {
10779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010780 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010781 VOS_ASSERT(0) ;
10782 vos_mem_free(pWdaParams);
10783 return;
10784 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010785 do
10786 {
10787 WDI_TriggerBAReqinfoType *triggerBaInfo =
10788 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
10789 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
10790 /* TEMP_FIX: Need to see if WDI need check for assoc session for
10791 * for each request */
10792 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
10793 triggerBaInfo->ucBASessionID = 0;
10794 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
10795 } while(0) ;
10796 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
10797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010798 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010799 pWdaParams->pWdaContext = pWDA;
10800 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
10801 pWdaParams->wdaMsgParam = NULL;
10802 status = WDI_TriggerBAReq(wdiTriggerBaReq,
10803 WDA_TriggerBaReqCallback, pWdaParams) ;
10804 if(IS_WDI_STATUS_FAILURE(status))
10805 {
10806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10807 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
10808 vos_mem_free(pWdaParams->wdaMsgParam) ;
10809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10810 vos_mem_free(pWdaParams) ;
10811 }
10812 }
10813 else
10814 {
10815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10816 "There is no TID for initiating BA");
10817 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010818 if( VOS_STATUS_SUCCESS !=
10819 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10820 {
10821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10822 "BA Activity Timer Stop Failed ");
10823 return ;
10824 }
10825 if( VOS_STATUS_SUCCESS !=
10826 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10827 {
10828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10829 "BA Activity Timer Start Failed ");
10830 return;
10831 }
10832 return ;
10833}
Jeff Johnson295189b2012-06-20 16:38:30 -070010834/*
10835 * WDA common routine to create timer used by WDA.
10836 */
10837static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
10838{
Jeff Johnson295189b2012-06-20 16:38:30 -070010839 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10840 tANI_U32 val = 0 ;
10841 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10842
10843 if(NULL == pMac)
10844 {
10845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010846 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010847 VOS_ASSERT(0);
10848 return VOS_STATUS_E_FAILURE;
10849 }
10850 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
10851 != eSIR_SUCCESS)
10852 {
10853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10854 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
10855 return VOS_STATUS_E_FAILURE;
10856 }
10857 val = SYS_MS_TO_TICKS(val) ;
10858
10859 /* BA activity check timer */
10860 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
10861 "BA Activity Check timer", WDA_TimerHandler,
10862 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
10863 if(status != TX_SUCCESS)
10864 {
10865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10866 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010867 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010869 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010870 /* Tx Complete Timeout timer */
10871 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
10872 "Tx Complete Check timer", WDA_TimerHandler,
10873 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010874 if(status != TX_SUCCESS)
10875 {
10876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10877 "Unable to create Tx Complete Timeout timer");
10878 /* Destroy timer of BA activity check timer */
10879 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10880 if(status != TX_SUCCESS)
10881 {
10882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10883 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010884 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010885 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010886 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010887 }
Madan Mohan Koyyalamudi28260002013-01-10 21:56:05 -080010888
10889 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
10890
10891 /* Traffic Stats timer */
10892 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
10893 "Traffic Stats timer", WDA_TimerHandler,
10894 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
10895 if(status != TX_SUCCESS)
10896 {
10897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10898 "Unable to create traffic stats timer");
10899 /* Destroy timer of BA activity check timer */
10900 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10901 if(status != TX_SUCCESS)
10902 {
10903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10904 "Unable to Destroy BA activity timer");
10905 }
10906 /* Destroy timer of tx complete timer */
10907 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10908 if(status != TX_SUCCESS)
10909 {
10910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10911 "Unable to Tx complete timer");
10912 }
10913 return VOS_STATUS_E_FAILURE ;
10914 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010915 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010916}
Jeff Johnson295189b2012-06-20 16:38:30 -070010917/*
10918 * WDA common routine to destroy timer used by WDA.
10919 */
10920static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
10921{
10922 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010923 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10924 if(status != TX_SUCCESS)
10925 {
10926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10927 "Unable to Destroy Tx Complete Timeout timer");
10928 return eSIR_FAILURE ;
10929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010930 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10931 if(status != TX_SUCCESS)
10932 {
10933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10934 "Unable to Destroy BA activity timer");
10935 return eSIR_FAILURE ;
10936 }
Madan Mohan Koyyalamudi28260002013-01-10 21:56:05 -080010937 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
10938 if(status != TX_SUCCESS)
10939 {
10940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10941 "Unable to Destroy traffic stats timer");
10942 return eSIR_FAILURE ;
10943 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010944 return eSIR_SUCCESS ;
10945}
Jeff Johnson295189b2012-06-20 16:38:30 -070010946/*
10947 * WDA timer handler.
10948 */
10949void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
10950{
10951 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
10952 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010953 /*
10954 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
10955 */
10956 wdaMsg.type = timerInfo ;
10957 wdaMsg.bodyptr = NULL;
10958 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010959 /* post the message.. */
10960 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
10961 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
10962 {
10963 vosStatus = VOS_STATUS_E_BADMSG;
10964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010965}
Jeff Johnson295189b2012-06-20 16:38:30 -070010966/*
10967 * WDA Tx Complete timeout Indication.
10968 */
10969void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
10970{
10971 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010972 if( pWDA->pAckTxCbFunc )
10973 {
10974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10975 "TxComplete timer expired\n");
10976 pWDA->pAckTxCbFunc( pMac, 0);
10977 pWDA->pAckTxCbFunc = NULL;
10978 }
10979 else
10980 {
10981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10982 "There is no request pending for TxComplete and wait timer expired\n");
10983 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010984}
Jeff Johnson295189b2012-06-20 16:38:30 -070010985/*
10986 * WDA Set REG Domain to VOS NV
10987 */
10988eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
10989{
10990 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
10991 {
10992 return eHAL_STATUS_INVALID_PARAMETER;
10993 }
10994 return eHAL_STATUS_SUCCESS;
10995}
10996#endif /* FEATURE_WLAN_INTEGRATED_SOC */
10997
Jeff Johnson295189b2012-06-20 16:38:30 -070010998#ifdef FEATURE_WLAN_SCAN_PNO
10999/*
11000 * FUNCTION: WDA_PNOScanReqCallback
11001 *
11002 */
11003void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
11004{
11005 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011008 if(NULL == pWdaParams)
11009 {
11010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011011 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011012 VOS_ASSERT(0) ;
11013 return ;
11014 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011015 if( pWdaParams != NULL )
11016 {
11017 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11018 {
11019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 if( pWdaParams->wdaMsgParam != NULL)
11022 {
11023 vos_mem_free(pWdaParams->wdaMsgParam);
11024 }
11025
11026 vos_mem_free(pWdaParams) ;
11027 }
11028
11029 return ;
11030}
Jeff Johnson295189b2012-06-20 16:38:30 -070011031/*
11032 * FUNCTION: WDA_UpdateScanParamsCallback
11033 *
11034 */
11035void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
11036{
11037 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011039 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011040 if(NULL == pWdaParams)
11041 {
11042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011043 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011044 VOS_ASSERT(0) ;
11045 return ;
11046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011047 if( pWdaParams != NULL )
11048 {
11049 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11050 {
11051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11052 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011053 if( pWdaParams->wdaMsgParam != NULL)
11054 {
11055 vos_mem_free(pWdaParams->wdaMsgParam);
11056 }
11057 vos_mem_free(pWdaParams) ;
11058 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 return ;
11060}
Jeff Johnson295189b2012-06-20 16:38:30 -070011061/*
11062 * FUNCTION: WDA_SetPowerParamsCallback
11063 *
11064 */
11065void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
11066{
Jeff Johnsone7245742012-09-05 17:12:55 -070011067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011068
11069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011070 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 if(NULL == pWdaParams)
11072 {
11073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011074 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 VOS_ASSERT(0) ;
11076 return ;
11077 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011078 if( pWdaParams != NULL )
11079 {
11080 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11081 {
11082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11083 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011084 if( pWdaParams->wdaMsgParam != NULL)
11085 {
11086 vos_mem_free(pWdaParams->wdaMsgParam);
11087 }
11088 vos_mem_free(pWdaParams) ;
11089 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011090 return ;
11091}
Jeff Johnson295189b2012-06-20 16:38:30 -070011092/*
11093 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11094 * Request to WDI to set Preferred Network List.Offload
11095 */
11096VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
11097 tSirPNOScanReq *pPNOScanReqParams)
11098{
Jeff Johnson43971f52012-07-17 12:26:56 -070011099 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
11101 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
11102 tWDA_ReqParams *pWdaParams ;
11103 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011105 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011106 if(NULL == pwdiPNOScanReqInfo)
11107 {
11108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011109 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011110 VOS_ASSERT(0);
11111 return VOS_STATUS_E_NOMEM;
11112 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011113 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11114 if(NULL == pWdaParams)
11115 {
11116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011118 VOS_ASSERT(0);
11119 vos_mem_free(pwdiPNOScanReqInfo);
11120 return VOS_STATUS_E_NOMEM;
11121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011122 //
11123 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
11124 //
11125 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
11126 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070011127 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
11128 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
11129 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011130 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
11131 {
11132 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
11133 &pPNOScanReqParams->aNetworks[i],
11134 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
11135 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011136 /*Scan timer intervals*/
11137 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
11138 &pPNOScanReqParams->scanTimers,
11139 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070011140 /*Probe template for 2.4GHz band*/
11141 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
11142 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11143 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011144 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
11145 pPNOScanReqParams->p24GProbeTemplate,
11146 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011147 /*Probe template for 5GHz band*/
11148 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
11149 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11150 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
11152 pPNOScanReqParams->p5GProbeTemplate,
11153 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011154 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011155
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 /* Store Params pass it to WDI */
11157 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
11158 pWdaParams->pWdaContext = pWDA;
11159 /* Store param pointer as passed in by caller */
11160 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011161 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
11162 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011163 if(IS_WDI_STATUS_FAILURE(status))
11164 {
11165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11166 "Failure in Set PNO REQ WDI API, free all the memory " );
11167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11168 vos_mem_free(pWdaParams->wdaMsgParam);
11169 pWdaParams->wdaWdiApiMsgParam = NULL;
11170 pWdaParams->wdaMsgParam = NULL;
11171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011172 return CONVERT_WDI2VOS_STATUS(status) ;
11173}
Jeff Johnson295189b2012-06-20 16:38:30 -070011174/*
11175 * FUNCTION: WDA_RssiFilterCallback
11176 *
11177 */
11178void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
11179{
11180 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11181
11182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011183 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011184
11185 VOS_ASSERT(NULL != pWdaParams);
11186
11187 vos_mem_free(pWdaParams->wdaMsgParam) ;
11188 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11189 vos_mem_free(pWdaParams) ;
11190
11191 return ;
11192}
11193/*
11194 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11195 * Request to WDI to set Preferred Network List.Offload
11196 */
11197VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
11198 tSirSetRSSIFilterReq* pRssiFilterParams)
11199{
Jeff Johnson43971f52012-07-17 12:26:56 -070011200 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
11202 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
11203 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011205 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011206 if(NULL == pwdiSetRssiFilterReqInfo)
11207 {
11208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011210 VOS_ASSERT(0);
11211 return VOS_STATUS_E_NOMEM;
11212 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011213 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11214 if(NULL == pWdaParams)
11215 {
11216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011218 VOS_ASSERT(0);
11219 vos_mem_free(pwdiSetRssiFilterReqInfo);
11220 return VOS_STATUS_E_NOMEM;
11221 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011222 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
11223 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011224
Jeff Johnson295189b2012-06-20 16:38:30 -070011225 /* Store Params pass it to WDI */
11226 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
11227 pWdaParams->pWdaContext = pWDA;
11228 /* Store param pointer as passed in by caller */
11229 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011230 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
11231 (WDI_PNOScanCb)WDA_RssiFilterCallback,
11232 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011233 if(IS_WDI_STATUS_FAILURE(status))
11234 {
11235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11236 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
11237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11238 vos_mem_free(pWdaParams->wdaMsgParam);
11239 pWdaParams->wdaWdiApiMsgParam = NULL;
11240 pWdaParams->wdaMsgParam = NULL;
11241 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011242 return CONVERT_WDI2VOS_STATUS(status) ;
11243}
11244
Jeff Johnson295189b2012-06-20 16:38:30 -070011245/*
11246 * FUNCTION: WDA_ProcessUpdateScanParams
11247 * Request to WDI to update Scan Parameters
11248 */
11249VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
11250 tSirUpdateScanParams *pUpdateScanParams)
11251{
Jeff Johnson43971f52012-07-17 12:26:56 -070011252 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011253 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
11254 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
11255 sizeof(WDI_UpdateScanParamsInfoType)) ;
11256 tWDA_ReqParams *pWdaParams ;
11257 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011259 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011260 if(NULL == wdiUpdateScanParamsInfoType)
11261 {
11262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011264 VOS_ASSERT(0);
11265 return VOS_STATUS_E_NOMEM;
11266 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011267 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11268 if ( NULL == pWdaParams )
11269 {
11270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011271 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011272 VOS_ASSERT(0);
11273 vos_mem_free(wdiUpdateScanParamsInfoType);
11274 return VOS_STATUS_E_NOMEM;
11275 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011276 //
11277 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11278 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11280 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11281 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11282 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11283 "sir struct %d wdi struct %d",
11284 pUpdateScanParams->b11dEnabled,
11285 pUpdateScanParams->b11dResolved,
11286 pUpdateScanParams->ucChannelCount,
11287 pUpdateScanParams->usPassiveMinChTime,
11288 pUpdateScanParams->usPassiveMaxChTime,
11289 pUpdateScanParams->usActiveMinChTime,
11290 pUpdateScanParams->usActiveMaxChTime,
11291 sizeof(tSirUpdateScanParams),
11292 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11293
Jeff Johnson295189b2012-06-20 16:38:30 -070011294 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11295 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011296 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11297 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11299 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011300 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11301 pUpdateScanParams->usActiveMaxChTime;
11302 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11303 pUpdateScanParams->usActiveMinChTime;
11304 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11305 pUpdateScanParams->usPassiveMaxChTime;
11306 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11307 pUpdateScanParams->usPassiveMinChTime;
11308
Jeff Johnson295189b2012-06-20 16:38:30 -070011309 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011310 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11311 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011312
Jeff Johnson295189b2012-06-20 16:38:30 -070011313 for ( i = 0; i <
11314 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11315 i++)
11316 {
11317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11318 "Update Scan Parameters channel: %d",
11319 pUpdateScanParams->aChannels[i]);
11320
11321 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11322 pUpdateScanParams->aChannels[i];
11323 }
11324
Jeff Johnson295189b2012-06-20 16:38:30 -070011325 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011326
Jeff Johnson295189b2012-06-20 16:38:30 -070011327 /* Store Params pass it to WDI */
11328 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11329 pWdaParams->pWdaContext = pWDA;
11330 /* Store param pointer as passed in by caller */
11331 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011332
Jeff Johnson295189b2012-06-20 16:38:30 -070011333
11334
11335 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11336 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11337 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011338 if(IS_WDI_STATUS_FAILURE(status))
11339 {
11340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11341 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11343 vos_mem_free(pWdaParams->wdaMsgParam);
11344 vos_mem_free(pWdaParams);
11345 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011346 return CONVERT_WDI2VOS_STATUS(status) ;
11347}
11348#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070011349#ifdef WLAN_FEATURE_PACKET_FILTERING
11350/*
11351 * FUNCTION: WDA_8023MulticastListReqCallback
11352 *
11353 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011354void WDA_8023MulticastListReqCallback(
11355 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11356 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011357{
11358 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011360 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011361 if(NULL == pWdaParams)
11362 {
11363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011364 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 VOS_ASSERT(0) ;
11366 return ;
11367 }
11368
11369 vos_mem_free(pWdaParams->wdaMsgParam) ;
11370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11371 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 //print a msg, nothing else to do
11373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11374 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011375 return ;
11376}
Jeff Johnson295189b2012-06-20 16:38:30 -070011377/*
11378 * FUNCTION: WDA_Process8023MulticastListReq
11379 * Request to WDI to add 8023 Multicast List
11380 */
11381VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11382 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11383{
Jeff Johnson43971f52012-07-17 12:26:56 -070011384 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011385 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11386 tWDA_ReqParams *pWdaParams ;
11387 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011389 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011390 pwdiFltPktSetMcListReqParamsType =
11391 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11392 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11393 ) ;
11394 if(NULL == pwdiFltPktSetMcListReqParamsType)
11395 {
11396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011397 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011398 return VOS_STATUS_E_NOMEM;
11399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11401 if(NULL == pWdaParams)
11402 {
11403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011404 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011405 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11406 return VOS_STATUS_E_NOMEM;
11407 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011408
Jeff Johnson295189b2012-06-20 16:38:30 -070011409 //
11410 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11411 //
11412 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011413 pRcvFltMcAddrList->ulMulticastAddrCnt;
11414
11415 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11416 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11417 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11418 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11419
Jeff Johnson295189b2012-06-20 16:38:30 -070011420 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11421 {
11422 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11423 &(pRcvFltMcAddrList->multicastAddr[i]),
11424 sizeof(tSirMacAddr));
11425 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011426 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011427
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 /* Store Params pass it to WDI */
11429 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11430 pWdaParams->pWdaContext = pWDA;
11431 /* Store param pointer as passed in by caller */
11432 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011433 status = WDI_8023MulticastListReq(
11434 pwdiFltPktSetMcListReqParamsType,
11435 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11436 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011437 if(IS_WDI_STATUS_FAILURE(status))
11438 {
11439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11440 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11441 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11442 vos_mem_free(pWdaParams->wdaMsgParam);
11443 vos_mem_free(pWdaParams);
11444 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 return CONVERT_WDI2VOS_STATUS(status) ;
11446}
Jeff Johnson295189b2012-06-20 16:38:30 -070011447/*
11448 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11449 *
11450 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011451void WDA_ReceiveFilterSetFilterReqCallback(
11452 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11453 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011454{
11455 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011457 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011459 if(NULL == pWdaParams)
11460 {
11461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011462 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011463 VOS_ASSERT(0) ;
11464 return ;
11465 }
11466
11467 vos_mem_free(pWdaParams->wdaMsgParam) ;
11468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11469 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011470 //print a msg, nothing else to do
11471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11472 "WDA_ReceiveFilterSetFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011473 return ;
11474}
Jeff Johnson295189b2012-06-20 16:38:30 -070011475/*
11476 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11477 * Request to WDI to set Receive Filters
11478 */
11479VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11480 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11481{
Jeff Johnson43971f52012-07-17 12:26:56 -070011482 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011483 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11484 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11485 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11486 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11487 tWDA_ReqParams *pWdaParams ;
11488 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011490 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11492 {
11493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011494 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 VOS_ASSERT(0);
11496 return VOS_STATUS_E_NOMEM;
11497 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11499 if(NULL == pWdaParams)
11500 {
11501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011502 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011503 VOS_ASSERT(0);
11504 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11505 return VOS_STATUS_E_NOMEM;
11506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011507 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11508 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11509 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11510 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011511 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11512 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11513
11514 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11515 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011516
11517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11518 "FID %d FT %d NParams %d CT %d",
11519 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11520 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11521 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11522 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011523 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11524 {
11525 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11526 &pRcvPktFilterCfg->paramsData[i],
11527 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11529 "Proto %d Comp Flag %d \n",
11530 pwdiSetRcvPktFilterReqParamsType->
11531 wdiPktFilterCfg.paramsData[i].protocolLayer,
11532 pwdiSetRcvPktFilterReqParamsType->
11533 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11535 "Data Offset %d Data Len %d\n",
11536 pwdiSetRcvPktFilterReqParamsType->
11537 wdiPktFilterCfg.paramsData[i].dataOffset,
11538 pwdiSetRcvPktFilterReqParamsType->
11539 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11541 "CData: %d:%d:%d:%d:%d:%d\n",
11542 pwdiSetRcvPktFilterReqParamsType->
11543 wdiPktFilterCfg.paramsData[i].compareData[0],
11544 pwdiSetRcvPktFilterReqParamsType->
11545 wdiPktFilterCfg.paramsData[i].compareData[1],
11546 pwdiSetRcvPktFilterReqParamsType->
11547 wdiPktFilterCfg.paramsData[i].compareData[2],
11548 pwdiSetRcvPktFilterReqParamsType->
11549 wdiPktFilterCfg.paramsData[i].compareData[3],
11550 pwdiSetRcvPktFilterReqParamsType->
11551 wdiPktFilterCfg.paramsData[i].compareData[4],
11552 pwdiSetRcvPktFilterReqParamsType->
11553 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11555 "MData: %d:%d:%d:%d:%d:%d\n",
11556 pwdiSetRcvPktFilterReqParamsType->
11557 wdiPktFilterCfg.paramsData[i].dataMask[0],
11558 pwdiSetRcvPktFilterReqParamsType->
11559 wdiPktFilterCfg.paramsData[i].dataMask[1],
11560 pwdiSetRcvPktFilterReqParamsType->
11561 wdiPktFilterCfg.paramsData[i].dataMask[2],
11562 pwdiSetRcvPktFilterReqParamsType->
11563 wdiPktFilterCfg.paramsData[i].dataMask[3],
11564 pwdiSetRcvPktFilterReqParamsType->
11565 wdiPktFilterCfg.paramsData[i].dataMask[4],
11566 pwdiSetRcvPktFilterReqParamsType->
11567 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011568 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011570 /* Store Params pass it to WDI */
11571 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11572 pWdaParams->pWdaContext = pWDA;
11573 /* Store param pointer as passed in by caller */
11574 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011575 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
11576 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterReqCallback,
11577 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011578 if(IS_WDI_STATUS_FAILURE(status))
11579 {
11580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11581 "Failure in SetFilter(),free all the memory,status %d ",status);
11582 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11583 vos_mem_free(pWdaParams->wdaMsgParam);
11584 vos_mem_free(pWdaParams);
11585 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011586 return CONVERT_WDI2VOS_STATUS(status) ;
11587}
Jeff Johnson295189b2012-06-20 16:38:30 -070011588/*
11589 * FUNCTION: WDA_FilterMatchCountReqCallback
11590 *
11591 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011592void WDA_FilterMatchCountReqCallback(
11593 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11594 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011595{
11596 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11597 tWDA_CbContext *pWDA;
11598 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11599 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11600 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11601 tANI_U8 i;
11602 vos_msg_t vosMsg;
11603
11604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011605 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011606 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11607
Jeff Johnsone7245742012-09-05 17:12:55 -070011608 if(NULL == pRcvFltPktMatchCntRsp)
11609 {
11610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011611 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011612 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011613 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011614 return ;
11615 }
11616
Jeff Johnson295189b2012-06-20 16:38:30 -070011617 if(NULL == pWdaParams)
11618 {
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011620 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011622 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011623 return ;
11624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011625 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11626 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011627 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11628 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11629
11630 /* Message Header */
11631 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11632 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11633
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011634 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011635
11636 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11637 {
11638 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11639 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11640 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011641 /* VOS message wrapper */
11642 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11643 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11644 vosMsg.bodyval = 0;
11645 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11646 {
11647 /* free the mem and return */
11648 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11649 }
11650
11651 vos_mem_free(pWdaParams->wdaMsgParam) ;
11652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11653 vos_mem_free(pWdaParams) ;
11654}
Jeff Johnson295189b2012-06-20 16:38:30 -070011655/*
11656 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11657 * Request to WDI to get PC Filter Match Count
11658 */
11659VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11660{
Jeff Johnson43971f52012-07-17 12:26:56 -070011661 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011662 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11663 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11664 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011666 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11668 {
11669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 VOS_ASSERT(0);
11672 return VOS_STATUS_E_NOMEM;
11673 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011674 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11675 if(NULL == pWdaParams)
11676 {
11677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011678 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011679 VOS_ASSERT(0);
11680 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11681 return VOS_STATUS_E_NOMEM;
11682 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011683
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11685
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011686 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11687 pRcvFltPktMatchRsp->bssId,
11688 sizeof(wpt_macAddr));
11689
Jeff Johnson295189b2012-06-20 16:38:30 -070011690 /* Store Params pass it to WDI */
11691 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11692 pWdaParams->pWdaContext = pWDA;
11693 /* Store param pointer as passed in by caller */
11694 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011695 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11696 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11697 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011698 if(IS_WDI_STATUS_FAILURE(status))
11699 {
11700 /* failure returned by WDI API */
11701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11702 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11704 vos_mem_free(pWdaParams) ;
11705 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11706 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11707 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011708 return CONVERT_WDI2VOS_STATUS(status) ;
11709}
Jeff Johnson295189b2012-06-20 16:38:30 -070011710/*
11711 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11712 *
11713 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011714void WDA_ReceiveFilterClearFilterReqCallback(
11715 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11716 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011717{
11718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011720 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011721/* WDA_VOS_ASSERT(NULL != pWdaParams); */
11722 if(NULL == pWdaParams)
11723 {
11724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011725 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011726 VOS_ASSERT(0) ;
11727 return ;
11728 }
11729
11730 vos_mem_free(pWdaParams->wdaMsgParam) ;
11731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11732 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011733 //print a msg, nothing else to do
11734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11735 "WDA_ReceiveFilterClearFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011736 return ;
11737}
Jeff Johnson295189b2012-06-20 16:38:30 -070011738/*
11739 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
11740 * Request to WDI to clear Receive Filters
11741 */
11742VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
11743 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
11744{
Jeff Johnson43971f52012-07-17 12:26:56 -070011745 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011746 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
11747 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
11748 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011750 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011751 if(NULL == pwdiRcvFltPktClearReqParamsType)
11752 {
11753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011755 VOS_ASSERT(0);
11756 return VOS_STATUS_E_NOMEM;
11757 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011758 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11759 if(NULL == pWdaParams)
11760 {
11761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011762 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011763 VOS_ASSERT(0);
11764 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
11765 return VOS_STATUS_E_NOMEM;
11766 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
11768 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070011769 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
11770 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
11771 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
11772 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011773
11774 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 /* Store Params pass it to WDI */
11776 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
11777 pWdaParams->pWdaContext = pWDA;
11778 /* Store param pointer as passed in by caller */
11779 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011780 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
11781 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterReqCallback,
11782 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011783 if(IS_WDI_STATUS_FAILURE(status))
11784 {
11785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11786 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
11787 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli8bb81f62013-02-05 11:39:32 -080011788 vos_mem_free(pWdaParams->wdaMsgParam);
11789 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011790 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011791 return CONVERT_WDI2VOS_STATUS(status) ;
11792}
11793#endif // WLAN_FEATURE_PACKET_FILTERING
11794
Jeff Johnson295189b2012-06-20 16:38:30 -070011795/*
11796 * FUNCTION: WDA_ProcessSetPowerParamsReq
11797 * Request to WDI to set power params
11798 */
11799VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
11800 tSirSetPowerParamsReq *pPowerParams)
11801{
Jeff Johnson43971f52012-07-17 12:26:56 -070011802 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011803 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
11804 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011805 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011807 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011808 if(NULL == pwdiSetPowerParamsReqInfo)
11809 {
11810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011811 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011812 VOS_ASSERT(0);
11813 return VOS_STATUS_E_NOMEM;
11814 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011815 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11816 if(NULL == pWdaParams)
11817 {
11818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011819 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011820 VOS_ASSERT(0);
11821 vos_mem_free(pwdiSetPowerParamsReqInfo);
11822 return VOS_STATUS_E_NOMEM;
11823 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011824
Jeff Johnson295189b2012-06-20 16:38:30 -070011825
11826 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
11827 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011828 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
11829 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070011830 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
11831 pPowerParams->uListenInterval;
11832 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
11833 pPowerParams->uBcastMcastFilter;
11834 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
11835 pPowerParams->uEnableBET;
11836 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
11837 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070011838 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011839
Jeff Johnson295189b2012-06-20 16:38:30 -070011840 /* Store Params pass it to WDI */
11841 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
11842 pWdaParams->pWdaContext = pWDA;
11843 /* Store param pointer as passed in by caller */
11844 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011845 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
11846 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
11847 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011848 if(IS_WDI_STATUS_FAILURE(status))
11849 {
11850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11851 "Failure in Set power params REQ WDI API, free all the memory " );
11852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11853 vos_mem_free(pWdaParams->wdaMsgParam);
11854 pWdaParams->wdaWdiApiMsgParam = NULL;
11855 pWdaParams->wdaMsgParam = NULL;
11856 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011857 return CONVERT_WDI2VOS_STATUS(status) ;
11858}
11859
11860/*
11861 * FUNCTION: WDA_SetTmLevelRspCallback
11862 * Set TM Level response
11863 */
11864void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
11865{
11866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11867
11868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011869 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011870
11871 if(NULL == pWdaParams)
11872 {
11873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011874 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011875 VOS_ASSERT(0) ;
11876 return ;
11877 }
11878
11879 /* Dose not need to send notification to upper layer
11880 * Just free allocated resources */
11881 if( pWdaParams != NULL )
11882 {
11883 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11884 {
11885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11886 }
11887 vos_mem_free(pWdaParams->wdaMsgParam) ;
11888 vos_mem_free(pWdaParams) ;
11889 }
11890}
11891
11892/*
11893 * FUNCTION: WDA_ProcessSetTmLevelReq
11894 * Set TM Level request
11895 */
11896VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
11897 tAniSetTmLevelReq *setTmLevelReq)
11898{
11899 WDI_Status status = WDI_STATUS_SUCCESS ;
11900 tWDA_ReqParams *pWdaParams ;
11901 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
11902 (WDI_SetTmLevelReqType *)vos_mem_malloc(
11903 sizeof(WDI_SetTmLevelReqType)) ;
11904 if(NULL == wdiSetTmLevelReq)
11905 {
11906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011908 VOS_ASSERT(0);
11909 return VOS_STATUS_E_NOMEM;
11910 }
11911
11912 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11913 if(NULL == pWdaParams)
11914 {
11915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011917 VOS_ASSERT(0);
11918 vos_mem_free(wdiSetTmLevelReq);
11919 return VOS_STATUS_E_NOMEM;
11920 }
11921
11922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011923 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011924
11925 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
11926 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
11927
11928 pWdaParams->pWdaContext = pWDA;
11929 pWdaParams->wdaMsgParam = setTmLevelReq;
11930 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
11931
11932 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
11933 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
11934
11935 if(IS_WDI_STATUS_FAILURE(status))
11936 {
11937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson1920a722012-12-10 14:28:09 -080011938 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070011939 vos_mem_free(pWdaParams->wdaMsgParam) ;
11940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11941 vos_mem_free(pWdaParams) ;
11942 }
11943
11944 return CONVERT_WDI2VOS_STATUS(status) ;
11945}
11946
11947VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
11948 tpTxControlParams pTxCtrlParam)
11949{
11950 VOS_STATUS wdaStatus;
11951
11952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011953 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011954 if( pTxCtrlParam == NULL )
11955 {
11956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011957 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011958 return VOS_STATUS_E_FAILURE;
11959 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011960 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
11961 {
11962 wdaStatus = WDA_SuspendDataTx(pWDA);
11963 }
11964 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
11965 {
11966 wdaStatus = WDA_ResumeDataTx(pWDA);
11967 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011968 return wdaStatus;
11969}
11970
11971 /* FUNCTION WDA_featureCapsExchange
11972 * WDA API to invoke capability exchange between host and FW.
11973 */
11974void WDA_featureCapsExchange(v_PVOID_t pVosContext)
11975{
11976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011977 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011978 WDI_featureCapsExchangeReq( NULL, pVosContext);
11979}
11980
Yathishd8713192012-12-10 14:21:35 -080011981/* FUNCTION WDA_disableCapablityFeature
11982 * WDA API to diable Active mode offload in host.
11983 */
11984void WDA_disableCapablityFeature(tANI_U8 feature_index)
11985{
11986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11987 "%s:enter", __func__ );
11988 WDI_disableCapablityFeature(feature_index);
11989}
11990
Jeff Johnson295189b2012-06-20 16:38:30 -070011991 /* FUNCTION WDA_getHostWlanFeatCaps
11992 * Wrapper for WDI API, that will return if the feature (enum value).passed
11993 * to this API is supported or not in Host
11994 * return value
11995 * 0 - implies feature is NOT Supported
11996 * any non zero value - implies feature is SUPPORTED
11997 */
11998tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
11999{
12000 return WDI_getHostWlanFeatCaps(featEnumValue);
12001}
12002
12003 /* FUNCTION WDA_getFwWlanFeatCaps
12004 * Wrapper for WDI API, that will return if the feature (enum value).passed
12005 * to this API is supported or not in FW
12006 * return value
12007 * 0 - implies feature is NOT Supported
12008 * any non zero value - implies feature is SUPPORTED
12009 */
12010tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
12011{
12012 return WDI_getFwWlanFeatCaps(featEnumValue);
12013}
12014
12015/*
12016 * FUNCTION: WDA_shutdown
12017 * Shutdown WDA/WDI without handshaking with Riva.
12018 * Synchronous function.
12019 */
12020VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
12021{
12022 WDI_Status wdiStatus;
12023 //tANI_U8 eventIdx = 0;
12024 VOS_STATUS status = VOS_STATUS_SUCCESS;
12025 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012026 if (NULL == pWDA)
12027 {
12028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012029 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012030 VOS_ASSERT(0);
12031 return VOS_STATUS_E_FAILURE;
12032 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012033 /* FTM mode stay START_STATE */
12034 if( (WDA_READY_STATE != pWDA->wdaState) &&
12035 (WDA_INIT_STATE != pWDA->wdaState) &&
12036 (WDA_START_STATE != pWDA->wdaState) )
12037 {
12038 VOS_ASSERT(0);
12039 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012040
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012041 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
12042 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 {
12044 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012045 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012046 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012047
Jeff Johnson295189b2012-06-20 16:38:30 -070012048 /* call WDI shutdown */
12049 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070012050 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
12051 {
12052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12053 "error in WDA Stop" );
12054 status = VOS_STATUS_E_FAILURE;
12055 }
12056 /* WDI stop is synchrnous, shutdown is complete when it returns */
12057 pWDA->wdaState = WDA_STOP_STATE;
12058
Jeff Johnson295189b2012-06-20 16:38:30 -070012059 /* shutdown should perform the stop & close actions. */
12060 /* Destroy the event */
12061 status = vos_event_destroy(&pWDA->txFrameEvent);
12062 if(!VOS_IS_STATUS_SUCCESS(status))
12063 {
12064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12065 "VOS Event destroy failed - status = %d\n", status);
12066 status = VOS_STATUS_E_FAILURE;
12067 }
12068 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
12069 if(!VOS_IS_STATUS_SUCCESS(status))
12070 {
12071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12072 "VOS Event destroy failed - status = %d\n", status);
12073 status = VOS_STATUS_E_FAILURE;
12074 }
12075 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
12076 if(!VOS_IS_STATUS_SUCCESS(status))
12077 {
12078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12079 "VOS Event destroy failed - status = %d\n", status);
12080 status = VOS_STATUS_E_FAILURE;
12081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012082 /* free WDA context */
12083 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
12084 if ( !VOS_IS_STATUS_SUCCESS(status) )
12085 {
12086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12087 "error in WDA close " );
12088 status = VOS_STATUS_E_FAILURE;
12089 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012090 return status;
12091}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012092
Jeff Johnsone7245742012-09-05 17:12:55 -070012093/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012094 * FUNCTION: WDA_setNeedShutdown
12095 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070012096 */
12097
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012098void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070012099{
12100 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012101 if(pWDA == NULL)
12102 {
12103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12104 "Could not get the WDA Context pointer" );
12105 return;
12106 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012107 pWDA->needShutdown = TRUE;
12108}
12109/*
12110 * FUNCTION: WDA_needShutdown
12111 * WDA needs a shutdown
12112 */
12113
12114v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
12115{
12116 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012117 if(pWDA == NULL)
12118 {
12119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12120 "Could not get the WDA Context pointer" );
12121 return 0;
12122 }
12123 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070012124}
12125
Mohit Khanna4a70d262012-09-11 16:30:12 -070012126#ifdef WLAN_FEATURE_11AC
12127/*
12128 * FUNCTION: WDA_SetBeaconFilterReqCallback
12129 *
12130 */
12131void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
12132{
12133 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012135 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012136 if(NULL == pWdaParams)
12137 {
12138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012139 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012140 VOS_ASSERT(0) ;
12141 return ;
12142 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012143
Mohit Khanna4a70d262012-09-11 16:30:12 -070012144 vos_mem_free(pWdaParams->wdaMsgParam) ;
12145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12146 vos_mem_free(pWdaParams) ;
12147 /*
12148 * No respone required for SetBeaconFilter req so just free the request
12149 * param here
12150 */
12151
12152 return ;
12153}
12154
12155VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
12156 tUpdateVHTOpMode *pData)
12157{
12158 WDI_Status status = WDI_STATUS_SUCCESS ;
12159 tWDA_ReqParams *pWdaParams ;
12160 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
12161 sizeof(WDI_UpdateVHTOpMode)) ;
12162 if(NULL == wdiTemp)
12163 {
12164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012165 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012166 VOS_ASSERT(0);
12167 return VOS_STATUS_E_NOMEM;
12168 }
12169 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12170 if(NULL == pWdaParams)
12171 {
12172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012173 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012174 VOS_ASSERT(0);
12175 vos_mem_free(wdiTemp);
12176 return VOS_STATUS_E_NOMEM;
12177 }
12178
12179 wdiTemp->opMode = pData->opMode;
12180 wdiTemp->staId = pData->staId;
12181
12182 pWdaParams->pWdaContext = pWDA;
12183 /* Store Req pointer, as this will be used for response */
12184 pWdaParams->wdaMsgParam = (void *)pData;
12185 /* store Params pass it to WDI */
12186 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
12187
12188 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
12189
12190 if(IS_WDI_STATUS_FAILURE(status))
12191 {
12192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12193 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
12194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12195 vos_mem_free(pWdaParams->wdaMsgParam);
12196 vos_mem_free(pWdaParams);
12197 }
12198 return CONVERT_WDI2VOS_STATUS(status) ;
12199}
12200#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012201
12202/*==========================================================================
12203 FUNCTION WDA_TransportChannelDebug
12204
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070012205 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012206 Display Transport Channel debugging information
12207 User may request to display DXE channel snapshot
12208 Or if host driver detects any abnormal stcuk may display
12209
12210 PARAMETERS
Jeff Johnsonbf9616f2012-12-10 13:34:59 -080012211 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012212 enableStallDetect : Enable stall detect feature
12213 This feature will take effect to data performance
12214 Not integrate till fully verification
12215
12216 RETURN VALUE
12217 NONE
12218
12219===========================================================================*/
12220void WDA_TransportChannelDebug
12221(
12222 v_BOOL_t displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012223 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012224)
12225{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012226 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012227 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012228}