blob: 0cddfa02ee94e61a2dd6ee825669cffb118ce99e [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#if defined( FEATURE_WLAN_INTEGRATED_SOC )
Jeff Johnson295189b2012-06-20 16:38:30 -070070#include "vos_mq.h"
71#include "vos_api.h"
72#include "vos_packet.h"
73#include "vos_nvitem.h"
74#include "sirApi.h"
75#include "wlan_qct_pal_packet.h"
76#include "wlan_qct_wda.h"
77#include "wlan_qct_wda_msg.h"
78#include "wlan_qct_wdi_cfg.h"
79#include "wlan_qct_wdi.h"
80#include "wlan_qct_wdi_ds.h"
81#include "wlan_hal_cfg.h"
82/**********************/
83#include "wniApi.h"
84#include "cfgApi.h"
85#include "limApi.h"
86#include "wlan_qct_tl.h"
87#include "wlan_qct_tli_ba.h"
88#include "limUtils.h"
89#include "btcApi.h"
90#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070091#ifdef ANI_MANF_DIAG
92#include "pttMsgApi.h"
93#include "wlan_qct_sys.h"
94#endif /* ANI_MANF_DIAG */
Jeff Johnson295189b2012-06-20 16:38:30 -070095/* Used MACRO's */
96/* Get WDA context from vOSS module */
97#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
98#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
99#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
100#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -0700101#define CONVERT_WDI2SIR_STATUS(x) \
102 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
103
104#define IS_WDI_STATUS_FAILURE(status) \
105 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700106#define CONVERT_WDI2VOS_STATUS(x) \
107 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
108
109/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700110#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700112#define WDA_GET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
114
115#define WDA_SET_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
117
118#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
119 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
121 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700122/* timer related Macros */
123#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
124 tx_timer_create(a, b, c, d, e, f, g)
125#define WDA_START_TIMER(a) tx_timer_activate(a)
126#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
127#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700128#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129
130#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
131 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700133#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700134#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700135#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800136#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700137
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700138#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700139
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700140#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700141#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
142 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
143 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
144
145#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
146#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800147#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
148
Jeff Johnson295189b2012-06-20 16:38:30 -0700149/* extern declarations */
150extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -0700151/* forward declarations */
152void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
153 void *pBodyptr, tANI_U32 bodyVal) ;
154VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
155 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700156VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
157VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
158
159extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
160 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
161void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
162 tANI_U32 *pConfig) ;
163void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
164 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
165void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
166 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
167void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
168 void* pUserData ) ;
169static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
170static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
171void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800172void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700174#ifdef WLAN_FEATURE_VOWIFI_11R
175VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
176#endif /* WLAN_FEATURE_VOWIFI_11R */
177
Jeff Johnson295189b2012-06-20 16:38:30 -0700178void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
179void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
180VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700181#ifdef FEATURE_WLAN_SCAN_PNO
182static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
183static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
184static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
185#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -0700186#ifdef WLAN_FEATURE_PACKET_FILTERING
187static VOS_STATUS WDA_Process8023MulticastListReq (
188 tWDA_CbContext *pWDA,
189 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
190 );
191static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
192 tWDA_CbContext *pWDA,
193 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
194 );
195static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
196 tWDA_CbContext *pWDA,
197 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
198 );
199static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
200 tWDA_CbContext *pWDA,
201 tSirRcvFltPktClearParam *pRcvFltPktClearParam
202 );
203#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700204VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700205static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
206 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700207VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
208 v_U8_t *pDefaultKeyId,
209 v_U8_t *pNumKeys,
210 WDI_KeysType *pWdiKeys );
211
212#ifdef WLAN_FEATURE_GTK_OFFLOAD
213static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
214static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
215#endif // WLAN_FEATURE_GTK_OFFLOAD
216
217VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
218 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700219#ifdef WLAN_FEATURE_11AC
220VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
221 tUpdateVHTOpMode *pData);
222#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700223/*
224 * FUNCTION: WDA_open
225 * Allocate the WDA context
226 */
227VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
228 tMacOpenParameters *pMacParams )
229{
230 tWDA_CbContext *wdaContext;
231 VOS_STATUS status;
232 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700233 /* Allocate WDA context */
234 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
235 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
236 if(!VOS_IS_STATUS_SUCCESS(status))
237 {
238 return VOS_STATUS_E_NOMEM;
239 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700240 /*__asm int 3;*/
241 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
242
243 /* Initialize data structures */
244 wdaContext->pVosContext = pVosContext;
245 wdaContext->wdaState = WDA_INIT_STATE;
246 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
247
248 /* Initialize WDA-WDI synchronization event */
249 status = vos_event_init(&wdaContext->wdaWdiEvent);
250 if(!VOS_IS_STATUS_SUCCESS(status))
251 {
252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
253 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800254 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700255 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700256 /* Init Frame transfer event */
257 status = vos_event_init(&wdaContext->txFrameEvent);
258 if(!VOS_IS_STATUS_SUCCESS(status))
259 {
260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
261 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800262 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700263 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700264 status = vos_event_init(&wdaContext->suspendDataTxEvent);
265 if(!VOS_IS_STATUS_SUCCESS(status))
266 {
267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
268 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800269 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700270 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700271 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
272 if(!VOS_IS_STATUS_SUCCESS(status))
273 {
274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
275 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800276 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700277 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700278 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700279 wdaContext->driverMode = pMacParams->driverType;
280 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
281 &wdiDevCapability, pMacParams->driverType))
282 {
283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
284 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800285 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700286 }
287 else
288 {
289 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
290 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
291 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700292 /* update max STA in WDA used for BA */
293 wdaContext->wdaMaxSta = pMacParams->maxStation;
294 /* store the frameTransRequired flag in wdaContext, to send this to HAL
295 * in WDA_Start
296 */
297 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
298 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700299 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800300
301error:
302 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
303 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700304}
305
Jeff Johnson295189b2012-06-20 16:38:30 -0700306/*
307 * FUNCTION: WDA_preStart
308 * Trigger DAL-AL to start CFG download
309 */
310VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
311{
312 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
313 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700314 /*
315 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
316 */
317 wdaMsg.type = WNI_CFG_DNLD_REQ ;
318 wdaMsg.bodyptr = NULL;
319 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 /* post the message.. */
321 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
322 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
323 {
324 vosStatus = VOS_STATUS_E_BADMSG;
325 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700326 return( vosStatus );
327}
Jeff Johnson295189b2012-06-20 16:38:30 -0700328/*
329 * FUNCTION: WDA_wdiStartCallback
330 * Once WDI_Start is finished, WDI start callback will be called by WDI
331 * to indicate completion of WDI_Start.
332 */
333void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
334 void *pVosContext)
335{
336 tWDA_CbContext *wdaContext;
337 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700338 if (NULL == pVosContext)
339 {
340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700341 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700342 return;
343 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700344 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
345 if (NULL == wdaContext)
346 {
347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700348 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700349 return;
350 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700351 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
352 {
353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700354 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700355 }
356 else
357 {
358 wdaContext->wdaState = WDA_START_STATE;
359 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700360 /* extract and save version information from the Start Response */
361 wdaContext->wcnssWlanCompiledVersion.major =
362 wdiRspParams->wlanCompiledVersion.major;
363 wdaContext->wcnssWlanCompiledVersion.minor =
364 wdiRspParams->wlanCompiledVersion.minor;
365 wdaContext->wcnssWlanCompiledVersion.version =
366 wdiRspParams->wlanCompiledVersion.version;
367 wdaContext->wcnssWlanCompiledVersion.revision =
368 wdiRspParams->wlanCompiledVersion.revision;
369 wdaContext->wcnssWlanReportedVersion.major =
370 wdiRspParams->wlanReportedVersion.major;
371 wdaContext->wcnssWlanReportedVersion.minor =
372 wdiRspParams->wlanReportedVersion.minor;
373 wdaContext->wcnssWlanReportedVersion.version =
374 wdiRspParams->wlanReportedVersion.version;
375 wdaContext->wcnssWlanReportedVersion.revision =
376 wdiRspParams->wlanReportedVersion.revision;
377 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
378 wdiRspParams->wcnssSoftwareVersion,
379 sizeof(wdaContext->wcnssSoftwareVersionString));
380 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
381 wdiRspParams->wcnssHardwareVersion,
382 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 /* Notify WDA_start that WDI_Start has completed */
384 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700385 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700386 {
387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700388 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 return;
391}
392
Jeff Johnson295189b2012-06-20 16:38:30 -0700393/*
394 * FUNCTION: WDA_start
395 * Prepare TLV configuration and call WDI_Start.
396 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700397VOS_STATUS WDA_start(v_PVOID_t pVosContext)
398{
399 tWDA_CbContext *wdaContext;
400 VOS_STATUS status;
401 WDI_Status wdiStatus;
402 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700403 if (NULL == pVosContext)
404 {
405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700406 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700407 return VOS_STATUS_E_FAILURE;
408 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
410 if (NULL == wdaContext)
411 {
412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700413 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 return VOS_STATUS_E_FAILURE;
415 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 /* Non-FTM mode, WDA status for START must be INIT
417 * FTM mode, WDA Status for START can be INIT or STOP */
418 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
419 (WDA_STOP_STATE != wdaContext->wdaState) )
420 {
421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
422 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700423 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 return VOS_STATUS_E_FAILURE;
425 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 /* initialize the wdiStartParam. Note that we can create this on
427 the stack since we won't exit until WDI_Start() completes or
428 times out */
429 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 /* prepare the config TLV for the WDI */
432 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
433 if ( !VOS_IS_STATUS_SUCCESS(status) )
434 {
435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700436 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700437 return VOS_STATUS_E_FAILURE;
438 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 /* note from here onwards if an error occurs we must
440 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
442 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
443 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 /* initialize the WDA-WDI synchronization event */
445 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 /* call WDI start */
447 wdiStatus = WDI_Start(&wdiStartParam,
448 (WDI_StartRspCb)WDA_wdiStartCallback,
449 (v_VOID_t *)pVosContext);
450 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
451 {
452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700453 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 vos_mem_free(wdiStartParam.pConfigBuffer);
455 return VOS_STATUS_E_FAILURE;
456 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700457 /* wait for WDI start to invoke our callback */
458 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
459 WDA_WDI_START_TIMEOUT );
460 if ( !VOS_IS_STATUS_SUCCESS(status) )
461 {
462 if ( VOS_STATUS_E_TIMEOUT == status )
463 {
464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700465 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700466 }
467 else
468 {
469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
470 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700471 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700472 }
473 vos_mem_free(wdiStartParam.pConfigBuffer);
474 return VOS_STATUS_E_FAILURE;
475 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 /* we no longer need the config TLV */
478 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700479 /* if we are not in the START state then WDI_Start() failed */
480 if (WDA_START_STATE != wdaContext->wdaState)
481 {
482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700483 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700484 return VOS_STATUS_E_FAILURE;
485 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 /* FTM mode does not need to monitor BA activity */
487 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
488 {
489 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800490 if(VOS_STATUS_SUCCESS == status)
491 {
492 wdaContext->wdaTimersCreated = VOS_TRUE;
493 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 return status;
496}
497
Jeff Johnson295189b2012-06-20 16:38:30 -0700498/*
499 * FUNCTION: WDA_prepareConfigTLV
500 * Function to prepare CFG for DAL(WDA)
501 */
502VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
503 WDI_StartReqParamsType *wdiStartParams )
504{
505 /* get pMac to acess CFG data base */
506 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
507 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
508 tHalCfg *tlvStruct = NULL ;
509 tANI_U8 *tlvStructStart = NULL ;
510 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
511 v_PVOID_t *configParam;
512 tANI_U32 configParamSize;
513 tANI_U32 *configDataValue;
514 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 if ((NULL == pMac)||(NULL == wdaContext))
516 {
517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700518 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 VOS_ASSERT(0);
520 return VOS_STATUS_E_FAILURE;
521 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700522 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
523 WNI_CFG_STA_ID_LEN +
524 WNI_CFG_EDCA_WME_ACBK_LEN +
525 WNI_CFG_EDCA_WME_ACBE_LEN +
526 WNI_CFG_EDCA_WME_ACVI_LEN +
527 WNI_CFG_EDCA_WME_ACVO_LEN +
528 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700529 /* malloc memory for all configs in one shot */
530 configParam = vos_mem_malloc(configParamSize);
531
532 if(NULL == configParam )
533 {
534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700535 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 VOS_ASSERT(0) ;
537 return VOS_STATUS_E_NOMEM;
538 }
539 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 tlvStruct = (tHalCfg *)configParam;
542 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 /* TODO: Remove Later */
544 /* QWLAN_HAL_CFG_STA_ID */
545 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
546 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
547 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
548 eSIR_SUCCESS)
549 {
550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
551 "Failed to get value for WNI_CFG_STA_ID");
552 goto handle_failure;
553 }
554 tlvStruct->length = strLength ;
555 /* calculate the pad bytes to have the CFG in aligned format */
556 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
557 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700558 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
559 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
561 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
562 tlvStruct->length = sizeof(tANI_U32);
563 configDataValue = (tANI_U32 *)(tlvStruct + 1);
564 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
565 != eSIR_SUCCESS)
566 {
567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
568 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
569 goto handle_failure;
570 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700571 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
572 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700573 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
574 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
575 tlvStruct->length = sizeof(tANI_U32);
576 configDataValue = (tANI_U32 *)(tlvStruct + 1);
577 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
578 eSIR_SUCCESS)
579 {
580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
581 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
582 goto handle_failure;
583 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700584 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
585 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700586 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
587 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
588 tlvStruct->length = sizeof(tANI_U32);
589 configDataValue = (tANI_U32 *)(tlvStruct + 1);
590 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
591 != eSIR_SUCCESS)
592 {
593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
594 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
595 goto handle_failure;
596 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700597 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
598 + sizeof(tHalCfg) + tlvStruct->length)) ;
599
600 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
601 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
602 tlvStruct->length = sizeof(tANI_U32);
603 configDataValue = (tANI_U32 *)(tlvStruct + 1);
604 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
605 configDataValue ) != eSIR_SUCCESS)
606 {
607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
608 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
609 goto handle_failure;
610 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
612 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 /* QWLAN_HAL_CFG_CAL_PERIOD */
614 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
615 tlvStruct->length = sizeof(tANI_U32);
616 configDataValue = (tANI_U32 *)(tlvStruct + 1);
617 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
618 != eSIR_SUCCESS)
619 {
620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
621 "Failed to get value for WNI_CFG_CAL_PERIOD");
622 goto handle_failure;
623 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700624 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
625 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700626 /* QWLAN_HAL_CFG_CAL_CONTROL */
627 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
628 tlvStruct->length = sizeof(tANI_U32);
629 configDataValue = (tANI_U32 *)(tlvStruct + 1);
630 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
631 != eSIR_SUCCESS)
632 {
633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
634 "Failed to get value for WNI_CFG_CAL_CONTROL");
635 goto handle_failure;
636 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700637 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
638 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700639 /* QWLAN_HAL_CFG_PROXIMITY */
640 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
641 tlvStruct->length = sizeof(tANI_U32);
642 configDataValue = (tANI_U32 *)(tlvStruct + 1);
643 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
644 != eSIR_SUCCESS)
645 {
646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
647 "Failed to get value for WNI_CFG_PROXIMITY");
648 goto handle_failure;
649 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700650 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
651 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
653 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
654 tlvStruct->length = sizeof(tANI_U32);
655 configDataValue = (tANI_U32 *)(tlvStruct + 1);
656 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
657 != eSIR_SUCCESS)
658 {
659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
660 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
661 goto handle_failure;
662 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700663 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
664 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700665 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
666 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
667 tlvStruct->length = sizeof(tANI_U32);
668 configDataValue = (tANI_U32 *)(tlvStruct + 1);
669 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
670 eSIR_SUCCESS)
671 {
672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
673 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
674 goto handle_failure;
675 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700676 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
677 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
679 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
680 tlvStruct->length = sizeof(tANI_U32);
681 configDataValue = (tANI_U32 *)(tlvStruct + 1);
682 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
683 configDataValue ) != eSIR_SUCCESS)
684 {
685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
686 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
687 goto handle_failure;
688 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700689 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
690 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700691 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
692 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
693 tlvStruct->length = sizeof(tANI_U32);
694 configDataValue = (tANI_U32 *)(tlvStruct + 1);
695 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
696 eSIR_SUCCESS)
697 {
698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
699 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
700 goto handle_failure;
701 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700702 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
703 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700704 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
705 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
706 tlvStruct->length = sizeof(tANI_U32);
707 configDataValue = (tANI_U32 *)(tlvStruct + 1);
708 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
709 eSIR_SUCCESS)
710 {
711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
712 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
713 goto handle_failure;
714 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700715 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
716 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700717 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
718 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
719 tlvStruct->length = sizeof(tANI_U32);
720 configDataValue = (tANI_U32 *)(tlvStruct + 1);
721 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
722 eSIR_SUCCESS)
723 {
724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
725 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
726 goto handle_failure;
727 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700728 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
729 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700730 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
731 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
732 tlvStruct->length = sizeof(tANI_U32);
733 configDataValue = (tANI_U32 *)(tlvStruct + 1);
734 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
735 configDataValue ) != eSIR_SUCCESS)
736 {
737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
738 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
739 goto handle_failure;
740 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700741 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
742 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700743 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
744 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
745 tlvStruct->length = sizeof(tANI_U32);
746 configDataValue = (tANI_U32 *)(tlvStruct + 1);
747 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
748 configDataValue ) != eSIR_SUCCESS)
749 {
750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
751 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
752 goto handle_failure;
753 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700754 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
755 + sizeof(tHalCfg) + tlvStruct->length));
756
757 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
758 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
759 tlvStruct->length = sizeof(tANI_U32);
760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
761 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
762 configDataValue ) != eSIR_SUCCESS)
763 {
764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
765 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
766 goto handle_failure;
767 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700768 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
769 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700770 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
771 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
772 tlvStruct->length = sizeof(tANI_U32);
773 configDataValue = (tANI_U32 *)(tlvStruct + 1);
774 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
775 configDataValue ) != eSIR_SUCCESS)
776 {
777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
778 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
779 goto handle_failure;
780 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700781 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
782 + sizeof(tHalCfg) + tlvStruct->length));
783
784 /* QWLAN_HAL_CFG_FIXED_RATE */
785 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
786 tlvStruct->length = sizeof(tANI_U32);
787 configDataValue = (tANI_U32 *)(tlvStruct + 1);
788 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
789 != eSIR_SUCCESS)
790 {
791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
792 "Failed to get value for WNI_CFG_FIXED_RATE");
793 goto handle_failure;
794 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700795 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
796 + sizeof(tHalCfg) + tlvStruct->length));
797
798 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
799 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
800 tlvStruct->length = sizeof(tANI_U32);
801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
802 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
803 != eSIR_SUCCESS)
804 {
805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
806 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
807 goto handle_failure;
808 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700809 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
810 + sizeof(tHalCfg) + tlvStruct->length));
811
812 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
813 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
814 tlvStruct->length = sizeof(tANI_U32);
815 configDataValue = (tANI_U32 *)(tlvStruct + 1);
816 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
817 configDataValue ) != eSIR_SUCCESS)
818 {
819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
820 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
821 goto handle_failure;
822 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700823 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
824 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
826 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
827 tlvStruct->length = sizeof(tANI_U32);
828 configDataValue = (tANI_U32 *)(tlvStruct + 1);
829 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
830 configDataValue ) != eSIR_SUCCESS)
831 {
832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
833 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
834 goto handle_failure;
835 }
836 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
837 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700838 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
839 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
840 tlvStruct->length = sizeof(tANI_U32);
841 configDataValue = (tANI_U32 *)(tlvStruct + 1);
842 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
843 configDataValue ) != eSIR_SUCCESS)
844 {
845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
846 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
847 goto handle_failure;
848 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700849 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
850 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700851 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
852 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
853 tlvStruct->length = sizeof(tANI_U32);
854 configDataValue = (tANI_U32 *)(tlvStruct + 1);
855 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
856 configDataValue ) != eSIR_SUCCESS)
857 {
858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
859 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
860 goto handle_failure;
861 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700862 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
863 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700864 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
865 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
866 tlvStruct->length = sizeof(tANI_U32);
867 configDataValue = (tANI_U32 *)(tlvStruct + 1);
868 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
869 configDataValue ) != eSIR_SUCCESS)
870 {
871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
872 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
873 goto handle_failure;
874 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700875 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
876 + sizeof(tHalCfg) + tlvStruct->length);
877
878#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
879 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
880 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
881 tlvStruct->length = sizeof(tANI_U32);
882 configDataValue = (tANI_U32 *)(tlvStruct + 1);
883 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
884 configDataValue ) != eSIR_SUCCESS)
885 {
886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
887 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
888 goto handle_failure;
889 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700890 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
891 + sizeof(tHalCfg) + tlvStruct->length);
892#endif
893 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
894 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
895 tlvStruct->length = sizeof(tANI_U32);
896 configDataValue = (tANI_U32 *)(tlvStruct + 1);
897 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
898 configDataValue ) != eSIR_SUCCESS)
899 {
900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
901 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
902 goto handle_failure;
903 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700904 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
905 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
907 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
908 tlvStruct->length = sizeof(tANI_U32);
909 configDataValue = (tANI_U32 *)(tlvStruct + 1);
910 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
911 eSIR_SUCCESS)
912 {
913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
914 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
915 goto handle_failure;
916 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700917 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
918 + sizeof(tHalCfg) + tlvStruct->length);
919
920 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
921 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
922 tlvStruct->length = sizeof(tANI_U32);
923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
924 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
925 configDataValue ) != eSIR_SUCCESS)
926 {
927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
928 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
929 goto handle_failure;
930 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700931 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
932 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
934 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
935 tlvStruct->length = sizeof(tANI_U32);
936 configDataValue = (tANI_U32 *)(tlvStruct + 1);
937 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
938 configDataValue ) != eSIR_SUCCESS)
939 {
940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
941 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
942 goto handle_failure;
943 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700944 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
945 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
947 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
948 tlvStruct->length = sizeof(tANI_U32);
949 configDataValue = (tANI_U32 *)(tlvStruct + 1);
950 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
951 configDataValue ) != eSIR_SUCCESS)
952 {
953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
954 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
955 goto handle_failure;
956 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700957 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
958 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700959 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
960 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
961 tlvStruct->length = sizeof(tANI_U32);
962 configDataValue = (tANI_U32 *)(tlvStruct + 1);
963 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
964 configDataValue ) != eSIR_SUCCESS)
965 {
966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
967 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
968 goto handle_failure;
969 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700970 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
971 + sizeof(tHalCfg) + tlvStruct->length);
972
973 /* QWLAN_HAL_CFG_STATS_PERIOD */
974 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
975 tlvStruct->length = sizeof(tANI_U32);
976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
977 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
978 eSIR_SUCCESS)
979 {
980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
981 "Failed to get value for WNI_CFG_STATS_PERIOD");
982 goto handle_failure;
983 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700984 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
985 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
987 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
988 tlvStruct->length = sizeof(tANI_U32);
989 configDataValue = (tANI_U32 *)(tlvStruct + 1);
990 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
991 eSIR_SUCCESS)
992 {
993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
994 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
995 goto handle_failure;
996 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700997 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
998 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700999 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1000 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1001 tlvStruct->length = sizeof(tANI_U32);
1002 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1003 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1004 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001005 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1006 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001007 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1008 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1009 tlvStruct->length = sizeof(tANI_U32);
1010 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1011 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1012 != eSIR_SUCCESS)
1013 {
1014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1015 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1016 goto handle_failure;
1017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001018 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1019 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001020 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1021 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1022 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1023 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1024 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1025 &strLength) != eSIR_SUCCESS)
1026 {
1027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1028 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1029 goto handle_failure;
1030 }
1031 tlvStruct->length = strLength;
1032 /* calculate the pad bytes to have the CFG in aligned format */
1033 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1034 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001035 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1036 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001037 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1038 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1039 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1040 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1041 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1042 &strLength) != eSIR_SUCCESS)
1043 {
1044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1045 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1046 goto handle_failure;
1047 }
1048 tlvStruct->length = strLength;
1049 /* calculate the pad bytes to have the CFG in aligned format */
1050 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1051 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001052 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1053 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1055 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1056 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1057 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1058 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1059 &strLength) != eSIR_SUCCESS)
1060 {
1061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1062 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1063 goto handle_failure;
1064 }
1065 tlvStruct->length = strLength;
1066 /* calculate the pad bytes to have the CFG in aligned format */
1067 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1068 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1070 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1072 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1073 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1074 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1075 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1076 &strLength) != eSIR_SUCCESS)
1077 {
1078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1079 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1080 goto handle_failure;
1081 }
1082 tlvStruct->length = strLength;
1083 /* calculate the pad bytes to have the CFG in aligned format */
1084 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1085 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001086 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1087 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001088 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1089 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1090 tlvStruct->length = sizeof(tANI_U32);
1091 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1092 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1093 != eSIR_SUCCESS)
1094 {
1095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1096 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1097 goto handle_failure;
1098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001099 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1100 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001101 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1102 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1103 tlvStruct->length = sizeof(tANI_U32);
1104 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1105 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1106 != eSIR_SUCCESS)
1107 {
1108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1109 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1110 goto handle_failure;
1111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001112 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1113 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001114 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1115 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1116 tlvStruct->length = sizeof(tANI_U32);
1117 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1118 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1119 != eSIR_SUCCESS)
1120 {
1121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1122 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1123 goto handle_failure;
1124 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001125 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1126 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001127 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1128 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1129 tlvStruct->length = sizeof(tANI_U32);
1130 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1131 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1132 != eSIR_SUCCESS)
1133 {
1134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1135 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1136 goto handle_failure;
1137 }
1138 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1139 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001140 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1141 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1142 tlvStruct->length = sizeof(tANI_U32);
1143 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1144 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1145 != eSIR_SUCCESS)
1146 {
1147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1148 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1149 goto handle_failure;
1150 }
1151 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1152 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001153 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1154 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1155 tlvStruct->length = sizeof(tANI_U32);
1156 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1157 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1158 != eSIR_SUCCESS)
1159 {
1160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1161 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1162 goto handle_failure;
1163 }
1164 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1165 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001166 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1167 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1168 tlvStruct->length = sizeof(tANI_U32);
1169 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1170 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1171 != eSIR_SUCCESS)
1172 {
1173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1174 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1175 goto handle_failure;
1176 }
1177 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1178 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001179 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1180 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1181 tlvStruct->length = sizeof(tANI_U32);
1182 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1183 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1184 != eSIR_SUCCESS)
1185 {
1186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1187 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1188 goto handle_failure;
1189 }
1190 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1191 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001192 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1193 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1194 tlvStruct->length = sizeof(tANI_U32);
1195 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1196 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1197 != eSIR_SUCCESS)
1198 {
1199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1200 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1201 goto handle_failure;
1202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001203 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1204 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001205 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1206 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1207 tlvStruct->length = sizeof(tANI_U32);
1208 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1209 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1210 != eSIR_SUCCESS)
1211 {
1212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1213 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1214 goto handle_failure;
1215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001216 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1217 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001218 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1219 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1220 tlvStruct->length = sizeof(tANI_U32);
1221 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1222 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1223 != eSIR_SUCCESS)
1224 {
1225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1226 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1227 goto handle_failure;
1228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001229 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1230 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001231 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1232 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1233 * into FW, so the parameters are added here.
1234 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1236 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1237 tlvStruct->length = sizeof(tANI_U32);
1238 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1239 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1240 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1241 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001242 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1243 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1244 tlvStruct->length = sizeof(tANI_U32);
1245 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1246 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1247 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1248 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001249 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1250 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1251 tlvStruct->length = sizeof(tANI_U32);
1252 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1253 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1254 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1255 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001256 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1257 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1258 tlvStruct->length = sizeof(tANI_U32);
1259 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1260 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1262 + sizeof(tHalCfg) + tlvStruct->length) ;
1263
1264 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1265 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1266 tlvStruct->length = sizeof(tANI_U32);
1267 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1268 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1269 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1270 + sizeof(tHalCfg) + tlvStruct->length) ;
1271
1272 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1273 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1278 + sizeof(tHalCfg) + tlvStruct->length) ;
1279
1280 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
1287
1288 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1289 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1294 + sizeof(tHalCfg) + tlvStruct->length) ;
1295
1296 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1329 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
1335
1336 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1337 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1338 tlvStruct->length = sizeof(tANI_U32);
1339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1340 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
1343
1344 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1345 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1346 tlvStruct->length = sizeof(tANI_U32);
1347 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1348 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1349 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1350 + sizeof(tHalCfg) + tlvStruct->length) ;
1351
1352 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1353 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1354 tlvStruct->length = sizeof(tANI_U32);
1355 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1356 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1357 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1358 + sizeof(tHalCfg) + tlvStruct->length) ;
1359
1360 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001361 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1362 tlvStruct->length = sizeof(tANI_U32);
1363 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1364 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1365 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1366 wcnssCompiledApiVersion.minor,
1367 wcnssCompiledApiVersion.version,
1368 wcnssCompiledApiVersion.revision);
1369 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1370 + sizeof(tHalCfg) + tlvStruct->length) ;
1371
Jeff Johnsond13512a2012-07-17 11:42:19 -07001372 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1373 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1374 tlvStruct->length = sizeof(tANI_U32);
1375 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1376 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1377 configDataValue ) != eSIR_SUCCESS)
1378 {
1379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1380 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1381 goto handle_failure;
1382 }
1383
1384 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1385 + sizeof(tHalCfg) + tlvStruct->length) ;
1386 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1387 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1391 configDataValue ) != eSIR_SUCCESS)
1392 {
1393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1394 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1395 goto handle_failure;
1396 }
1397
1398 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1399 + sizeof(tHalCfg) + tlvStruct->length) ;
1400
1401 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1402 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1403 tlvStruct->length = sizeof(tANI_U32);
1404 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1405 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1406 != eSIR_SUCCESS)
1407 {
1408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1409 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1410 goto handle_failure;
1411 }
1412
1413 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1414 + sizeof(tHalCfg) + tlvStruct->length) ;
1415
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001416 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1417 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1418 tlvStruct->length = sizeof(tANI_U32);
1419 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1420 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1421 != eSIR_SUCCESS)
1422 {
1423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1424 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1425 goto handle_failure;
1426 }
1427
1428 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1429 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001430#ifdef WLAN_SOFTAP_VSTA_FEATURE
1431 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1435 != eSIR_SUCCESS)
1436 {
1437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1438 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1439 goto handle_failure;
1440 }
1441
1442 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1443 + sizeof(tHalCfg) + tlvStruct->length) ;
1444#endif
1445
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001446 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1447 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1448 tlvStruct->length = sizeof(tANI_U32);
1449 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1450
1451 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1452 != eSIR_SUCCESS)
1453 {
1454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1455 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1456 goto handle_failure;
1457 }
1458
1459 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1460 + sizeof(tHalCfg) + tlvStruct->length) ;
1461
Jeff Johnson295189b2012-06-20 16:38:30 -07001462 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001463#ifdef WLAN_DEBUG
1464 {
1465 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1467 "****** Dumping CFG TLV ***** ");
1468 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1469 {
1470 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1471 "%02x %02x %02x %02x %02x %02x %02x %02x",
1472 tlvStructStart[i],
1473 tlvStructStart[i+1],
1474 tlvStructStart[i+2],
1475 tlvStructStart[i+3],
1476 tlvStructStart[i+4],
1477 tlvStructStart[i+5],
1478 tlvStructStart[i+6],
1479 tlvStructStart[i+7]);
1480 }
1481 /* Dump the bytes in the last line*/
1482 for (; i < wdiStartParams->usConfigBufferLen; i++)
1483 {
1484 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1485 "%02x ",tlvStructStart[i]);
1486 }
1487 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1488 "**************************** ");
1489 }
1490#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001491 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001492handle_failure:
1493 vos_mem_free(configParam);
1494 return VOS_STATUS_E_FAILURE;
1495}
Jeff Johnson295189b2012-06-20 16:38:30 -07001496/*
1497 * FUNCTION: WDA_wdiCompleteCB
1498 * call the voss call back function
1499 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001500void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001501{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001502 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1503 tWDA_CbContext *wdaContext;
1504
1505 if(NULL == pWdaParams)
1506 {
1507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001508 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001509 VOS_ASSERT(0) ;
1510 return ;
1511 }
1512
1513 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1514
Jeff Johnson295189b2012-06-20 16:38:30 -07001515 if (NULL == wdaContext)
1516 {
1517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001518 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001519 return ;
1520 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001521
Jeff Johnson295189b2012-06-20 16:38:30 -07001522 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001523 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001524 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001526 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001527 vos_mem_free(pWdaParams);
1528
Jeff Johnson295189b2012-06-20 16:38:30 -07001529 if(WDI_STATUS_SUCCESS != status)
1530 {
1531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1532 "WDI stop callback returned failure" );
1533 VOS_ASSERT(0) ;
1534 }
1535 else
1536 {
1537 wdaContext->wdaState = WDA_STOP_STATE;
1538 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001539
Jeff Johnson295189b2012-06-20 16:38:30 -07001540 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001541 vos_WDAComplete_cback(wdaContext->pVosContext);
1542
Jeff Johnson295189b2012-06-20 16:38:30 -07001543 return ;
1544}
Jeff Johnson295189b2012-06-20 16:38:30 -07001545/*
1546 * FUNCTION: WDA_stop
1547 * call WDI_stop
1548 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001549VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1550{
1551 WDI_Status wdiStatus;
1552 VOS_STATUS status = VOS_STATUS_SUCCESS;
1553 WDI_StopReqParamsType *wdiStopReq;
1554 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001555 tWDA_ReqParams *pWdaParams ;
1556
Jeff Johnson295189b2012-06-20 16:38:30 -07001557 if (NULL == pWDA)
1558 {
1559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001560 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001561 VOS_ASSERT(0);
1562 return VOS_STATUS_E_FAILURE;
1563 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001564 if (pWDA->wdiFailed == true)
1565 {
1566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001567 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001568 return VOS_STATUS_E_ALREADY;
1569 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001570
Jeff Johnson295189b2012-06-20 16:38:30 -07001571 /* FTM mode stay START_STATE */
1572 if( (WDA_READY_STATE != pWDA->wdaState) &&
1573 (WDA_INIT_STATE != pWDA->wdaState) &&
1574 (WDA_START_STATE != pWDA->wdaState) )
1575 {
1576 VOS_ASSERT(0);
1577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001578 wdiStopReq = (WDI_StopReqParamsType *)
1579 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1580 if(NULL == wdiStopReq)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001584 VOS_ASSERT(0);
1585 return VOS_STATUS_E_NOMEM;
1586 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001587
Jeff Johnson295189b2012-06-20 16:38:30 -07001588 wdiStopReq->wdiStopReason = reason;
1589 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001590
1591 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1592 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001593 {
1594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001596 VOS_ASSERT(0);
1597 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001598 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001599 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001600
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001601 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1602 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001603 {
1604 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001605 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001606 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001607
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001608 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1609 pWdaParams->wdaMsgParam = NULL;
1610 pWdaParams->pWdaContext = pWDA;
1611
Jeff Johnson295189b2012-06-20 16:38:30 -07001612 /* call WDI stop */
1613 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001614 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1615
Jeff Johnson295189b2012-06-20 16:38:30 -07001616 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1621 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001622 status = VOS_STATUS_E_FAILURE;
1623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 return status;
1625}
Jeff Johnson295189b2012-06-20 16:38:30 -07001626/*
1627 * FUNCTION: WDA_close
1628 * call WDI_close and free the WDA context
1629 */
1630VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1631{
Jeff Johnson43971f52012-07-17 12:26:56 -07001632 VOS_STATUS status = VOS_STATUS_SUCCESS;
1633 WDI_Status wstatus;
1634 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001635 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001636 if (NULL == wdaContext)
1637 {
1638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001639 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001640 return VOS_STATUS_E_FAILURE;
1641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001642 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1643 (WDA_STOP_STATE != wdaContext->wdaState))
1644 {
1645 VOS_ASSERT(0);
1646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001647 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001648 wstatus = WDI_Close();
1649 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001650 {
1651 status = VOS_STATUS_E_FAILURE;
1652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001653 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001654 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001655 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1656 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1659 "WDI Sync Event destroy failed - status = %d\n", status);
1660 status = VOS_STATUS_E_FAILURE;
1661 }
1662
Jeff Johnson43971f52012-07-17 12:26:56 -07001663 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001664 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001665 {
1666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1667 "VOS Event destroy failed - status = %d\n", status);
1668 status = VOS_STATUS_E_FAILURE;
1669 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001670 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001671 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001672 {
1673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "VOS Event destroy failed - status = %d\n", status);
1675 status = VOS_STATUS_E_FAILURE;
1676 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001677 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001678 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001679 {
1680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1681 "VOS Event destroy failed - status = %d\n", status);
1682 status = VOS_STATUS_E_FAILURE;
1683 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001684 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001685 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001686 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001687 {
1688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1689 "error in WDA close " );
1690 status = VOS_STATUS_E_FAILURE;
1691 }
1692 return status;
1693}
Jeff Johnson295189b2012-06-20 16:38:30 -07001694/*
1695 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1696 * returns 1 if the compiled version is greater than or equal to the input version
1697 */
1698
1699uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1700{
1701 VOS_STATUS status = VOS_STATUS_SUCCESS;
1702 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1703 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001704 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001705 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1706 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1707 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1708 (compiledVersion.revision >= revision)))
1709 return 1;
1710 else
1711 return 0;
1712}
Jeff Johnson295189b2012-06-20 16:38:30 -07001713/*
1714 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1715 * returns 1 if the compiled version is greater than or equal to the input version
1716 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001717uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1718{
1719 VOS_STATUS status = VOS_STATUS_SUCCESS;
1720 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1721 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001722 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001723 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1724 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1725 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1726 (reportedVersion.revision >= revision)))
1727 return 1;
1728 else
1729 return 0;
1730}
Jeff Johnson295189b2012-06-20 16:38:30 -07001731/*
1732 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1733 * Returns the version of the WCNSS WLAN API with which the HOST
1734 * device driver was compiled
1735 */
1736VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1737 tSirVersionType *pVersion)
1738{
1739 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001740 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001741 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001742 if ((NULL == pvosGCtx) || (NULL == pVersion))
1743 {
1744 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001745 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001746 VOS_ASSERT(0);
1747 return VOS_STATUS_E_FAILURE;
1748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001749 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1750 if (NULL == pWDA )
1751 {
1752 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001753 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001754 VOS_ASSERT(0);
1755 return VOS_STATUS_E_FAILURE;
1756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001757 *pVersion = pWDA->wcnssWlanCompiledVersion;
1758 return VOS_STATUS_SUCCESS;
1759}
Jeff Johnson295189b2012-06-20 16:38:30 -07001760/*
1761 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1762 * Returns the version of the WCNSS WLAN API with which the WCNSS
1763 * device driver was compiled
1764 */
1765VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1766 tSirVersionType *pVersion)
1767{
1768 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001770 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001771 if ((NULL == pvosGCtx) || (NULL == pVersion))
1772 {
1773 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001774 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001775 VOS_ASSERT(0);
1776 return VOS_STATUS_E_FAILURE;
1777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001778 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1779 if (NULL == pWDA )
1780 {
1781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001782 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001783 VOS_ASSERT(0);
1784 return VOS_STATUS_E_FAILURE;
1785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001786 *pVersion = pWDA->wcnssWlanReportedVersion;
1787 return VOS_STATUS_SUCCESS;
1788}
Jeff Johnson295189b2012-06-20 16:38:30 -07001789/*
1790 * FUNCTION: WDA_GetWcnssSoftwareVersion
1791 * Returns the WCNSS Software version string
1792 */
1793VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1794 tANI_U8 *pVersion,
1795 tANI_U32 versionBufferSize)
1796{
1797 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001799 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001800 if ((NULL == pvosGCtx) || (NULL == pVersion))
1801 {
1802 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001803 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001804 VOS_ASSERT(0);
1805 return VOS_STATUS_E_FAILURE;
1806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001807 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1808 if (NULL == pWDA )
1809 {
1810 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001811 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001812 VOS_ASSERT(0);
1813 return VOS_STATUS_E_FAILURE;
1814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001815 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1816 return VOS_STATUS_SUCCESS;
1817}
Jeff Johnson295189b2012-06-20 16:38:30 -07001818/*
1819 * FUNCTION: WDA_GetWcnssHardwareVersion
1820 * Returns the WCNSS Hardware version string
1821 */
1822VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1823 tANI_U8 *pVersion,
1824 tANI_U32 versionBufferSize)
1825{
1826 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001828 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001829 if ((NULL == pvosGCtx) || (NULL == pVersion))
1830 {
1831 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001832 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001833 VOS_ASSERT(0);
1834 return VOS_STATUS_E_FAILURE;
1835 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001836 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1837 if (NULL == pWDA )
1838 {
1839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001840 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001841 VOS_ASSERT(0);
1842 return VOS_STATUS_E_FAILURE;
1843 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001844 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1845 return VOS_STATUS_SUCCESS;
1846}
Jeff Johnson295189b2012-06-20 16:38:30 -07001847/*
1848 * FUNCTION: WDA_WniCfgDnld
1849 * Trigger CFG Download
1850 */
1851VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1852{
1853 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001854 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001855 v_VOID_t *pFileImage = NULL;
1856 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001857 v_VOID_t *pCfgBinary = NULL;
1858 v_SIZE_t cbCfgBinarySize = 0;
1859
1860 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 if (NULL == pMac )
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001864 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001865 VOS_ASSERT(0);
1866 return VOS_STATUS_E_FAILURE;
1867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001868 /* get the number of bytes in the CFG Binary... */
1869 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1870 &cbFileImageSize );
1871 if ( VOS_STATUS_E_NOMEM != vosStatus )
1872 {
1873 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1874 "Error obtaining binary size" );
1875 goto fail;
1876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001877 // malloc a buffer to read in the Configuration binary file.
1878 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001879 if ( NULL == pFileImage )
1880 {
1881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1882 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1883 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001884 vosStatus = VOS_STATUS_E_NOMEM;
1885 goto fail;
1886 }
1887
1888 /* Get the entire CFG file image... */
1889 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1890 &cbFileImageSize );
1891 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1892 {
1893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1894 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1895 cbFileImageSize );
1896 goto fail;
1897 }
1898
1899 /*
1900 * Validate the binary image. This function will return a pointer
1901 * and length where the CFG binary is located within the binary image file.
1902 */
1903 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1904 &pCfgBinary, &cbCfgBinarySize );
1905 if ( VOS_FALSE == bStatus )
1906 {
1907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1908 "Error: Cannot find STA CFG in binary image file" );
1909 vosStatus = VOS_STATUS_E_FAILURE;
1910 goto fail;
1911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001912 /*
1913 * TODO: call the config download function
1914 * for now calling the existing cfg download API
1915 */
1916 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001917 if( pFileImage != NULL )
1918 {
1919 vos_mem_free( pFileImage );
1920 }
1921 return vosStatus;
1922
1923fail:
1924 if(pCfgBinary != NULL)
1925 vos_mem_free( pFileImage );
1926
1927 return vosStatus;
1928}
Jeff Johnson295189b2012-06-20 16:38:30 -07001929/* -----------------------------------------------------------------
1930 * WDI interface
1931 * -----------------------------------------------------------------
1932 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001933/*
1934 * FUNCTION: WDA_suspendDataTxCallback
1935 * call back function called from TL after suspend Transmission
1936 */
1937VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1938 v_U8_t* ucSTAId,
1939 VOS_STATUS vosStatus)
1940{
1941 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001943 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001944 if (NULL == pWDA )
1945 {
1946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001947 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001948 VOS_ASSERT(0);
1949 return VOS_STATUS_E_FAILURE;
1950 }
1951 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1952 {
1953 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1954 }
1955 else
1956 {
1957 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001959 /* Trigger the event to bring the WDA TL suspend function to come
1960 * out of wait*/
1961 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1962 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1963 {
1964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1965 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001967 /* If TL suspended had timedout before this callback was called, resume back
1968 * TL.*/
1969 if (pWDA->txSuspendTimedOut)
1970 {
1971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1972 "Late TLSuspendCallback, resuming TL back again\n");
1973 WDA_ResumeDataTx(pWDA);
1974 pWDA->txSuspendTimedOut = FALSE;
1975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001976 return VOS_STATUS_SUCCESS;
1977}
Jeff Johnson295189b2012-06-20 16:38:30 -07001978/*
1979 * FUNCTION: WDA_suspendDataTx
1980 * Update TL to suspend the data Transmission
1981 */
1982VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1983{
1984 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1985 tANI_U8 eventIdx = 0;
1986 tANI_U8 ucSTAId = 0;
1987
1988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001989 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001990 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001991 if (pWDA->txSuspendTimedOut)
1992 {
1993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1994 "TL suspend timedout previously, CB not called yet\n");
1995 return status;
1996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001997 /* Reset the event to be not signalled */
1998 status = vos_event_reset(&pWDA->suspendDataTxEvent);
1999 if(!VOS_IS_STATUS_SUCCESS(status))
2000 {
2001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2002 "VOS Event reset failed - status = %d\n",status);
2003 return VOS_STATUS_E_FAILURE;
2004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002005 /*Indicate TL to suspend transmission for all Sta Id */
2006 ucSTAId = WLAN_ALL_STA;
2007 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
2008 WDA_SuspendDataTxCallback);
2009 if(status != VOS_STATUS_SUCCESS)
2010 {
2011 return status;
2012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 /* Wait for the event to be set by the TL, to get the response of
2014 * suspending the TX queues, this event should be set by the Callback
2015 * function called by TL*/
2016 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2017 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2018 if(!VOS_IS_STATUS_SUCCESS(status))
2019 {
2020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2021 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002022 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002023 /* Set this flag to true when TL suspend times out, so that when TL
2024 * suspend eventually happens and calls the callback, TL can be resumed
2025 * right away by looking at this flag when true.*/
2026 pWDA->txSuspendTimedOut = TRUE;
2027 }
2028 else
2029 {
2030 pWDA->txSuspendTimedOut = FALSE;
2031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002032 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2033 {
2034 status = VOS_STATUS_SUCCESS;
2035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002036 return status;
2037}
Jeff Johnson295189b2012-06-20 16:38:30 -07002038/*
2039 * FUNCTION: WDA_resumeDataTx
2040 * Update TL to resume the data Transmission
2041 */
2042VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2043{
2044 VOS_STATUS status = VOS_STATUS_SUCCESS;
2045 tANI_U8 ucSTAId = 0;
2046
2047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002048 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002049 ucSTAId = WLAN_ALL_STA;
2050 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
2051 return status;
2052}
Jeff Johnson295189b2012-06-20 16:38:30 -07002053/*
2054 * FUNCTION: WDA_InitScanReqCallback
2055 * Trigger Init SCAN callback
2056 */
2057void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2058{
2059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2060 tWDA_CbContext *pWDA;
2061 tInitScanParams *pWDA_ScanParam ;
2062 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002064 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002065 if(NULL == pWdaParams)
2066 {
2067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002068 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002069 VOS_ASSERT(0) ;
2070 return ;
2071 }
2072 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2073 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002074 if(NULL == pWDA_ScanParam)
2075 {
2076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002077 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002078 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2080 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 return ;
2082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002083 if(WDI_STATUS_SUCCESS != wdiStatus)
2084 {
2085 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002086 if(VOS_STATUS_SUCCESS != status)
2087 {
2088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002089 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002090 }
2091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 /* free WDI command buffer */
2093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002094 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002095
Jeff Johnson295189b2012-06-20 16:38:30 -07002096
2097 /* assign status to scan params */
2098 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002099 /* send SCAN RSP message back to PE */
2100 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 return ;
2102}
2103
2104/*
2105 * FUNCTION: WDA_ProcessInitScanReq
2106 * Trigger Init SCAN in DAL
2107 */
2108VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2109 tInitScanParams *initScanParams)
2110{
2111 WDI_Status status = WDI_STATUS_SUCCESS ;
2112 WDI_InitScanReqParamsType *wdiInitScanParam =
2113 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2114 sizeof(WDI_InitScanReqParamsType)) ;
2115 tWDA_ReqParams *pWdaParams;
2116 tANI_U8 i = 0;
2117
2118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002119 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002120 if(NULL == wdiInitScanParam)
2121 {
2122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002123 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002124 VOS_ASSERT(0);
2125 return VOS_STATUS_E_NOMEM;
2126 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002127 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2128 if(NULL == pWdaParams)
2129 {
2130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002132 VOS_ASSERT(0);
2133 vos_mem_free(wdiInitScanParam);
2134 return VOS_STATUS_E_NOMEM;
2135 }
2136
2137 /* Copy init Scan params to WDI structure */
2138 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2139 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2140 sizeof(tSirMacAddr)) ;
2141 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2142 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2143 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
2144#ifdef WLAN_FEATURE_P2P
2145 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2146 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
2147#else
2148 wdiInitScanParam->wdiReqInfo.bUseNOA = 0;
2149 wdiInitScanParam->wdiReqInfo.scanDuration = 0;
2150#endif
2151 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2152 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002153 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2154 {
2155 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2156 initScanParams->scanEntry.bssIdx[i] ;
2157 }
2158
2159 /* if Frame length, copy macMgmtHdr or WDI structure */
2160 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2161 {
2162 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2163 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2164 }
2165 wdiInitScanParam->wdiReqStatusCB = NULL ;
2166
Jeff Johnson295189b2012-06-20 16:38:30 -07002167 /* Store Init Req pointer, as this will be used for response */
2168 pWdaParams->pWdaContext = pWDA;
2169 pWdaParams->wdaMsgParam = initScanParams;
2170 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 /* first try to suspend TX */
2172 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002173 if(WDI_STATUS_SUCCESS != status)
2174 {
2175 goto handleWdiFailure;
2176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002177 /* call DAL API to pass init scan request to DAL */
2178 status = WDI_InitScanReq(wdiInitScanParam,
2179 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 if(IS_WDI_STATUS_FAILURE(status))
2181 {
2182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2183 "error in WDA Init Scan, Resume Tx " );
2184 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 VOS_ASSERT(0) ;
2186
2187 goto handleWdiFailure;
2188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002190handleWdiFailure:
2191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2192 "Failure in WDI Api, free all the memory " );
2193 /* free WDI command buffer */
2194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2195 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 /* send Failure to PE */
2197 initScanParams->status = eSIR_FAILURE ;
2198 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 return CONVERT_WDI2VOS_STATUS(status) ;
2200}
2201
Jeff Johnson295189b2012-06-20 16:38:30 -07002202/*
2203 * FUNCTION: WDA_StartScanReqCallback
2204 * send Start SCAN RSP back to PE
2205 */
2206void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2207 void* pUserData)
2208{
2209 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2210 tWDA_CbContext *pWDA;
2211 tStartScanParams *pWDA_ScanParam;
2212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002213 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 if(NULL == pWdaParams)
2215 {
2216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002217 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 VOS_ASSERT(0) ;
2219 return ;
2220 }
2221 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2222 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002223 if(NULL == pWDA_ScanParam)
2224 {
2225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002226 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002228 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 return ;
2230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2232 {
2233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002234 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002236 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002237 return ;
2238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2240 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002241
Jeff Johnson295189b2012-06-20 16:38:30 -07002242
2243 /* assign status to scan params */
2244 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(pScanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 /* send SCAN RSP message back to PE */
2246 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 return ;
2248}
2249
Jeff Johnson295189b2012-06-20 16:38:30 -07002250/*
2251 * FUNCTION: WDA_ProcessStartScanReq
2252 * Trigger start SCAN in WDI
2253 */
2254VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2255 tStartScanParams *startScanParams)
2256{
2257 WDI_Status status = WDI_STATUS_SUCCESS;
2258 WDI_StartScanReqParamsType *wdiStartScanParams =
2259 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2260 sizeof(WDI_StartScanReqParamsType)) ;
2261 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002263 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 if(NULL == wdiStartScanParams)
2265 {
2266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002268 VOS_ASSERT(0);
2269 return VOS_STATUS_E_NOMEM;
2270 }
2271 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2272 if(NULL == pWdaParams)
2273 {
2274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002275 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 VOS_ASSERT(0);
2277 vos_mem_free(wdiStartScanParams);
2278 return VOS_STATUS_E_NOMEM;
2279 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002280 /* Copy init Scan params to WDI structure */
2281 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2282 wdiStartScanParams->wdiReqStatusCB = NULL ;
2283
Jeff Johnson295189b2012-06-20 16:38:30 -07002284 /* Store Init Req pointer, as this will be used for response */
2285 /* store Params pass it to WDI */
2286 pWdaParams->pWdaContext = pWDA;
2287 pWdaParams->wdaMsgParam = startScanParams;
2288 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 /* call DAL API to pass init scan request to DAL */
2290 status = WDI_StartScanReq(wdiStartScanParams,
2291 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002292 /* failure returned by WDI API */
2293 if(IS_WDI_STATUS_FAILURE(status))
2294 {
2295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2296 "Failure in Start Scan WDI API, free all the memory "
2297 "It should be due to previous abort scan." );
2298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2299 vos_mem_free(pWdaParams) ;
2300 startScanParams->status = eSIR_FAILURE ;
2301 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 return CONVERT_WDI2VOS_STATUS(status) ;
2304}
Jeff Johnson295189b2012-06-20 16:38:30 -07002305/*
2306 * FUNCTION: WDA_EndScanReqCallback
2307 * END SCAN callback
2308 */
2309void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2310{
2311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2312 tWDA_CbContext *pWDA;
2313 tEndScanParams *endScanParam;
2314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 if(NULL == pWdaParams)
2317 {
2318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002319 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 VOS_ASSERT(0) ;
2321 return ;
2322 }
2323 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2324 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 if(NULL == endScanParam)
2326 {
2327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002328 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2331 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 return ;
2333 }
2334
2335 /* Free WDI command buffer */
2336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2337 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002338 /* assign status to scan params */
2339 endScanParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002340 /* send response back to PE */
2341 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2342 return ;
2343}
2344
Jeff Johnson295189b2012-06-20 16:38:30 -07002345/*
2346 * FUNCTION: WDA_ProcessEndScanReq
2347 * Trigger END SCAN in WDI
2348 */
2349VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2350 tEndScanParams *endScanParams)
2351{
2352 WDI_Status status = WDI_STATUS_SUCCESS;
2353 WDI_EndScanReqParamsType *wdiEndScanParams =
2354 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2355 sizeof(WDI_EndScanReqParamsType)) ;
2356 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002358 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 if(NULL == wdiEndScanParams)
2360 {
2361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002362 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 VOS_ASSERT(0);
2364 return VOS_STATUS_E_NOMEM;
2365 }
2366 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2367 if(NULL == pWdaParams)
2368 {
2369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 VOS_ASSERT(0);
2372 vos_mem_free(wdiEndScanParams);
2373 return VOS_STATUS_E_NOMEM;
2374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002375 /* Copy init Scan params to WDI structure */
2376 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2377 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002378 /* Store Init Req pointer, as this will be used for response */
2379 /* store Params pass it to WDI */
2380 pWdaParams->pWdaContext = pWDA;
2381 pWdaParams->wdaMsgParam = endScanParams;
2382 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 /* call DAL API to pass init scan request to DAL */
2384 status = WDI_EndScanReq(wdiEndScanParams,
2385 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 if(IS_WDI_STATUS_FAILURE(status))
2387 {
2388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2389 "Failure in End Scan WDI API, free all the memory "
2390 "It should be due to previous abort scan." );
2391 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2392 vos_mem_free(pWdaParams) ;
2393 endScanParams->status = eSIR_FAILURE ;
2394 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 return CONVERT_WDI2VOS_STATUS(status) ;
2397}
Jeff Johnson295189b2012-06-20 16:38:30 -07002398/*
2399 * FUNCTION: WDA_FinishScanReqCallback
2400 * Trigger Finish SCAN callback
2401 */
2402void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2403{
2404 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2405 tWDA_CbContext *pWDA;
2406 tFinishScanParams *finishScanParam;
2407 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002409 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002410 if(NULL == pWdaParams)
2411 {
2412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002413 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 VOS_ASSERT(0) ;
2415 return ;
2416 }
2417
2418 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2419 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 if(NULL == finishScanParam)
2421 {
2422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002423 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2426 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002427 return ;
2428 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2430 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002431 /*
2432 * Now Resume TX, if we reached here means, TX is already suspended, we
2433 * have to resume it unconditionaly
2434 */
2435 status = WDA_ResumeDataTx(pWDA) ;
2436
2437 if(VOS_STATUS_SUCCESS != status)
2438 {
2439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002440 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002442 finishScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2444 return ;
2445}
Jeff Johnson295189b2012-06-20 16:38:30 -07002446/*
2447 * FUNCTION: WDA_ProcessFinshScanReq
2448 * Trigger Finish SCAN in WDI
2449 */
2450VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2451 tFinishScanParams *finishScanParams)
2452{
2453 WDI_Status status = WDI_STATUS_SUCCESS;
2454 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2455 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2456 sizeof(WDI_FinishScanReqParamsType)) ;
2457 tWDA_ReqParams *pWdaParams ;
2458 tANI_U8 i = 0;
2459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002460 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 if(NULL == wdiFinishScanParams)
2462 {
2463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002465 VOS_ASSERT(0);
2466 return VOS_STATUS_E_NOMEM;
2467 }
2468 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2469 if(NULL == pWdaParams)
2470 {
2471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 VOS_ASSERT(0);
2474 vos_mem_free(wdiFinishScanParams);
2475 return VOS_STATUS_E_NOMEM;
2476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 /* Copy init Scan params to WDI structure */
2478 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2479 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2480 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2482 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2483 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2484 finishScanParams->frameLength ;
2485 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2486 finishScanParams->currentOperChannel ;
2487 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2488 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2489 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2491 {
2492 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2493 finishScanParams->scanEntry.bssIdx[i] ;
2494 }
2495
2496
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 /* if Frame length, copy macMgmtHdr ro WDI structure */
2498 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2499 {
2500 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2501 &finishScanParams->macMgmtHdr,
2502 sizeof(WDI_MacMgmtHdr)) ;
2503 }
2504 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 /* Store Init Req pointer, as this will be used for response */
2506 /* store Params pass it to WDI */
2507 pWdaParams->pWdaContext = pWDA;
2508 pWdaParams->wdaMsgParam = finishScanParams;
2509 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 /* call DAL API to pass init scan request to DAL */
2511 status = WDI_FinishScanReq(wdiFinishScanParams,
2512 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002513
Jeff Johnson295189b2012-06-20 16:38:30 -07002514
2515 /*
2516 * WDI API returns failure..
2517 */
2518 if(IS_WDI_STATUS_FAILURE( status))
2519 {
2520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2521 "Failure in Finish Scan WDI API, free all the memory " );
2522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2523 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 finishScanParams->status = eSIR_FAILURE ;
2525 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002527 return CONVERT_WDI2VOS_STATUS(status) ;
2528}
Jeff Johnson295189b2012-06-20 16:38:30 -07002529/*---------------------------------------------------------------------
2530 * ASSOC API's
2531 *---------------------------------------------------------------------
2532 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002533/*
2534 * FUNCTION: WDA_JoinReqCallback
2535 * Trigger Init SCAN callback
2536 */
2537void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2538{
2539 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2540 tWDA_CbContext *pWDA;
2541 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002543 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 if(NULL == pWdaParams)
2545 {
2546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002547 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 VOS_ASSERT(0) ;
2549 return ;
2550 }
2551 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2552 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2554 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 /* reset macBSSID */
2556 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 /* reset macSTASelf */
2558 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002559 joinReqParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002560 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 return ;
2562}
Jeff Johnson295189b2012-06-20 16:38:30 -07002563/*
2564 * FUNCTION: WDA_ProcessJoinReq
2565 * Trigger Join REQ in WDI
2566 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002567VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2568 tSwitchChannelParams* joinReqParam)
2569{
2570 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 WDI_JoinReqParamsType *wdiJoinReqParam =
2572 (WDI_JoinReqParamsType *)vos_mem_malloc(
2573 sizeof(WDI_JoinReqParamsType)) ;
2574 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002576 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 if(NULL == wdiJoinReqParam)
2578 {
2579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002582 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 return VOS_STATUS_E_NOMEM;
2584 }
2585 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2586 if(NULL == pWdaParams)
2587 {
2588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 VOS_ASSERT(0);
2591 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002592 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002593 return VOS_STATUS_E_NOMEM;
2594 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002595
2596 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2597 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2598 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2599 {
2600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2601 "%s: received join request when BSSID or self-STA is NULL "
2602 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002603 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002604 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2605 VOS_ASSERT(0);
2606 vos_mem_free(wdiJoinReqParam);
2607 vos_mem_free(pWdaParams);
2608 joinReqParam->status = eSIR_FAILURE ;
2609 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2610 return VOS_STATUS_E_INVAL;
2611 }
2612
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 /* copy the BSSID for pWDA */
2614 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2615 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2617 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2619 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002620#ifdef WLAN_FEATURE_VOWIFI
2621 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2622 joinReqParam->maxTxPower ;
2623#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2625 joinReqParam->localPowerConstraint ;
2626#endif
2627 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2628 joinReqParam->secondaryChannelOffset ;
2629 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2630
2631 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 /* Store Init Req pointer, as this will be used for response */
2633 /* store Params pass it to WDI */
2634 pWdaParams->pWdaContext = pWDA;
2635 pWdaParams->wdaMsgParam = joinReqParam;
2636 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002637 status = WDI_JoinReq(wdiJoinReqParam,
2638 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 if(IS_WDI_STATUS_FAILURE(status))
2640 {
2641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2642 "Failure in Join WDI API, free all the memory " );
2643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2644 vos_mem_free(pWdaParams) ;
2645 joinReqParam->status = eSIR_FAILURE ;
2646 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 return CONVERT_WDI2VOS_STATUS(status) ;
2649}
Jeff Johnson295189b2012-06-20 16:38:30 -07002650/*
2651 * FUNCTION: WDA_SwitchChannelReqCallback
2652 * send Switch channel RSP back to PE
2653 */
2654void WDA_SwitchChannelReqCallback(
2655 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2656{
2657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2658 tWDA_CbContext *pWDA;
2659 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002661 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 if(NULL == pWdaParams)
2663 {
2664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002665 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 VOS_ASSERT(0) ;
2667 return ;
2668 }
2669 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2670 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2671
2672#ifdef WLAN_FEATURE_VOWIFI
2673 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2674#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2676 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 pSwitchChanParams->status =
2678 CONVERT_WDI2SIR_STATUS(wdiSwitchChanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002680 return ;
2681}
Jeff Johnson295189b2012-06-20 16:38:30 -07002682/*
2683 * FUNCTION: WDA_ProcessChannelSwitchReq
2684 * Request to WDI to switch channel REQ params.
2685 */
2686VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2687 tSwitchChannelParams *pSwitchChanParams)
2688{
2689 WDI_Status status = WDI_STATUS_SUCCESS ;
2690 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2691 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2692 sizeof(WDI_SwitchChReqParamsType)) ;
2693 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002695 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 if(NULL == wdiSwitchChanParam)
2697 {
2698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002699 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 VOS_ASSERT(0);
2701 return VOS_STATUS_E_NOMEM;
2702 }
2703 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2704 if(NULL == pWdaParams)
2705 {
2706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 VOS_ASSERT(0);
2709 vos_mem_free(wdiSwitchChanParam);
2710 return VOS_STATUS_E_NOMEM;
2711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2713#ifndef WLAN_FEATURE_VOWIFI
2714 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2715 pSwitchChanParams->localPowerConstraint;
2716#endif
2717 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2718 pSwitchChanParams->secondaryChannelOffset;
2719 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 /* Store req pointer, as this will be used for response */
2721 /* store Params pass it to WDI */
2722 pWdaParams->pWdaContext = pWDA;
2723 pWdaParams->wdaMsgParam = pSwitchChanParams;
2724 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002725#ifdef WLAN_FEATURE_VOWIFI
2726 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2727 = pSwitchChanParams->maxTxPower;
2728 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2729 pSwitchChanParams ->selfStaMacAddr,
2730 sizeof(tSirMacAddr));
2731#endif
2732 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2733 pSwitchChanParams->bssId,
2734 sizeof(tSirMacAddr));
2735
2736 status = WDI_SwitchChReq(wdiSwitchChanParam,
2737 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 if(IS_WDI_STATUS_FAILURE(status))
2739 {
2740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2741 "Failure in process channel switch Req WDI API, free all the memory " );
2742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2743 vos_mem_free(pWdaParams) ;
2744 pSwitchChanParams->status = eSIR_FAILURE ;
2745 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 return CONVERT_WDI2VOS_STATUS(status) ;
2748}
Jeff Johnson295189b2012-06-20 16:38:30 -07002749/*
2750 * FUNCTION: WDA_ConfigBssReqCallback
2751 * config BSS Req Callback, called by WDI
2752 */
2753void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2754 ,void* pUserData)
2755{
2756 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2757 tWDA_CbContext *pWDA;
2758 tAddBssParams *configBssReqParam;
2759 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002761 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 if(NULL == pWdaParams)
2763 {
2764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002765 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002766 VOS_ASSERT(0) ;
2767 return ;
2768 }
2769 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2770 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2771 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 configBssReqParam->status =
2773 CONVERT_WDI2SIR_STATUS(wdiConfigBssRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2775 {
2776 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2777 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2779 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2780 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2781
2782 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2783 {
2784 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2785 {
2786 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2787 staConfigBssParam->staType = STA_ENTRY_BSSID;
2788 }
2789 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2790 (staConfigBssParam->staType == STA_ENTRY_SELF))
2791 {
2792 /* This is the 1st add BSS Req for the BTAMP STA */
2793 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2794 staConfigBssParam->staType = STA_ENTRY_BSSID;
2795 }
2796 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2797 (staConfigBssParam->staType == STA_ENTRY_PEER))
2798 {
2799 /* This is the 2nd ADD BSS Request that is sent
2800 * on the BTAMP STA side. The Sta type is
2801 * set to STA_ENTRY_PEER here.*/
2802 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2803 }
2804 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2805 (staConfigBssParam->staType == STA_ENTRY_SELF))
2806 {
2807 /* statype is already set by PE.
2808 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2809 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2810 staConfigBssParam->staType = STA_ENTRY_BSSID;
2811 }
2812 else
2813 {
2814 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2815 staConfigBssParam->staType = STA_ENTRY_PEER;
2816 }
2817 }
2818 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2819 {
2820 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2821 staConfigBssParam->staType = STA_ENTRY_SELF;
2822 }
2823 else
2824 {
2825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2826 "Invalid operation mode specified");
2827 VOS_ASSERT(0);
2828 }
2829
2830 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2835 sizeof(tSirMacAddr));
2836 staConfigBssParam->txChannelWidthSet =
2837 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002838 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2839 staConfigBssParam->htCapable)
2840 {
2841 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2842 wdiConfigBssRsp->ucBSSIdx;
2843 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2844 WDA_VALID_STA_INDEX ;
2845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2847 wdiConfigBssRsp->ucBSSIdx,
2848 wdiConfigBssRsp->ucSTAIdx))
2849 {
2850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002851 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 VOS_ASSERT(0) ;
2853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2855 {
2856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002857 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 VOS_ASSERT(0) ;
2859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002860#ifdef WLAN_FEATURE_VOWIFI
2861 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2862#endif
2863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2865 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002866 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002867 return ;
2868}
Jeff Johnson295189b2012-06-20 16:38:30 -07002869/*
2870 * FUNCTION: WDA_UpdateEdcaParamsForAC
2871 * Update WDI EDCA params with PE edca params
2872 */
2873void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2874 WDI_EdcaParamRecord *wdiEdcaParam,
2875 tSirMacEdcaParamRecord *macEdcaParam)
2876{
2877 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2878 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2879 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2880 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2881 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2882 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2883}
Jeff Johnson295189b2012-06-20 16:38:30 -07002884/*
2885 * FUNCTION: WDA_ProcessConfigBssReq
2886 * Configure BSS before starting Assoc with AP
2887 */
2888VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2889 tAddBssParams* configBssReqParam)
2890{
2891 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2893 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2894 sizeof(WDI_ConfigBSSReqParamsType)) ;
2895 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002897 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 if(NULL == wdiConfigBssReqParam)
2899 {
2900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002901 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 VOS_ASSERT(0);
2903 return VOS_STATUS_E_NOMEM;
2904 }
2905 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2906 if(NULL == pWdaParams)
2907 {
2908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 VOS_ASSERT(0);
2911 vos_mem_free(wdiConfigBssReqParam);
2912 return VOS_STATUS_E_NOMEM;
2913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002915 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2916 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 /* Store Init Req pointer, as this will be used for response */
2918 /* store Params pass it to WDI */
2919 pWdaParams->pWdaContext = pWDA;
2920 pWdaParams->wdaMsgParam = configBssReqParam;
2921 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2923 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 if(IS_WDI_STATUS_FAILURE(status))
2925 {
2926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2927 "Failure in Config BSS WDI API, free all the memory " );
2928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2929 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 return CONVERT_WDI2VOS_STATUS(status) ;
2934}
Jeff Johnson295189b2012-06-20 16:38:30 -07002935#ifdef ENABLE_HAL_COMBINED_MESSAGES
2936/*
2937 * FUNCTION: WDA_PostAssocReqCallback
2938 * Post ASSOC req callback, send RSP back to PE
2939 */
2940void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2941 void* pUserData)
2942{
2943 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2944 tPostAssocParams *postAssocReqParam =
2945 (tPostAssocParams *)pWDA->wdaMsgParam ;
2946 /*STA context within the BSS Params*/
2947 tAddStaParams *staPostAssocParam =
2948 &postAssocReqParam->addBssParams.staContext ;
2949 /*STA Params for self STA*/
2950 tAddStaParams *selfStaPostAssocParam =
2951 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002954 postAssocReqParam->status =
2955 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2957 {
2958 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2959 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2960 sizeof(tSirMacAddr)) ;
2961 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2962 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2963 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2965 }
2966 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2967 pWDA->wdaWdiApiMsgParam = NULL;
2968 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 return ;
2971}
Jeff Johnson295189b2012-06-20 16:38:30 -07002972/*
2973 * FUNCTION: WDA_ProcessPostAssocReq
2974 * Trigger POST ASSOC processing in WDI
2975 */
2976VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2977 tPostAssocParams *postAssocReqParam)
2978{
Jeff Johnson295189b2012-06-20 16:38:30 -07002979 WDI_Status status = WDI_STATUS_SUCCESS ;
2980
2981 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2982 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2983 sizeof(WDI_PostAssocReqParamsType)) ;
2984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002985 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002986
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 if(NULL == wdiPostAssocReqParam)
2988 {
2989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002990 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 VOS_ASSERT(0);
2992 return VOS_STATUS_E_NOMEM;
2993 }
2994
2995 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
2996 {
2997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002998 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 VOS_ASSERT(0);
3000 return VOS_STATUS_E_FAILURE;
3001 }
3002
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 /* update BSS params into WDI structure */
3004 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3005 &postAssocReqParam->addBssParams) ;
3006 /* update STA params into WDI structure */
3007 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3008 &postAssocReqParam->addStaParams) ;
3009
3010 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3011 postAssocReqParam->addBssParams.highPerformance;
3012 WDA_UpdateEdcaParamsForAC(pWDA,
3013 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3014 &postAssocReqParam->addBssParams.acbe);
3015 WDA_UpdateEdcaParamsForAC(pWDA,
3016 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3017 &postAssocReqParam->addBssParams.acbk);
3018 WDA_UpdateEdcaParamsForAC(pWDA,
3019 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3020 &postAssocReqParam->addBssParams.acvi);
3021 WDA_UpdateEdcaParamsForAC(pWDA,
3022 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3023 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 /* Store Init Req pointer, as this will be used for response */
3025 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 /* store Params pass it to WDI */
3027 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3029 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 if(IS_WDI_STATUS_FAILURE(status))
3031 {
3032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3033 "Failure in Post Assoc WDI API, free all the memory " );
3034 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3035 pWDA->wdaWdiApiMsgParam = NULL;
3036 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 return CONVERT_WDI2VOS_STATUS(status) ;
3041}
3042#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003043/*
3044 * FUNCTION: WDA_AddStaReqCallback
3045 * ADD STA req callback, send RSP back to PE
3046 */
3047void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3048 void* pUserData)
3049{
3050 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3051 tWDA_CbContext *pWDA;
3052 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003054 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 if(NULL == pWdaParams)
3056 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 VOS_ASSERT(0) ;
3059 return ;
3060 }
3061 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3062 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 addStaReqParam->status =
3064 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3066 {
3067 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3068 /*TODO: UMAC structure doesn't have these fields*/
3069 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3070 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3071 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3072 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3073 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3074 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003075#ifdef FEATURE_WLAN_TDLS
3076 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3077 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3078#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003079 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003080#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003081 {
3082 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3083 wdiConfigStaRsp->ucBssIdx;
3084 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3085 WDA_VALID_STA_INDEX ;
3086 }
3087 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3088 {
3089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003090 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 VOS_ASSERT(0) ;
3092 return ;
3093 }
3094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3096 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003098 return ;
3099}
Jeff Johnson295189b2012-06-20 16:38:30 -07003100/*
3101 * FUNCTION: WDA_ConfigStaReq
3102 * Trigger Config STA processing in WDI
3103 */
3104VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3105 tAddStaParams *addStaReqParam)
3106{
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003108 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3109 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3110 sizeof(WDI_ConfigSTAReqParamsType)) ;
3111 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003113 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 if(NULL == wdiConfigStaReqParam)
3115 {
3116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 VOS_ASSERT(0);
3119 return VOS_STATUS_E_NOMEM;
3120 }
3121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3122 if(NULL == pWdaParams)
3123 {
3124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 VOS_ASSERT(0);
3127 vos_mem_free(wdiConfigStaReqParam);
3128 return VOS_STATUS_E_NOMEM;
3129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 /* update STA params into WDI structure */
3132 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3133 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003134 /* Store Init Req pointer, as this will be used for response */
3135 /* store Params pass it to WDI */
3136 pWdaParams->pWdaContext = pWDA;
3137 pWdaParams->wdaMsgParam = addStaReqParam;
3138 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3140 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 if(IS_WDI_STATUS_FAILURE(status))
3142 {
3143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3144 "Failure in Config STA WDI API, free all the memory " );
3145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3146 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 return CONVERT_WDI2VOS_STATUS(status) ;
3151}
Jeff Johnson295189b2012-06-20 16:38:30 -07003152/*
3153 * FUNCTION: WDA_DelBSSReqCallback
3154 * Dens DEL BSS RSP back to PE
3155 */
3156void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3157 void* pUserData)
3158{
3159 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3160 tWDA_CbContext *pWDA;
3161 tDeleteBssParams *delBssReqParam;
3162 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003164 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 if(NULL == pWdaParams)
3166 {
3167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003168 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 VOS_ASSERT(0) ;
3170 return ;
3171 }
3172 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3173 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3176 {
3177 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3178 sizeof(tSirMacAddr)) ;
3179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3181 {
3182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003183 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 VOS_ASSERT(0) ;
3185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3187 {
3188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003189 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 VOS_ASSERT(0) ;
3191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3193 {
3194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003195 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003196 VOS_ASSERT(0) ;
3197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3199 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 /* reset the the system role*/
3201 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3202
3203 /* Reset the BA related information */
3204 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3205 {
3206 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3207 {
3208 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3209 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3210 /* Reset framesTxed counters here */
3211 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3212 {
3213 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3214 }
3215 }
3216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 return ;
3219}
3220
Jeff Johnson295189b2012-06-20 16:38:30 -07003221/*
3222 * FUNCTION: WDA_ProcessDelBssReq
3223 * Init DEL BSS req with WDI
3224 */
3225VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3226 tDeleteBssParams *delBssParam)
3227{
3228 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3230 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3231 sizeof(WDI_DelBSSReqParamsType)) ;
3232 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003234 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003235 if(NULL == wdiDelBssReqParam)
3236 {
3237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 VOS_ASSERT(0);
3240 return VOS_STATUS_E_NOMEM;
3241 }
3242 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3243 if(NULL == pWdaParams)
3244 {
3245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003247 VOS_ASSERT(0);
3248 vos_mem_free(wdiDelBssReqParam);
3249 return VOS_STATUS_E_NOMEM;
3250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3252 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3253
3254 /* Store Init Req pointer, as this will be used for response */
3255 /* store Params pass it to WDI */
3256 pWdaParams->pWdaContext = pWDA;
3257 pWdaParams->wdaMsgParam = delBssParam;
3258 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 status = WDI_DelBSSReq(wdiDelBssReqParam,
3260 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 if(IS_WDI_STATUS_FAILURE(status))
3262 {
3263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3264 "Failure in Del BSS WDI API, free all the memory " );
3265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3266 vos_mem_free(pWdaParams) ;
3267 delBssParam->status = eSIR_FAILURE ;
3268 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3269 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 return CONVERT_WDI2VOS_STATUS(status) ;
3271}
Jeff Johnson295189b2012-06-20 16:38:30 -07003272/*
3273 * FUNCTION: WDA_DelSTAReqCallback
3274 * Dens DEL STA RSP back to PE
3275 */
3276void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3277 void* pUserData)
3278{
3279 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3280 tWDA_CbContext *pWDA;
3281 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003283 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 if(NULL == pWdaParams)
3285 {
3286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003287 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 VOS_ASSERT(0) ;
3289 return ;
3290 }
3291 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3292 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003294 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3295 {
3296 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3297 {
3298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003299 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_ASSERT(0) ;
3301 }
3302 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3303 }
3304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3305 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 /*Reset the BA information corresponding to this STAIdx */
3307 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3308 WDA_INVALID_STA_INDEX;
3309 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3310
3311 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 return ;
3313}
Jeff Johnson295189b2012-06-20 16:38:30 -07003314/*
3315 * FUNCTION: WDA_ProcessDelStaReq
3316 * Init DEL STA req with WDI
3317 */
3318VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3319 tDeleteStaParams *delStaParam)
3320{
3321 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003322 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3323 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3324 sizeof(WDI_DelSTAReqParamsType)) ;
3325 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003327 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 if(NULL == wdiDelStaReqParam)
3329 {
3330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003331 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 VOS_ASSERT(0);
3333 return VOS_STATUS_E_NOMEM;
3334 }
3335 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3336 if(NULL == pWdaParams)
3337 {
3338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 VOS_ASSERT(0);
3341 vos_mem_free(wdiDelStaReqParam);
3342 return VOS_STATUS_E_NOMEM;
3343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3345 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 /* Store Init Req pointer, as this will be used for response */
3347 /* store Params pass it to WDI */
3348 pWdaParams->pWdaContext = pWDA;
3349 pWdaParams->wdaMsgParam = delStaParam;
3350 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 status = WDI_DelSTAReq(wdiDelStaReqParam,
3352 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 if(IS_WDI_STATUS_FAILURE(status))
3354 {
3355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3356 "Failure in Del STA WDI API, free all the memory status = %d",
3357 status );
3358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3359 vos_mem_free(pWdaParams) ;
3360 delStaParam->status = eSIR_FAILURE ;
3361 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 return CONVERT_WDI2VOS_STATUS(status) ;
3364}
Jeff Johnson295189b2012-06-20 16:38:30 -07003365void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3366{
3367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3368 tWDA_CbContext *pWDA;
3369 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003371 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003372 if(NULL == pWdaParams)
3373 {
3374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003375 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003376 VOS_ASSERT(0) ;
3377 return ;
3378 }
3379 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3380 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3382 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3384 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3385 pwdiAddSTASelfRsp->macSelfSta,
3386 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 return ;
3389}
Jeff Johnson295189b2012-06-20 16:38:30 -07003390/*
3391 * FUNCTION: WDA_ProcessAddStaSelfReq
3392 *
3393 */
3394VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3395{
3396 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003397 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3399 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3400 sizeof(WDI_AddSTASelfReqParamsType)) ;
3401 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003403 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003404 if( NULL == wdiAddStaSelfReq )
3405 {
3406 VOS_ASSERT( 0 );
3407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003408 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003409 return( VOS_STATUS_E_NOMEM );
3410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 if( NULL == pWdaParams )
3413 {
3414 VOS_ASSERT( 0 );
3415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003416 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 vos_mem_free(wdiAddStaSelfReq) ;
3418 return( VOS_STATUS_E_NOMEM );
3419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3422 /* Store Init Req pointer, as this will be used for response */
3423 /* store Params pass it to WDI */
3424 pWdaParams->pWdaContext = pWDA;
3425 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3426 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003427 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003428
Jeff Johnson43971f52012-07-17 12:26:56 -07003429 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003430 {
3431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3432 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003433 wstatus );
3434 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3436 vos_mem_free(pWdaParams) ;
3437 pAddStaSelfReq->status = eSIR_FAILURE ;
3438 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3439 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003440 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003441}
Jeff Johnson295189b2012-06-20 16:38:30 -07003442/*
3443 * FUNCTION: WDA_DelSTASelfRespCallback
3444 *
3445 */
3446void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3447 wdiDelStaSelfRspParams , void* pUserData)
3448{
3449 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3450 tWDA_CbContext *pWDA;
3451 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003453 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 if (NULL == pWdaParams)
3455 {
3456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003457 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 VOS_ASSERT(0);
3459 return;
3460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003461 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3462 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 delStaSelfParams->status =
3464 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3465
3466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3467 vos_mem_free(pWdaParams) ;
3468
3469 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 return ;
3471}
Jeff Johnson295189b2012-06-20 16:38:30 -07003472/*
3473 * FUNCTION: WDA_DelSTASelfReqCallback
3474 *
3475 */
3476void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3477 void* pUserData)
3478{
3479 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3480 tWDA_CbContext *pWDA;
3481 tDelStaSelfParams *delStaSelfParams;
3482
3483 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3484 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003485 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003486
3487 if (NULL == pWdaParams)
3488 {
3489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003490 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 VOS_ASSERT(0);
3492 return;
3493 }
3494
3495 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3496 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3497
3498 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3499
3500 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3501 {
3502 VOS_ASSERT(0);
3503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3504 vos_mem_free(pWdaParams) ;
3505 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3506 }
3507
3508 return ;
3509}
3510
3511/*
3512 * FUNCTION: WDA_DelSTASelfReq
3513 * Trigger Config STA processing in WDI
3514 */
3515VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3516 tDelStaSelfParams* pDelStaSelfReqParam)
3517{
3518 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003519 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 tWDA_ReqParams *pWdaParams = NULL;
3521 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3522 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3523 sizeof(WDI_DelSTASelfReqParamsType)) ;
3524
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003526 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 if( NULL == wdiDelStaSelfReq )
3528 {
3529 VOS_ASSERT( 0 );
3530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003531 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 return( VOS_STATUS_E_NOMEM );
3533 }
3534
3535 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3536 if( NULL == pWdaParams )
3537 {
3538 VOS_ASSERT( 0 );
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003540 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 vos_mem_free(wdiDelStaSelfReq) ;
3542 return( VOS_STATUS_E_NOMEM );
3543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 pWdaParams->pWdaContext = pWDA;
3545 /* Store param pointer as passed in by caller */
3546 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3547 /* store Params pass it to WDI */
3548 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3550 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3551
3552 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3553 wdiDelStaSelfReq->pUserData = pWdaParams;
3554
Jeff Johnson43971f52012-07-17 12:26:56 -07003555 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3557
Jeff Johnson43971f52012-07-17 12:26:56 -07003558 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 {
3560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3561 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3562 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003563 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3565 vos_mem_free(pWdaParams) ;
3566 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3567 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3568 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003569 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003570}
3571
Jeff Johnson295189b2012-06-20 16:38:30 -07003572/*
3573 * FUNCTION: WDA_SendMsg
3574 * Send Message back to PE
3575 */
3576void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3577 void *pBodyptr, tANI_U32 bodyVal)
3578{
3579 tSirMsgQ msg = {0} ;
3580 tANI_U32 status = VOS_STATUS_SUCCESS ;
3581 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003582 msg.type = msgType;
3583 msg.bodyval = bodyVal;
3584 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003585 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 if (VOS_STATUS_SUCCESS != status)
3587 {
3588 if(NULL != pBodyptr)
3589 {
3590 vos_mem_free(pBodyptr);
3591 }
3592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003593 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003594 VOS_ASSERT(0) ;
3595 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 return ;
3597}
Jeff Johnson295189b2012-06-20 16:38:30 -07003598/*
3599 * FUNCTION: WDA_UpdateBSSParams
3600 * Translated WDA/PE BSS info into WDI BSS info..
3601 */
3602void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3603 WDI_ConfigBSSReqInfoType *wdiBssParams,
3604 tAddBssParams *wdaBssParams)
3605{
3606 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 /* copy bssReq Params to WDI structure */
3608 vos_mem_copy(wdiBssParams->macBSSID,
3609 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3610 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3611 sizeof(tSirMacAddr)) ;
3612 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3613 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3614 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 wdiBssParams->ucShortSlotTimeSupported =
3616 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3618 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3619 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3620 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3621 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3622
3623 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3624 wdiBssParams->ucTXOPProtectionFullSupport =
3625 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3627 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003628 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3630 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3631 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3632 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3633
3634 /* copy SSID into WDI structure */
3635 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3636 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3637 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003638 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3639 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003641#ifdef WLAN_FEATURE_VOWIFI
3642 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3643#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003645 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003646#ifdef WLAN_FEATURE_VOWIFI_11R
3647 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 if(wdiBssParams->bExtSetStaKeyParamValid)
3649 {
3650 /* copy set STA key params to WDI structure */
3651 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3652 wdaBssParams->extSetStaKeyParam.staIdx;
3653 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3654 wdaBssParams->extSetStaKeyParam.encType;
3655 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3656 wdaBssParams->extSetStaKeyParam.wepType;
3657 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3658 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3660 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003661 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3663 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3664 {
3665 WDA_GetWepKeysFromCfg( pWDA,
3666 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3667 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3668 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3669 }
3670 else
3671 {
3672#ifdef WLAN_SOFTAP_FEATURE
3673 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3674 keyIndex++)
3675 {
3676 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3677 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3678 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3679 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3680 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3681 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3683 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3684 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3685 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3686 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3687 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3688 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3689 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3692 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3693#else
3694 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyId =
3695 wdaBssParams->extSetStaKeyParam.key.keyId;
3696 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].unicast =
3697 wdaBssParams->extSetStaKeyParam.key.unicast;
3698 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyDirection =
3699 wdaBssParams->extSetStaKeyParam.key.keyDirection;
3700 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyRsc,
3701 wdaBssParams->extSetStaKeyParam.key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
3702 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].paeRole =
3703 wdaBssParams->extSetStaKeyParam.key.paeRole;
3704 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyLength =
3705 wdaBssParams->extSetStaKeyParam.key.keyLength;
3706 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].key,
3707 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
3708 SIR_MAC_MAX_KEY_LENGTH);
3709 wdiBssParams->wdiExtSetKeyParam.ucNumKeys = 1;
3710#endif
3711 }
3712 }
3713 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3714 }
3715 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3716 {
3717 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3718 sizeof(wdaBssParams->extSetStaKeyParam) );
3719 }
3720#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003721#ifdef WLAN_FEATURE_11AC
3722 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3723 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3724#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003725
3726 return ;
3727}
Jeff Johnson295189b2012-06-20 16:38:30 -07003728/*
3729 * FUNCTION: WDA_UpdateSTAParams
3730 * Translated WDA/PE BSS info into WDI BSS info..
3731 */
3732void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3733 WDI_ConfigStaReqInfoType *wdiStaParams,
3734 tAddStaParams *wdaStaParams)
3735{
3736 tANI_U8 i = 0;
3737 /* Update STA params */
3738 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3739 sizeof(tSirMacAddr)) ;
3740 wdiStaParams->usAssocId = wdaStaParams->assocId;
3741 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3742
3743 wdiStaParams->ucShortPreambleSupported =
3744 wdaStaParams->shortPreambleSupported;
3745 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3746 sizeof(tSirMacAddr)) ;
3747 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3748
3749 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3750
3751 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3752 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3753 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3754 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3755 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3756 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3757 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3758
3759 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3760 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 wdiStaParams->wdiSupportedRates.opRateMode =
3762 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3764 {
3765 wdiStaParams->wdiSupportedRates.llbRates[i] =
3766 wdaStaParams->supportedRates.llbRates[i];
3767 }
3768 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3769 {
3770 wdiStaParams->wdiSupportedRates.llaRates[i] =
3771 wdaStaParams->supportedRates.llaRates[i];
3772 }
3773 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3774 {
3775 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3776 wdaStaParams->supportedRates.aniLegacyRates[i];
3777 }
3778 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3779 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003780#ifdef WLAN_FEATURE_11AC
3781 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3782 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3783 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3784 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3785#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003786 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3787 {
3788 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3789 wdaStaParams->supportedRates.supportedMCSSet[i];
3790 }
3791 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3792 wdaStaParams->supportedRates.rxHighestDataRate;
3793
3794 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3795
3796 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3797
3798 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3799 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3800 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3801
3802 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3803 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3804 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3805 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3806#ifdef WLAN_FEATURE_P2P
3807 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3808#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003809#ifdef WLAN_FEATURE_11AC
3810 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3811 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003812 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003813#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003814 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3815 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 return ;
3817}
Jeff Johnson295189b2012-06-20 16:38:30 -07003818/*
3819 * -------------------------------------------------------------------------
3820 * CFG update to WDI
3821 * -------------------------------------------------------------------------
3822 */
3823
3824 /*
3825 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3826 * Convert the WNI CFG ID to HAL CFG ID
3827 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003828static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003829{
3830 switch(wniCfgId)
3831 {
3832 case WNI_CFG_STA_ID:
3833 return QWLAN_HAL_CFG_STA_ID;
3834 case WNI_CFG_CURRENT_TX_ANTENNA:
3835 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3836 case WNI_CFG_CURRENT_RX_ANTENNA:
3837 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3838 case WNI_CFG_LOW_GAIN_OVERRIDE:
3839 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3840 case WNI_CFG_POWER_STATE_PER_CHAIN:
3841 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3842 case WNI_CFG_CAL_PERIOD:
3843 return QWLAN_HAL_CFG_CAL_PERIOD;
3844 case WNI_CFG_CAL_CONTROL:
3845 return QWLAN_HAL_CFG_CAL_CONTROL;
3846 case WNI_CFG_PROXIMITY:
3847 return QWLAN_HAL_CFG_PROXIMITY;
3848 case WNI_CFG_NETWORK_DENSITY:
3849 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3850 case WNI_CFG_MAX_MEDIUM_TIME:
3851 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3852 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3853 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3854 case WNI_CFG_RTS_THRESHOLD:
3855 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3856 case WNI_CFG_SHORT_RETRY_LIMIT:
3857 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3858 case WNI_CFG_LONG_RETRY_LIMIT:
3859 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3860 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3861 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3862 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3863 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3864 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3865 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3866 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3867 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3868 case WNI_CFG_FIXED_RATE:
3869 return QWLAN_HAL_CFG_FIXED_RATE;
3870 case WNI_CFG_RETRYRATE_POLICY:
3871 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3872 case WNI_CFG_RETRYRATE_SECONDARY:
3873 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3874 case WNI_CFG_RETRYRATE_TERTIARY:
3875 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3876 case WNI_CFG_FORCE_POLICY_PROTECTION:
3877 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3878 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3879 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3880 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3881 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3882 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3883 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3884 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3885 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3886 case WNI_CFG_MAX_BA_SESSIONS:
3887 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3888 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3889 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3890 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3891 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3892 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3893 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3894 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3895 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3896 case WNI_CFG_STATS_PERIOD:
3897 return QWLAN_HAL_CFG_STATS_PERIOD;
3898 case WNI_CFG_CFP_MAX_DURATION:
3899 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3900#if 0 /*This is not part of CFG*/
3901 case WNI_CFG_FRAME_TRANS_ENABLED:
3902 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3903#endif
3904 case WNI_CFG_DTIM_PERIOD:
3905 return QWLAN_HAL_CFG_DTIM_PERIOD;
3906 case WNI_CFG_EDCA_WME_ACBK:
3907 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3908 case WNI_CFG_EDCA_WME_ACBE:
3909 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3910 case WNI_CFG_EDCA_WME_ACVI:
3911 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3912 case WNI_CFG_EDCA_WME_ACVO:
3913 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3914#if 0
3915 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3916 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3917 case WNI_CFG_TELE_BCN_TRANS_LI:
3918 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3919 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3920 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3921 case WNI_CFG_TELE_BCN_MAX_LI:
3922 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3923 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3924 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3925#endif
3926 case WNI_CFG_ENABLE_CLOSE_LOOP:
3927 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003928 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3929 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003930 default:
3931 {
3932 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3933 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3934 wniCfgId);
3935 return VOS_STATUS_E_INVAL;
3936 }
3937 }
3938}
Jeff Johnson295189b2012-06-20 16:38:30 -07003939/*
3940 * FUNCTION: WDA_UpdateCfgCallback
3941 *
3942 */
3943void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3944{
3945 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3946 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3947 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003949 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 /*
3951 * currently there is no response message is expected between PE and
3952 * WDA, Failure return from WDI is a ASSERT condition
3953 */
3954 if(WDI_STATUS_SUCCESS != wdiStatus)
3955 {
3956 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003957 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3959 }
3960
3961 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3962 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3963 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003964 return ;
3965}
Jeff Johnson295189b2012-06-20 16:38:30 -07003966/*
3967 * FUNCTION: WDA_UpdateCfg
3968 *
3969 */
3970VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3971{
3972
3973 WDI_Status status = WDI_STATUS_SUCCESS ;
3974 tANI_U32 val =0;
3975 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3976 tHalCfg *configData;
3977 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3978 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003980 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 if (NULL == pMac )
3982 {
3983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003984 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003985 return VOS_STATUS_E_FAILURE;
3986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 if(WDA_START_STATE != pWDA->wdaState)
3988 {
3989 return VOS_STATUS_E_FAILURE;
3990 }
3991
3992 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3993 {
3994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003995 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 VOS_ASSERT(0);
3997 return VOS_STATUS_E_FAILURE;
3998 }
3999
4000 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4001 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 if(NULL == wdiCfgReqParam)
4003 {
4004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 VOS_ASSERT(0);
4007 return VOS_STATUS_E_NOMEM;
4008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4010 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 if(NULL == wdiCfgReqParam->pConfigBuffer)
4012 {
4013 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004014 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004015 vos_mem_free(wdiCfgReqParam);
4016 VOS_ASSERT(0);
4017 return VOS_STATUS_E_NOMEM;
4018 }
4019
4020 /*convert the WNI CFG Id to HAL CFG Id*/
4021 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4022 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4023
4024 /*TODO: revisit this for handling string parameters */
4025 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4026 &val) != eSIR_SUCCESS)
4027 {
4028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4029 "Failed to cfg get id %d\n", cfgParam->bodyval);
4030 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4031 vos_mem_free(wdiCfgReqParam);
4032 return eSIR_FAILURE;
4033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4035 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4036 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4037 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4038 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4039
4040 /* store Params pass it to WDI */
4041 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004042#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4043 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4044 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 if(IS_WDI_STATUS_FAILURE(status))
4046 {
4047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4048 "Failure in Update CFG WDI API, free all the memory " );
4049 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4050 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4051 pWDA->wdaWdiCfgApiMsgParam = NULL;
4052 /* Failure is not expected */
4053 VOS_ASSERT(0) ;
4054 }
4055#else
4056 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4057 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4058 pWDA->wdaWdiCfgApiMsgParam = NULL;
4059#endif
4060 return CONVERT_WDI2VOS_STATUS(status) ;
4061}
4062
Jeff Johnson295189b2012-06-20 16:38:30 -07004063VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4064 v_U8_t *pDefaultKeyId,
4065 v_U8_t *pNumKeys,
4066 WDI_KeysType *pWdiKeys )
4067{
4068 v_U32_t i, j, defKeyId = 0;
4069 v_U32_t val = SIR_MAC_KEY_LENGTH;
4070 VOS_STATUS status = WDI_STATUS_SUCCESS;
4071 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 if (NULL == pMac )
4073 {
4074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004075 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 return VOS_STATUS_E_FAILURE;
4077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004078 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4079 &defKeyId ))
4080 {
4081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4082 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4083 }
4084
4085 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 /* Need to extract ALL of the configured WEP Keys */
4087 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4088 {
4089 val = SIR_MAC_KEY_LENGTH;
4090 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4091 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4092 pWdiKeys[j].key,
4093 &val ))
4094 {
4095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4096 "WEP Key index [%d] may not configured in CFG\n",i);
4097 }
4098 else
4099 {
4100 pWdiKeys[j].keyId = (tANI_U8) i;
4101 /*
4102 * Actually, a DC (Don't Care) because
4103 * this is determined (and set) by PE/MLME
4104 */
4105 pWdiKeys[j].unicast = 0;
4106 /*
4107 * Another DC (Don't Care)
4108 */
4109 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4110 /* Another DC (Don't Care). Unused for WEP */
4111 pWdiKeys[j].paeRole = 0;
4112 /* Determined from wlan_cfgGetStr() above.*/
4113 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004114 j++;
4115 *pNumKeys = (tANI_U8) j;
4116 }
4117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 return status;
4119}
Jeff Johnson295189b2012-06-20 16:38:30 -07004120/*
4121 * FUNCTION: WDA_SetBssKeyReqCallback
4122 * send SET BSS key RSP back to PE
4123 */
4124void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4125{
4126 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4127 tWDA_CbContext *pWDA;
4128 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004130 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 if(NULL == pWdaParams)
4132 {
4133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004134 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 VOS_ASSERT(0) ;
4136 return ;
4137 }
4138 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4139 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4141 vos_mem_free(pWdaParams) ;
4142 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004143 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 return ;
4145}
Jeff Johnson295189b2012-06-20 16:38:30 -07004146/*
4147 * FUNCTION: WDA_ProcessSetBssKeyReq
4148 * Request to WDI for programming the BSS key( key for
4149 * broadcast/multicast frames Encryption)
4150 */
4151VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4152 tSetBssKeyParams *setBssKeyParams )
4153{
4154 WDI_Status status = WDI_STATUS_SUCCESS ;
4155 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4156 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4157 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4158 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004161 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 if(NULL == wdiSetBssKeyParam)
4163 {
4164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004165 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 VOS_ASSERT(0);
4167 return VOS_STATUS_E_NOMEM;
4168 }
4169 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4170 if(NULL == pWdaParams)
4171 {
4172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004173 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 VOS_ASSERT(0);
4175 vos_mem_free(wdiSetBssKeyParam);
4176 return VOS_STATUS_E_NOMEM;
4177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 /* copy set BSS params to WDI structure */
4180 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4181 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4182 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 if(setBssKeyParams->encType != eSIR_ED_NONE)
4184 {
4185 if( setBssKeyParams->numKeys == 0 &&
4186 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4187 setBssKeyParams->encType == eSIR_ED_WEP104))
4188 {
4189 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4191 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4192 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4193 }
4194 else
4195 {
4196 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4197 {
4198 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4199 setBssKeyParams->key[keyIndex].keyId;
4200 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4201 setBssKeyParams->key[keyIndex].unicast;
4202 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4203 setBssKeyParams->key[keyIndex].keyDirection;
4204 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4205 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4206 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4207 setBssKeyParams->key[keyIndex].paeRole;
4208 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4209 setBssKeyParams->key[keyIndex].keyLength;
4210 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4211 setBssKeyParams->key[keyIndex].key,
4212 SIR_MAC_MAX_KEY_LENGTH);
4213 }
4214 }
4215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4217 setBssKeyParams->singleTidRc;
4218 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 /* Store set key pointer, as this will be used for response */
4220 /* store Params pass it to WDI */
4221 pWdaParams->pWdaContext = pWDA;
4222 pWdaParams->wdaMsgParam = setBssKeyParams;
4223 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4225 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4226
4227 if(IS_WDI_STATUS_FAILURE(status))
4228 {
4229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4230 "Failure in Set BSS Key Req WDI API, free all the memory " );
4231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4232 vos_mem_free(pWdaParams) ;
4233 setBssKeyParams->status = eSIR_FAILURE ;
4234 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 return CONVERT_WDI2VOS_STATUS(status) ;
4237}
Jeff Johnson295189b2012-06-20 16:38:30 -07004238/*
4239 * FUNCTION: WDA_RemoveBssKeyReqCallback
4240 * send SET BSS key RSP back to PE
4241 */
4242void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4243{
4244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4245 tWDA_CbContext *pWDA;
4246 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004248 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004249 if(NULL == pWdaParams)
4250 {
4251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004252 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004253 VOS_ASSERT(0) ;
4254 return ;
4255 }
4256 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4257 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4259 vos_mem_free(pWdaParams) ;
4260
4261 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004263 return ;
4264}
Jeff Johnson295189b2012-06-20 16:38:30 -07004265/*
4266 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4267 * Request to WDI to remove the BSS key( key for broadcast/multicast
4268 * frames Encryption)
4269 */
4270VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4271 tRemoveBssKeyParams *removeBssKeyParams )
4272{
4273 WDI_Status status = WDI_STATUS_SUCCESS ;
4274 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4275 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4276 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4277 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004279 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 if(NULL == wdiRemoveBssKeyParam)
4281 {
4282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 VOS_ASSERT(0);
4285 return VOS_STATUS_E_NOMEM;
4286 }
4287 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4288 if(NULL == pWdaParams)
4289 {
4290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 VOS_ASSERT(0);
4293 vos_mem_free(wdiRemoveBssKeyParam);
4294 return VOS_STATUS_E_NOMEM;
4295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 /* copy Remove BSS key params to WDI structure*/
4297 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4298 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4299 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4300 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4301 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 /* Store remove key pointer, as this will be used for response */
4303 /* store Params pass it to WDI */
4304 pWdaParams->pWdaContext = pWDA;
4305 pWdaParams->wdaMsgParam = removeBssKeyParams;
4306 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4308 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 if(IS_WDI_STATUS_FAILURE(status))
4310 {
4311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4312 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4314 vos_mem_free(pWdaParams) ;
4315 removeBssKeyParams->status = eSIR_FAILURE ;
4316 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 return CONVERT_WDI2VOS_STATUS(status) ;
4319}
Jeff Johnson295189b2012-06-20 16:38:30 -07004320/*
4321 * FUNCTION: WDA_SetBssKeyReqCallback
4322 * send SET BSS key RSP back to PE
4323 */
4324void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4325{
4326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4327 tWDA_CbContext *pWDA;
4328 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004330 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004331 if(NULL == pWdaParams)
4332 {
4333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004334 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 VOS_ASSERT(0) ;
4336 return ;
4337 }
4338 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4339 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4341 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004343 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 return ;
4345}
Jeff Johnson295189b2012-06-20 16:38:30 -07004346/*
4347 * FUNCTION: WDA_ProcessSetStaKeyReq
4348 * Request to WDI for programming the STA key( key for Unicast frames
4349 * Encryption)
4350 */
4351VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4352 tSetStaKeyParams *setStaKeyParams )
4353{
4354 WDI_Status status = WDI_STATUS_SUCCESS ;
4355 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4356 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4357 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4358 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004361 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 if(NULL == wdiSetStaKeyParam)
4363 {
4364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 VOS_ASSERT(0);
4367 return VOS_STATUS_E_NOMEM;
4368 }
4369 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4370 if(NULL == pWdaParams)
4371 {
4372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 VOS_ASSERT(0);
4375 vos_mem_free(wdiSetStaKeyParam);
4376 return VOS_STATUS_E_NOMEM;
4377 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004379 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 /* copy set STA key params to WDI structure */
4381 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4382 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4383 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4384 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 if(setStaKeyParams->encType != eSIR_ED_NONE)
4386 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004387 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4389 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4390 {
4391 WDA_GetWepKeysFromCfg( pWDA,
4392 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4393 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4394 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4395 }
4396 else
4397 {
4398#ifdef WLAN_SOFTAP_FEATURE
4399 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4400 keyIndex++)
4401 {
4402 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4403 setStaKeyParams->key[keyIndex].keyId;
4404 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4405 setStaKeyParams->key[keyIndex].unicast;
4406 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4407 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4409 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4410 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4411 setStaKeyParams->key[keyIndex].paeRole;
4412 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4413 setStaKeyParams->key[keyIndex].keyLength;
4414 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4415 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4416 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4417 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4418 {
4419 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4420 }
4421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004422 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4423 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4424#else
4425 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4426 setStaKeyParams->key.keyId;
4427 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4428 setStaKeyParams->key.unicast;
4429 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4430 setStaKeyParams->key.keyDirection;
4431 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4432 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4433 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4434 setStaKeyParams->key.paeRole;
4435 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4436 setStaKeyParams->key.keyLength;
4437 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4438 setStaKeyParams->key[keyIndex].key,
4439 SIR_MAC_MAX_KEY_LENGTH);
4440 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4441#endif
4442 }
4443 }
4444 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4445 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 /* Store set key pointer, as this will be used for response */
4447 /* store Params pass it to WDI */
4448 pWdaParams->pWdaContext = pWDA;
4449 pWdaParams->wdaMsgParam = setStaKeyParams;
4450 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4452 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004453 if(IS_WDI_STATUS_FAILURE(status))
4454 {
4455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4456 "Failure in set STA Key Req WDI API, free all the memory " );
4457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4458 vos_mem_free(pWdaParams) ;
4459 setStaKeyParams->status = eSIR_FAILURE ;
4460 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 return CONVERT_WDI2VOS_STATUS(status) ;
4463}
Jeff Johnson295189b2012-06-20 16:38:30 -07004464/*
4465 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4466 * send SET Bcast STA key RSP back to PE
4467 */
4468void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4469{
4470 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4471 tWDA_CbContext *pWDA;
4472 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004474 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004475 if(NULL == pWdaParams)
4476 {
4477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004478 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004479 VOS_ASSERT(0) ;
4480 return ;
4481 }
4482 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4483 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4485 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 return ;
4489}
4490
Jeff Johnson295189b2012-06-20 16:38:30 -07004491/*
4492 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4493 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4494 * Encryption)
4495 */
4496VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4497 tSetStaKeyParams *setStaKeyParams )
4498{
4499 WDI_Status status = WDI_STATUS_SUCCESS ;
4500 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4501 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4502 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4503 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004506 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 if(NULL == wdiSetStaKeyParam)
4508 {
4509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 VOS_ASSERT(0);
4512 return VOS_STATUS_E_NOMEM;
4513 }
4514 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4515 if(NULL == pWdaParams)
4516 {
4517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 VOS_ASSERT(0);
4520 vos_mem_free(wdiSetStaKeyParam);
4521 return VOS_STATUS_E_NOMEM;
4522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 /* copy set STA key params to WDI structure */
4526 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4527 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4528 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4529 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 if(setStaKeyParams->encType != eSIR_ED_NONE)
4531 {
4532#ifdef WLAN_SOFTAP_FEATURE
4533 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4534 keyIndex++)
4535 {
4536 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4537 setStaKeyParams->key[keyIndex].keyId;
4538 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4539 setStaKeyParams->key[keyIndex].unicast;
4540 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4541 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004542 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4543 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4544 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4545 setStaKeyParams->key[keyIndex].paeRole;
4546 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4547 setStaKeyParams->key[keyIndex].keyLength;
4548 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4549 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004551 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4552 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4553#else
4554 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4555 setStaKeyParams->key.keyId;
4556 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4557 setStaKeyParams->key.unicast;
4558 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4559 setStaKeyParams->key.keyDirection;
4560 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4561 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4562 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4563 setStaKeyParams->key.paeRole;
4564 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4565 setStaKeyParams->key.keyLength;
4566 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4567 setStaKeyParams->key[keyIndex].key,
4568 SIR_MAC_MAX_KEY_LENGTH);
4569 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4570#endif
4571 }
4572 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 /* Store set key pointer, as this will be used for response */
4574 /* store Params pass it to WDI */
4575 pWdaParams->pWdaContext = pWDA;
4576 pWdaParams->wdaMsgParam = setStaKeyParams;
4577 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4579 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 if(IS_WDI_STATUS_FAILURE(status))
4581 {
4582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4583 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4585 vos_mem_free(pWdaParams) ;
4586 setStaKeyParams->status = eSIR_FAILURE ;
4587 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 return CONVERT_WDI2VOS_STATUS(status) ;
4590}
Jeff Johnson295189b2012-06-20 16:38:30 -07004591/*
4592 * FUNCTION: WDA_RemoveStaKeyReqCallback
4593 * send SET BSS key RSP back to PE
4594 */
4595void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4596{
4597 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4598 tWDA_CbContext *pWDA;
4599 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004601 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 if(NULL == pWdaParams)
4603 {
4604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004605 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004606 VOS_ASSERT(0) ;
4607 return ;
4608 }
4609 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4610 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4612 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004615 return ;
4616}
4617
Jeff Johnson295189b2012-06-20 16:38:30 -07004618/*
4619 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4620 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4621 */
4622VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4623 tRemoveStaKeyParams *removeStaKeyParams )
4624{
4625 WDI_Status status = WDI_STATUS_SUCCESS ;
4626 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4627 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4628 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4629 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004631 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004632 if(NULL == wdiRemoveStaKeyParam)
4633 {
4634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004635 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004636 VOS_ASSERT(0);
4637 return VOS_STATUS_E_NOMEM;
4638 }
4639 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4640 if(NULL == pWdaParams)
4641 {
4642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004643 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 VOS_ASSERT(0);
4645 vos_mem_free(wdiRemoveStaKeyParam);
4646 return VOS_STATUS_E_NOMEM;
4647 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 /* copy remove STA key params to WDI structure*/
4649 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4650 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4651 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4652 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4653 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004654 /* Store remove key pointer, as this will be used for response */
4655 /* store Params pass it to WDI */
4656 pWdaParams->pWdaContext = pWDA;
4657 pWdaParams->wdaMsgParam = removeStaKeyParams;
4658 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4660 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004661 if(IS_WDI_STATUS_FAILURE(status))
4662 {
4663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4664 "Failure in remove STA Key Req WDI API, free all the memory " );
4665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4666 vos_mem_free(pWdaParams) ;
4667 removeStaKeyParams->status = eSIR_FAILURE ;
4668 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 return CONVERT_WDI2VOS_STATUS(status) ;
4671}
Jeff Johnson295189b2012-06-20 16:38:30 -07004672/*
4673 * FUNCTION: WDA_IsHandleSetLinkStateReq
4674 * Update the WDA state and return the status to handle this message or not
4675 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004676WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4677 tWDA_CbContext *pWDA,
4678 tLinkStateParams *linkStateParams)
4679{
4680 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004681 switch(linkStateParams->state)
4682 {
4683 case eSIR_LINK_PREASSOC_STATE:
4684 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4685 /*
4686 * set the WDA state to PRE ASSOC
4687 * copy the BSSID into pWDA to use it in join request and return,
4688 * No need to handle these messages.
4689 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004690 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4691 {
4692 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004694 }
4695 else
4696 {
4697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004698 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004699 VOS_ASSERT(0);
4700 }
4701
4702 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4703 {
4704 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004706 }
4707 else
4708 {
4709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004710 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004711 VOS_ASSERT(0);
4712 }
4713
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4715 *channel and after ) so reset the WDA state to ready when the second
4716 * time UMAC issue the link state with PREASSOC
4717 */
4718 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4719 {
4720 /* RESET WDA state back to WDA_READY_STATE */
4721 pWDA->wdaState = WDA_READY_STATE;
4722 }
4723 else
4724 {
4725 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4726 }
4727 //populate linkState info in WDACbCtxt
4728 pWDA->linkState = linkStateParams->state;
4729 status = WDA_IGNORE_SET_LINK_STATE;
4730 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 default:
4732 if(pWDA->wdaState != WDA_READY_STATE)
4733 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004734 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4735 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4736 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4737 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4738 *the ASSERT in WDA_Stop during module unload.*/
4739 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4740 {
4741 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004742 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004743 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004744 else
4745 {
4746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004747 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004748 status = WDA_IGNORE_SET_LINK_STATE;
4749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 }
4751 break;
4752 }
4753
4754 return status;
4755}
Jeff Johnson295189b2012-06-20 16:38:30 -07004756/*
4757 * FUNCTION: WDA_SetLinkStateCallback
4758 * call back function for set link state from WDI
4759 */
4760void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4761{
4762 tWDA_CbContext *pWDA;
4763 tLinkStateParams *linkStateParams;
4764 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004766 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004767 if(NULL == pWdaParams)
4768 {
4769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004770 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 VOS_ASSERT(0) ;
4772 return ;
4773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 /*
4777 * In STA mode start the BA activity check timer after association
4778 * and in AP mode start BA activity check timer after BSS start */
4779 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4780 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4781 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4782 {
4783 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4784 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004785 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 /*
4787 * No respone required for WDA_SET_LINK_STATE so free the request
4788 * param here
4789 */
4790 if( pWdaParams != NULL )
4791 {
4792 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4793 {
4794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4795 }
4796 vos_mem_free(pWdaParams);
4797 }
4798 return ;
4799}
Jeff Johnson295189b2012-06-20 16:38:30 -07004800/*
4801 * FUNCTION: WDA_ProcessSetLinkState
4802 * Request to WDI to set the link status.
4803 */
4804VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4805 tLinkStateParams *linkStateParams)
4806{
4807 WDI_Status status = WDI_STATUS_SUCCESS ;
4808 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4809 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4810 sizeof(WDI_SetLinkReqParamsType)) ;
4811 tWDA_ReqParams *pWdaParams ;
4812 tpAniSirGlobal pMac;
4813 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4814
4815 if(NULL == pMac)
4816 {
4817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004818 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004819 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004820 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 return VOS_STATUS_E_FAILURE;
4822 }
4823
4824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004825 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 if(NULL == wdiSetLinkStateParam)
4827 {
4828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004830 VOS_ASSERT(0);
4831 return VOS_STATUS_E_NOMEM;
4832 }
4833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4834 if(NULL == pWdaParams)
4835 {
4836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004838 VOS_ASSERT(0);
4839 vos_mem_free(wdiSetLinkStateParam);
4840 return VOS_STATUS_E_NOMEM;
4841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 if(WDA_IGNORE_SET_LINK_STATE ==
4843 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4844 {
4845 status = WDI_STATUS_E_FAILURE;
4846 }
4847 else
4848 {
4849 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4850 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4852 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4854 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 pWdaParams->pWdaContext = pWDA;
4856 /* Store remove key pointer, as this will be used for response */
4857 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004858 /* store Params pass it to WDI */
4859 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4860 /* Stop Timer only other than GO role and concurrent session */
4861 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4862 && !vos_concurrent_sessions_running() &&
4863 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4864 {
4865 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4868 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 if(IS_WDI_STATUS_FAILURE(status))
4870 {
4871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4872 "Failure in set link state Req WDI API, free all the memory " );
4873 }
4874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 if(IS_WDI_STATUS_FAILURE(status))
4876 {
4877 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004878 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 vos_mem_free(pWdaParams);
4880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004881 return CONVERT_WDI2VOS_STATUS(status) ;
4882}
Jeff Johnson295189b2012-06-20 16:38:30 -07004883/*
4884 * FUNCTION: WDA_GetStatsReqParamsCallback
4885 * send the response to PE with Stats received from WDI
4886 */
4887void WDA_GetStatsReqParamsCallback(
4888 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4889 void* pUserData)
4890{
4891 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4892 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4893
4894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004895 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 pGetPEStatsRspParams =
4897 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4898 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4899
4900 if(NULL == pGetPEStatsRspParams)
4901 {
4902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 VOS_ASSERT(0);
4905 return;
4906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4908 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4909 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4910 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4911 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4912
4913 //Fill the Session Id Properly in PE
4914 pGetPEStatsRspParams->sessionId = 0;
4915 pGetPEStatsRspParams->rc =
4916 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4917 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4918 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004919 vos_mem_copy( pGetPEStatsRspParams + 1,
4920 wdiGetStatsRsp + 1,
4921 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 /* send response to UMAC*/
4923 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4924
4925 return;
4926}
4927
Jeff Johnson295189b2012-06-20 16:38:30 -07004928/*
4929 * FUNCTION: WDA_ProcessGetStatsReq
4930 * Request to WDI to get the statistics
4931 */
4932VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4933 tAniGetPEStatsReq *pGetStatsParams)
4934{
4935 WDI_Status status = WDI_STATUS_SUCCESS ;
4936 WDI_GetStatsReqParamsType wdiGetStatsParam;
4937 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004939 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004940 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4941 pGetStatsParams->staId;
4942 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4943 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 status = WDI_GetStatsReq(&wdiGetStatsParam,
4946 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004947 if(IS_WDI_STATUS_FAILURE(status))
4948 {
4949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4950 "Failure in Get Stats Req WDI API, free all the memory " );
4951 pGetPEStatsRspParams =
4952 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4953 if(NULL == pGetPEStatsRspParams)
4954 {
4955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004956 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004958 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 return VOS_STATUS_E_NOMEM;
4960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4962 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4963 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4964 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4965 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4966 (void *)pGetPEStatsRspParams, 0) ;
4967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 /* Free the request message */
4969 vos_mem_free(pGetStatsParams);
4970 return CONVERT_WDI2VOS_STATUS(status);
4971}
Jeff Johnson295189b2012-06-20 16:38:30 -07004972/*
4973 * FUNCTION: WDA_UpdateEDCAParamCallback
4974 * call back function for Update EDCA params from WDI
4975 */
4976void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4977{
4978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4979 tEdcaParams *pEdcaParams;
4980
4981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004982 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004983 if(NULL == pWdaParams)
4984 {
4985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004986 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 VOS_ASSERT(0) ;
4988 return ;
4989 }
4990 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4992 vos_mem_free(pWdaParams);
4993 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 return ;
4995}
Jeff Johnson295189b2012-06-20 16:38:30 -07004996/*
4997 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4998 * Request to WDI to Update the EDCA params.
4999 */
5000VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5001 tEdcaParams *pEdcaParams)
5002{
5003 WDI_Status status = WDI_STATUS_SUCCESS ;
5004 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5005 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5006 sizeof(WDI_UpdateEDCAParamsType)) ;
5007 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005009 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005010 if(NULL == wdiEdcaParam)
5011 {
5012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005013 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005015 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 return VOS_STATUS_E_NOMEM;
5017 }
5018 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5019 if(NULL == pWdaParams)
5020 {
5021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 VOS_ASSERT(0);
5024 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005025 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 return VOS_STATUS_E_NOMEM;
5027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005028 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5029 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5030 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5031 &pEdcaParams->acbe);
5032 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5033 &pEdcaParams->acbk);
5034 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5035 &pEdcaParams->acvi);
5036 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5037 &pEdcaParams->acvo);
5038 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 pWdaParams->pWdaContext = pWDA;
5040 /* Store remove key pointer, as this will be used for response */
5041 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005042 /* store Params pass it to WDI */
5043 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005044 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5045 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 if(IS_WDI_STATUS_FAILURE(status))
5047 {
5048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5049 "Failure in Update EDCA Params WDI API, free all the memory " );
5050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5051 vos_mem_free(pWdaParams);
5052 vos_mem_free(pEdcaParams);
5053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 return CONVERT_WDI2VOS_STATUS(status) ;
5055}
Jeff Johnson295189b2012-06-20 16:38:30 -07005056/*
5057 * FUNCTION: WDA_AddBAReqCallback
5058 * send ADD BA RSP back to PE
5059 */
5060void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5061 void* pUserData)
5062{
5063 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5064 tWDA_CbContext *pWDA;
5065 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005067 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 if(NULL == pWdaParams)
5069 {
5070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005071 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 VOS_ASSERT(0) ;
5073 return ;
5074 }
5075 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5076 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5078 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005080 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005081 return ;
5082}
5083
Jeff Johnson295189b2012-06-20 16:38:30 -07005084/*
5085 * FUNCTION: WDA_ProcessAddBAReq
5086 * Request to WDI to Update the ADDBA REQ params.
5087 */
5088VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5089 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5090{
Jeff Johnson43971f52012-07-17 12:26:56 -07005091 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005092 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5093 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5094 sizeof(WDI_AddBAReqParamsType)) ;
5095 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005097 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005098 if(NULL == wdiAddBAReqParam)
5099 {
5100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005101 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005102 VOS_ASSERT(0);
5103 return VOS_STATUS_E_NOMEM;
5104 }
5105 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5106 if(NULL == pWdaParams)
5107 {
5108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005109 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005110 VOS_ASSERT(0);
5111 vos_mem_free(wdiAddBAReqParam);
5112 return VOS_STATUS_E_NOMEM;
5113 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005114 do
5115 {
5116 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005117 wdiAddBaInfo->ucSTAIdx = staIdx ;
5118 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5119 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005120 } while(0) ;
5121 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005122 pWdaParams->pWdaContext = pWDA;
5123 /* store Params pass it to WDI */
5124 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5125 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005126 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5127 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005128
Jeff Johnson43971f52012-07-17 12:26:56 -07005129 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 {
5131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005132 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5133 status = CONVERT_WDI2VOS_STATUS(wstatus);
5134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 vos_mem_free(pWdaParams);
5136 pAddBAReqParams->status = eSIR_FAILURE;
5137 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5138 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005139 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005140}
Jeff Johnson295189b2012-06-20 16:38:30 -07005141/*
5142 * FUNCTION: WDA_AddBASessionReqCallback
5143 * send ADD BA SESSION RSP back to PE/(or TL)
5144 */
5145void WDA_AddBASessionReqCallback(
5146 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5147{
5148 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5149 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5150 tWDA_CbContext *pWDA;
5151 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005153 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 if(NULL == pWdaParams)
5155 {
5156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005157 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 VOS_ASSERT(0) ;
5159 return ;
5160 }
5161 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5162 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 if( NULL == pAddBAReqParams )
5164 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005166 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005168 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5169 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 return ;
5171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5173 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 /*
5175 * if WDA in update TL state, update TL with BA session parama and send
5176 * another request to HAL(/WDI) (ADD_BA_REQ)
5177 */
5178
5179 if((VOS_STATUS_SUCCESS ==
5180 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5181 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5182 {
5183 /* Update TL with BA info received from HAL/WDI */
5184 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5185 wdiAddBaSession->usBaSessionID,
5186 wdiAddBaSession->ucSTAIdx,
5187 wdiAddBaSession->ucBaTID,
5188 wdiAddBaSession->ucBaBufferSize,
5189 wdiAddBaSession->ucWinSize,
5190 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005191 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5192 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5193 }
5194 else
5195 {
5196 pAddBAReqParams->status =
5197 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5198
5199 /* Setting Flag to indicate that Set BA is success */
5200 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5201 {
5202 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5203 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5204 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005208 /*Reset the WDA state to READY */
5209 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005210 return ;
5211}
5212
Jeff Johnson295189b2012-06-20 16:38:30 -07005213/*
5214 * FUNCTION: WDA_ProcessAddBASessionReq
5215 * Request to WDI to Update the ADDBA REQ params.
5216 */
5217VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5218 tAddBAParams *pAddBAReqParams)
5219{
5220 WDI_Status status = WDI_STATUS_SUCCESS ;
5221 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5222 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5223 sizeof(WDI_AddBASessionReqParamsType)) ;
5224 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 if(NULL == wdiAddBASessionReqParam)
5228 {
5229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005231 VOS_ASSERT(0);
5232 return VOS_STATUS_E_NOMEM;
5233 }
5234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5235 if(NULL == pWdaParams)
5236 {
5237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 VOS_ASSERT(0);
5240 vos_mem_free(wdiAddBASessionReqParam);
5241 return VOS_STATUS_E_NOMEM;
5242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005243 /*
5244 * Populate ADD BA parameters and pass these paarmeters to WDI.
5245 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5246 * the state to track if these is BA recipient case or BA initiator
5247 * case.
5248 */
5249 do
5250 {
5251 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5252 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5253 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5254 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5255 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5256 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5257 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005259 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5260 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5261 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5262 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5263 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 /* check the BA direction and update state accordingly */
5265 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5266 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5267 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5268
5269 }while(0) ;
5270 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 pWdaParams->pWdaContext = pWDA;
5272 /* Store ADD BA pointer, as this will be used for response */
5273 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5274 /* store Params pass it to WDI */
5275 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005276 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5277 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005278 if(IS_WDI_STATUS_FAILURE(status))
5279 {
5280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5281 "Failure in ADD BA Session REQ Params WDI API, free all the memory " );
5282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5283 vos_mem_free(pWdaParams->wdaMsgParam);
5284 vos_mem_free(pWdaParams);
5285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005287}
Jeff Johnson295189b2012-06-20 16:38:30 -07005288/*
5289 * FUNCTION: WDA_DelBANotifyTL
5290 * send DEL BA IND to TL
5291 */
5292void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5293 tDelBAParams *pDelBAReqParams)
5294{
5295 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5296 //tSirMsgQ msg;
5297 vos_msg_t vosMsg;
5298 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 if(NULL == pDelBAInd)
5300 {
5301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005303 VOS_ASSERT(0) ;
5304 return;
5305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5307 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5308 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5309 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005310
Jeff Johnson295189b2012-06-20 16:38:30 -07005311
5312 vosMsg.type = WDA_DELETEBA_IND;
5313 vosMsg.bodyptr = pDelBAInd;
5314 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5315 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5316 {
5317 vosStatus = VOS_STATUS_E_BADMSG;
5318 }
5319}
Jeff Johnson295189b2012-06-20 16:38:30 -07005320/*
5321 * FUNCTION: WDA_DelBAReqCallback
5322 * send DEL BA RSP back to PE
5323 */
5324void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5325{
5326 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5327 tWDA_CbContext *pWDA;
5328 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005330 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 if(NULL == pWdaParams)
5332 {
5333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005334 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005335 VOS_ASSERT(0) ;
5336 return ;
5337 }
5338 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5339 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005340 /* Notify TL about DEL BA in case of recipinet */
5341 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5342 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5343 {
5344 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5345 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005346 /*
5347 * No respone required for WDA_DELBA_IND so just free the request
5348 * param here
5349 */
5350 vos_mem_free(pDelBAReqParams);
5351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5352 vos_mem_free(pWdaParams);
5353 return ;
5354}
5355
Jeff Johnson295189b2012-06-20 16:38:30 -07005356/*
5357 * FUNCTION: WDA_ProcessDelBAReq
5358 * Request to WDI to Update the DELBA REQ params.
5359 */
5360VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5361 tDelBAParams *pDelBAReqParams)
5362{
5363 WDI_Status status = WDI_STATUS_SUCCESS ;
5364 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5365 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5366 sizeof(WDI_DelBAReqParamsType)) ;
5367 tWDA_ReqParams *pWdaParams ;
5368 tANI_U16 staIdx = 0;
5369 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005371 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 if(NULL == wdiDelBAReqParam)
5373 {
5374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005376 VOS_ASSERT(0);
5377 return VOS_STATUS_E_NOMEM;
5378 }
5379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5380 if(NULL == pWdaParams)
5381 {
5382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005384 VOS_ASSERT(0);
5385 vos_mem_free(wdiDelBAReqParam);
5386 return VOS_STATUS_E_NOMEM;
5387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5389 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5390 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5391 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 pWdaParams->pWdaContext = pWDA;
5393 /* Store DEL BA pointer, as this will be used for response */
5394 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005395 /* store Params pass it to WDI */
5396 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5398 * maintained in WDA, so that WDA can retry for another BA session
5399 */
5400 staIdx = pDelBAReqParams->staIdx;
5401 tid = pDelBAReqParams->baTID;
5402 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 status = WDI_DelBAReq(wdiDelBAReqParam,
5404 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005405 if(IS_WDI_STATUS_FAILURE(status))
5406 {
5407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5408 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5410 vos_mem_free(pWdaParams->wdaMsgParam);
5411 vos_mem_free(pWdaParams);
5412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005414}
Jeff Johnson295189b2012-06-20 16:38:30 -07005415/*
5416 * FUNCTION: WDA_AddTSReqCallback
5417 * send ADD TS RSP back to PE
5418 */
5419void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5420{
5421 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5422 tWDA_CbContext *pWDA;
5423 tAddTsParams *pAddTsReqParams;
5424
5425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005426 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 if(NULL == pWdaParams)
5428 {
5429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005430 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 VOS_ASSERT(0) ;
5432 return ;
5433 }
5434 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5435 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5437 vos_mem_free(pWdaParams);
5438
5439 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 return ;
5442}
5443
Jeff Johnson295189b2012-06-20 16:38:30 -07005444/*
5445 * FUNCTION: WDA_ProcessAddTSReq
5446 * Request to WDI to Update the ADD TS REQ params.
5447 */
5448VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5449 tAddTsParams *pAddTsReqParams)
5450{
5451 WDI_Status status = WDI_STATUS_SUCCESS ;
5452 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5453 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5454 sizeof(WDI_AddTSReqParamsType)) ;
5455 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005458 if(NULL == wdiAddTSReqParam)
5459 {
5460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005462 VOS_ASSERT(0);
5463 return VOS_STATUS_E_NOMEM;
5464 }
5465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5466 if(NULL == pWdaParams)
5467 {
5468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005470 VOS_ASSERT(0);
5471 vos_mem_free(wdiAddTSReqParam);
5472 return VOS_STATUS_E_NOMEM;
5473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5475 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 //TS IE
5477 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5478 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5479 pAddTsReqParams->tspec.length;
5480
5481 //TS IE : TS INFO : TRAFFIC
5482 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5483 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5484 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5485 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5486 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5487 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5488 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5489 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5490 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5491 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5492 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5493 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5494 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5495 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5496 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5497 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5498
5499 //TS IE : TS INFO : SCHEDULE
5500 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5501 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5502 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5503 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005504 //TS IE
5505 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5506 pAddTsReqParams->tspec.nomMsduSz;
5507 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5508 pAddTsReqParams->tspec.maxMsduSz;
5509 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5510 pAddTsReqParams->tspec.minSvcInterval;
5511 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5512 pAddTsReqParams->tspec.maxSvcInterval;
5513 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5514 pAddTsReqParams->tspec.inactInterval;
5515 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5516 pAddTsReqParams->tspec.suspendInterval;
5517 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5518 pAddTsReqParams->tspec.svcStartTime;
5519 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5520 pAddTsReqParams->tspec.minDataRate;
5521 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5522 pAddTsReqParams->tspec.meanDataRate;
5523 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5524 pAddTsReqParams->tspec.peakDataRate;
5525 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5526 pAddTsReqParams->tspec.maxBurstSz;
5527 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5528 pAddTsReqParams->tspec.delayBound;
5529 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5530 pAddTsReqParams->tspec.minPhyRate;
5531 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5532 pAddTsReqParams->tspec.surplusBw;
5533 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5534 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 /* TODO: tAddTsParams doesn't have the following fields */
5536#if 0
5537 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5538 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5539 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5540 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5541#endif
5542 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5543
5544 pWdaParams->pWdaContext = pWDA;
5545 /* Store ADD TS pointer, as this will be used for response */
5546 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 /* store Params pass it to WDI */
5548 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 status = WDI_AddTSReq(wdiAddTSReqParam,
5550 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005551 if(IS_WDI_STATUS_FAILURE(status))
5552 {
5553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5554 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5556 vos_mem_free(pWdaParams);
5557 pAddTsReqParams->status = eSIR_FAILURE ;
5558 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5559 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005560 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005561}
5562
Jeff Johnson295189b2012-06-20 16:38:30 -07005563/*
5564 * FUNCTION: WDA_DelTSReqCallback
5565 * send DEL TS RSP back to PE
5566 */
5567void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5568{
5569 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005571 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5573 vos_mem_free(pWdaParams->wdaMsgParam) ;
5574 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005575 /*
5576 * No respone required for WDA_DEL_TS_REQ so just free the request
5577 * param here
5578 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005579 return ;
5580}
5581
Jeff Johnson295189b2012-06-20 16:38:30 -07005582/*
5583 * FUNCTION: WDA_ProcessDelTSReq
5584 * Request to WDI to Update the DELTS REQ params.
5585 */
5586VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5587 tDelTsParams *pDelTSReqParams)
5588{
5589 WDI_Status status = WDI_STATUS_SUCCESS ;
5590 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5591 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5592 sizeof(WDI_DelTSReqParamsType)) ;
5593 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005595 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005596 if(NULL == wdiDelTSReqParam)
5597 {
5598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005600 VOS_ASSERT(0);
5601 return VOS_STATUS_E_NOMEM;
5602 }
5603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5604 if(NULL == pWdaParams)
5605 {
5606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 VOS_ASSERT(0);
5609 vos_mem_free(wdiDelTSReqParam);
5610 return VOS_STATUS_E_NOMEM;
5611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005612 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5613 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5614 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5615 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5616 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005617 pWdaParams->pWdaContext = pWDA;
5618 /* Store DEL TS pointer, as this will be used for response */
5619 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 /* store Params pass it to WDI */
5621 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 status = WDI_DelTSReq(wdiDelTSReqParam,
5623 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005624 if(IS_WDI_STATUS_FAILURE(status))
5625 {
5626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5627 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5629 vos_mem_free(pWdaParams->wdaMsgParam);
5630 vos_mem_free(pWdaParams);
5631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005633}
Jeff Johnson295189b2012-06-20 16:38:30 -07005634/*
5635 * FUNCTION: WDA_UpdateBeaconParamsCallback
5636 * Free the memory. No need to send any response to PE in this case
5637 */
5638void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5639{
5640 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005642 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005643 if(NULL == pWdaParams)
5644 {
5645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005646 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 VOS_ASSERT(0) ;
5648 return ;
5649 }
5650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5651 vos_mem_free(pWdaParams->wdaMsgParam) ;
5652 vos_mem_free(pWdaParams);
5653 /*
5654 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5655 * param here
5656 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005657 return ;
5658}
Jeff Johnson295189b2012-06-20 16:38:30 -07005659/*
5660 * FUNCTION: WDA_ProcessUpdateBeaconParams
5661 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5662 */
5663VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5664 tUpdateBeaconParams *pUpdateBeaconParams)
5665{
5666 WDI_Status status = WDI_STATUS_SUCCESS ;
5667 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5668 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5669 sizeof(WDI_UpdateBeaconParamsType)) ;
5670 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005672 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 if(NULL == wdiUpdateBeaconParams)
5674 {
5675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 VOS_ASSERT(0);
5678 return VOS_STATUS_E_NOMEM;
5679 }
5680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5681 if(NULL == pWdaParams)
5682 {
5683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005685 VOS_ASSERT(0);
5686 vos_mem_free(wdiUpdateBeaconParams);
5687 return VOS_STATUS_E_NOMEM;
5688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5690 pUpdateBeaconParams->bssIdx;
5691 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5692 pUpdateBeaconParams->fShortPreamble;
5693 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5694 pUpdateBeaconParams->fShortSlotTime;
5695 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5696 pUpdateBeaconParams->beaconInterval;
5697 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5698 pUpdateBeaconParams->llaCoexist;
5699 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5700 pUpdateBeaconParams->llbCoexist;
5701 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5702 pUpdateBeaconParams->llgCoexist;
5703 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5704 pUpdateBeaconParams->ht20MhzCoexist;
5705 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5706 pUpdateBeaconParams->llnNonGFCoexist;
5707 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5708 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5709 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5710 pUpdateBeaconParams->fRIFSMode;
5711 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5712 pUpdateBeaconParams->paramChangeBitmap;
5713 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5714
5715 pWdaParams->pWdaContext = pWDA;
5716 /* Store UpdateBeacon Req pointer, as this will be used for response */
5717 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 /* store Params pass it to WDI */
5719 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005720 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5721 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5722 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005723 if(IS_WDI_STATUS_FAILURE(status))
5724 {
5725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5726 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5727 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5728 vos_mem_free(pWdaParams->wdaMsgParam);
5729 vos_mem_free(pWdaParams);
5730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005732}
Jeff Johnson295189b2012-06-20 16:38:30 -07005733#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005734/*
5735 * FUNCTION: WDA_TSMStatsReqCallback
5736 * send TSM Stats RSP back to PE
5737 */
5738void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5739{
5740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5741 tWDA_CbContext *pWDA = NULL;
5742 tTSMStats *pTsmRspParams = NULL;
5743
5744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005745 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 if(NULL == pWdaParams)
5747 {
5748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005749 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005750 VOS_ASSERT(0) ;
5751 return ;
5752 }
5753 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5754 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005755 if( NULL == pTsmRspParams )
5756 {
5757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005758 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 VOS_ASSERT( 0 );
5760 return ;
5761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5763 vos_mem_free(pWdaParams);
5764
5765 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5766 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5767 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5768 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5769 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5770 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5771 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5772 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5773 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5774 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005776 return ;
5777}
5778
5779
Jeff Johnson295189b2012-06-20 16:38:30 -07005780/*
5781 * FUNCTION: WDA_ProcessTsmStatsReq
5782 * Request to WDI to get the TSM Stats params.
5783 */
5784VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5785 tTSMStats *pTsmStats)
5786{
5787 WDI_Status status = WDI_STATUS_SUCCESS ;
5788 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5789 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005791 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005792 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5793 sizeof(WDI_TSMStatsReqParamsType));
5794 if(NULL == wdiTSMReqParam)
5795 {
5796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005797 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005798 VOS_ASSERT(0);
5799 return VOS_STATUS_E_NOMEM;
5800 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5802 if(NULL == pWdaParams)
5803 {
5804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005805 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005806 VOS_ASSERT(0);
5807 vos_mem_free(wdiTSMReqParam);
5808 return VOS_STATUS_E_NOMEM;
5809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005810 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5811 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5812 pTsmStats->bssId,
5813 sizeof(wpt_macAddr));
5814 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5815
5816 pWdaParams->pWdaContext = pWDA;
5817 /* Store TSM Stats pointer, as this will be used for response */
5818 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005819 /* store Params pass it to WDI */
5820 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005821 status = WDI_TSMStatsReq(wdiTSMReqParam,
5822 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005823 if(IS_WDI_STATUS_FAILURE(status))
5824 {
5825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5826 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5828 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005829 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 return CONVERT_WDI2VOS_STATUS(status) ;
5832}
5833#endif
5834/*
5835 * FUNCTION: WDA_SendBeaconParamsCallback
5836 * No need to send any response to PE in this case
5837 */
5838void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5839{
5840
Jeff Johnson295189b2012-06-20 16:38:30 -07005841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005842 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005843 return ;
5844}
Jeff Johnson295189b2012-06-20 16:38:30 -07005845/*
5846 * FUNCTION: WDA_ProcessSendBeacon
5847 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5848 * start beacon trasmission
5849 */
5850VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5851 tSendbeaconParams *pSendbeaconParams)
5852{
5853 WDI_Status status = WDI_STATUS_SUCCESS ;
5854 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005856 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5858 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5859 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5860 pSendbeaconParams->beaconLength;
5861#ifdef WLAN_SOFTAP_FEATURE
5862 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5863 pSendbeaconParams->timIeOffset;
5864#endif
5865#ifdef WLAN_FEATURE_P2P
5866 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5867 pSendbeaconParams->p2pIeOffset;
5868#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 /* Copy the beacon template to local buffer */
5870 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5871 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5872 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5873
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5875 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005876 if(IS_WDI_STATUS_FAILURE(status))
5877 {
5878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5879 "Failure in SEND BEACON REQ Params WDI API" );
5880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005881 vos_mem_free(pSendbeaconParams);
5882 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005883}
Jeff Johnson295189b2012-06-20 16:38:30 -07005884/*
5885 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5886 * No need to send any response to PE in this case
5887 */
5888void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5889{
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005891 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 return ;
5893}
5894
Jeff Johnson295189b2012-06-20 16:38:30 -07005895/*
5896 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5897 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5898 * send probe response
5899 */
5900VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5901 tSendProbeRespParams *pSendProbeRspParams)
5902{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005903 WDI_Status status = WDI_STATUS_SUCCESS;
5904 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5905 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005907 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005908
5909 if (!wdiSendProbeRspParam)
5910 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5911
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005913 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005915 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 /* Copy the Probe Response template to local buffer */
5918 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005919 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 pSendProbeRspParams->pProbeRespTemplate,
5921 pSendProbeRspParams->probeRespTemplateLen);
5922 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005923 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5925 WDI_PROBE_REQ_BITMAP_IE_LEN);
5926
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005927 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005928
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005929 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 if(IS_WDI_STATUS_FAILURE(status))
5932 {
5933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5934 "Failure in SEND Probe RSP Params WDI API" );
5935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005937 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939}
Jeff Johnson295189b2012-06-20 16:38:30 -07005940#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5941/*
5942 * FUNCTION: WDA_SetMaxTxPowerCallBack
5943 * send the response to PE with power value received from WDI
5944 */
5945void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5946 void* pUserData)
5947{
5948 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5949 tWDA_CbContext *pWDA = NULL;
5950 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5951
5952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 if(NULL == pWdaParams)
5955 {
5956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005957 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 VOS_ASSERT(0) ;
5959 return ;
5960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5962 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 if( NULL == pMaxTxPowerParams )
5964 {
5965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005966 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005967 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5969 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 return ;
5971 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005972
Jeff Johnson295189b2012-06-20 16:38:30 -07005973
5974 /*need to free memory for the pointers used in the
5975 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5977 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005978 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005979
Jeff Johnson295189b2012-06-20 16:38:30 -07005980
5981 /* send response to UMAC*/
5982 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5983
5984 return;
5985}
Jeff Johnson295189b2012-06-20 16:38:30 -07005986/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005987 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005988 * Request to WDI to send set Max Tx Power Request
5989 */
5990 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5991 tMaxTxPowerParams *MaxTxPowerParams)
5992{
5993 WDI_Status status = WDI_STATUS_SUCCESS;
5994 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5995 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005996
Jeff Johnson295189b2012-06-20 16:38:30 -07005997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005998 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005999
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6001 sizeof(WDI_SetMaxTxPowerParamsType));
6002 if(NULL == wdiSetMaxTxPowerParams)
6003 {
6004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 VOS_ASSERT(0);
6007 return VOS_STATUS_E_NOMEM;
6008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6010 if(NULL == pWdaParams)
6011 {
6012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006013 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 vos_mem_free(wdiSetMaxTxPowerParams);
6015 VOS_ASSERT(0);
6016 return VOS_STATUS_E_NOMEM;
6017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 /* Copy.Max.Tx.Power Params to WDI structure */
6019 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6020 MaxTxPowerParams->bssId,
6021 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006022 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6023 MaxTxPowerParams->selfStaMacAddr,
6024 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6026 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006027 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 pWdaParams->pWdaContext = pWDA;
6029 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006030 /* store Params pass it to WDI */
6031 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6033 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 if(IS_WDI_STATUS_FAILURE(status))
6035 {
6036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6037 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6039 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006040 /* send response to UMAC*/
6041 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 }
6043 return CONVERT_WDI2VOS_STATUS(status);
6044
6045}
Jeff Johnson295189b2012-06-20 16:38:30 -07006046#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006047#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07006048/*
6049 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6050 * Free the memory. No need to send any response to PE in this case
6051 */
6052void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6053{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6055
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006057 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006058
6059 if(NULL == pWdaParams)
6060 {
6061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006062 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006063 VOS_ASSERT(0) ;
6064 return ;
6065 }
6066
6067 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6068 vos_mem_free(pWdaParams->wdaMsgParam) ;
6069 vos_mem_free(pWdaParams);
6070
Jeff Johnson295189b2012-06-20 16:38:30 -07006071 /*
6072 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6073 * so just free the request param here
6074 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 return ;
6076}
6077
Jeff Johnson295189b2012-06-20 16:38:30 -07006078/*
6079 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6080 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6081 */
6082VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6083 tP2pPsParams *pP2pPsConfigParams)
6084{
6085 WDI_Status status = WDI_STATUS_SUCCESS ;
6086 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6087 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6088 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006089 tWDA_ReqParams *pWdaParams = NULL;
6090
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006092 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006093 if(NULL == wdiSetP2PGONOAReqParam)
6094 {
6095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 VOS_ASSERT(0);
6098 return VOS_STATUS_E_NOMEM;
6099 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006100
6101 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6102 if(NULL == pWdaParams)
6103 {
6104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006105 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006106 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006107 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006108 VOS_ASSERT(0);
6109 return VOS_STATUS_E_NOMEM;
6110 }
6111
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6113 pP2pPsConfigParams->opp_ps;
6114 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6115 pP2pPsConfigParams->ctWindow;
6116 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6117 pP2pPsConfigParams->count;
6118 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6119 pP2pPsConfigParams->duration;
6120 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6121 pP2pPsConfigParams->interval;
6122 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6123 pP2pPsConfigParams->single_noa_duration;
6124 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6125 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006126
Jeff Johnson295189b2012-06-20 16:38:30 -07006127 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6128 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006129 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6130
Jeff Johnson295189b2012-06-20 16:38:30 -07006131 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006132 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6133 pWdaParams->pWdaContext = pWDA;
6134
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006136 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6137
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 if(IS_WDI_STATUS_FAILURE(status))
6139 {
6140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6141 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6143 vos_mem_free(pWdaParams->wdaMsgParam);
6144 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 return CONVERT_WDI2VOS_STATUS(status);
6147
Jeff Johnson295189b2012-06-20 16:38:30 -07006148}
6149#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006150#ifdef WLAN_FEATURE_VOWIFI_11R
6151/*
6152 * FUNCTION: WDA_AggrAddTSReqCallback
6153 * send ADD AGGREGATED TS RSP back to PE
6154 */
6155void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6156{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006157 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6158 tWDA_CbContext *pWDA;
6159 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006162 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006163 if(NULL == pWdaParams)
6164 {
6165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006166 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006167 VOS_ASSERT(0) ;
6168 return ;
6169 }
6170
6171 pWDA = pWdaParams->pWdaContext;
6172 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006173
6174 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6175 {
6176 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006178 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006179
6180 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6181 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 return ;
6183}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006184/*
6185 * FUNCTION: WDA_ProcessAddTSReq
6186 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6187 */
6188VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6189 tAggrAddTsParams *pAggrAddTsReqParams)
6190{
6191 WDI_Status status = WDI_STATUS_SUCCESS ;
6192 int i;
6193 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006194 tWDA_ReqParams *pWdaParams = NULL;
6195
6196
Jeff Johnson295189b2012-06-20 16:38:30 -07006197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006198 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6200 sizeof(WDI_AggrAddTSReqParamsType)) ;
6201 if(NULL == wdiAggrAddTSReqParam)
6202 {
6203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006204 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 VOS_ASSERT(0);
6206 return VOS_STATUS_E_NOMEM;
6207 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006208
6209
6210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6211 if(NULL == pWdaParams)
6212 {
6213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006214 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006215 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006216 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006217 VOS_ASSERT(0);
6218 return VOS_STATUS_E_NOMEM;
6219 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006220 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6221 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6222 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006223 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6224 {
6225 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6226 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6227 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6229 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6230 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6231 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6232 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6233 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6234 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6235 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6236 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6237 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6238 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6239 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6240 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6241 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6242 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6243 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006244 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6245 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006246 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6247 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6248 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6249 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6250 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6251 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6252 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6253 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6254 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6255 pAggrAddTsReqParams->tspec[i].inactInterval;
6256 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6257 pAggrAddTsReqParams->tspec[i].suspendInterval;
6258 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6259 pAggrAddTsReqParams->tspec[i].svcStartTime;
6260 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6261 pAggrAddTsReqParams->tspec[i].minDataRate;
6262 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6263 pAggrAddTsReqParams->tspec[i].meanDataRate;
6264 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6265 pAggrAddTsReqParams->tspec[i].peakDataRate;
6266 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6267 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6268 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6269 pAggrAddTsReqParams->tspec[i].delayBound;
6270 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6271 pAggrAddTsReqParams->tspec[i].minPhyRate;
6272 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6273 pAggrAddTsReqParams->tspec[i].surplusBw;
6274 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6275 pAggrAddTsReqParams->tspec[i].mediumTime;
6276 }
6277
6278 /* TODO: tAggrAddTsParams doesn't have the following fields */
6279#if 0
6280 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6281 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6282 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6283 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6284#endif
6285 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6286
6287 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006288 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006289 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006290 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6291
6292 pWdaParams->pWdaContext = pWDA;
6293
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006295 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6296
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 if(IS_WDI_STATUS_FAILURE(status))
6298 {
6299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6300 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6302 vos_mem_free(pWdaParams);
6303
6304 /* send the failure response back to PE*/
6305 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6306 {
6307 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6308 }
6309
6310 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6311 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006313 return CONVERT_WDI2VOS_STATUS(status) ;
6314}
6315#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006316/*
6317 * FUNCTION: WDA_EnterImpsReqCallback
6318 * send Enter IMPS RSP back to PE
6319 */
6320void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6321{
6322 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006324 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006325 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 return ;
6327}
Jeff Johnson295189b2012-06-20 16:38:30 -07006328/*
6329 * FUNCTION: WDA_ProcessEnterImpsReq
6330 * Request to WDI to Enter IMPS power state.
6331 */
6332VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6333{
6334 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006336 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006337 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 if(IS_WDI_STATUS_FAILURE(status))
6339 {
6340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6341 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006342 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 return CONVERT_WDI2VOS_STATUS(status) ;
6345}
Jeff Johnson295189b2012-06-20 16:38:30 -07006346/*
6347 * FUNCTION: WDA_ExitImpsReqCallback
6348 * send Exit IMPS RSP back to PE
6349 */
6350void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6351{
6352 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006354 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006355 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 return ;
6357}
Jeff Johnson295189b2012-06-20 16:38:30 -07006358/*
6359 * FUNCTION: WDA_ProcessExitImpsReq
6360 * Request to WDI to Exit IMPS power state.
6361 */
6362VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6363{
6364 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006366 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 if(IS_WDI_STATUS_FAILURE(status))
6369 {
6370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6371 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006372 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 return CONVERT_WDI2VOS_STATUS(status) ;
6375}
Jeff Johnson295189b2012-06-20 16:38:30 -07006376/*
6377 * FUNCTION: WDA_EnterBmpsReqCallback
6378 * send Enter BMPS RSP back to PE
6379 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006380void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006381{
6382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6383 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006384 tEnterBmpsParams *pEnterBmpsRspParams;
6385
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006387 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006388 if(NULL == pWdaParams)
6389 {
6390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006391 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 VOS_ASSERT(0) ;
6393 return ;
6394 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006395
6396 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6397 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6398
6399 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6400 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6401
6402 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006404 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6405
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 return ;
6407}
Jeff Johnson295189b2012-06-20 16:38:30 -07006408/*
6409 * FUNCTION: WDA_ProcessEnterBmpsReq
6410 * Request to WDI to Enter BMPS power state.
6411 */
6412VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6413 tEnterBmpsParams *pEnterBmpsReqParams)
6414{
6415 WDI_Status status = WDI_STATUS_SUCCESS;
6416 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6417 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006419 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6421 {
6422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006423 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006424 VOS_ASSERT(0);
6425 return VOS_STATUS_E_FAILURE;
6426 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6428 if (NULL == wdiEnterBmpsReqParams)
6429 {
6430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006433 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6434 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006435 return VOS_STATUS_E_NOMEM;
6436 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6438 if (NULL == pWdaParams)
6439 {
6440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006441 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006442 VOS_ASSERT(0);
6443 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006444 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6445 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 return VOS_STATUS_E_NOMEM;
6447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006448 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6449 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6450 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6451 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 // For CCX and 11R Roaming
6453 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6454 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6455 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6456 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006457
Jeff Johnson295189b2012-06-20 16:38:30 -07006458 /* Store param pointer as passed in by caller */
6459 /* store Params pass it to WDI */
6460 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006461 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6464 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 if (IS_WDI_STATUS_FAILURE(status))
6466 {
6467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6468 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006470 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006472 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 return CONVERT_WDI2VOS_STATUS(status);
6475}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006476
6477
6478static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6479 WDI_Status wdiStatus,
6480 tExitBmpsParams *pExitBmpsReqParams)
6481{
6482 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6483
6484 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6485}
6486
6487
Jeff Johnson295189b2012-06-20 16:38:30 -07006488/*
6489 * FUNCTION: WDA_ExitBmpsReqCallback
6490 * send Exit BMPS RSP back to PE
6491 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006492void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006493{
6494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6495 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006496 tExitBmpsParams *pExitBmpsRspParams;
6497
Jeff Johnson295189b2012-06-20 16:38:30 -07006498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006499 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006500 if(NULL == pWdaParams)
6501 {
6502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006503 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 VOS_ASSERT(0) ;
6505 return ;
6506 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006507
6508 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6509 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6510
6511 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6512 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006513
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6515 vos_mem_free(pWdaParams) ;
6516
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006517 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 return ;
6519}
Jeff Johnson295189b2012-06-20 16:38:30 -07006520/*
6521 * FUNCTION: WDA_ProcessExitBmpsReq
6522 * Request to WDI to Exit BMPS power state.
6523 */
6524VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6525 tExitBmpsParams *pExitBmpsReqParams)
6526{
6527 WDI_Status status = WDI_STATUS_SUCCESS ;
6528 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6529 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6530 sizeof(WDI_ExitBmpsReqParamsType)) ;
6531 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006533 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 if(NULL == wdiExitBmpsReqParams)
6535 {
6536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006539 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006540 return VOS_STATUS_E_NOMEM;
6541 }
6542 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6543 if(NULL == pWdaParams)
6544 {
6545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006546 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006547 VOS_ASSERT(0);
6548 vos_mem_free(wdiExitBmpsReqParams);
6549 return VOS_STATUS_E_NOMEM;
6550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006551 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006552
6553 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6554
Jeff Johnson295189b2012-06-20 16:38:30 -07006555 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6556
6557 /* Store param pointer as passed in by caller */
6558 /* store Params pass it to WDI */
6559 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6560 pWdaParams->pWdaContext = pWDA;
6561 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006562 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6563 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 if(IS_WDI_STATUS_FAILURE(status))
6565 {
6566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6567 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6569 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006570 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006572 return CONVERT_WDI2VOS_STATUS(status) ;
6573}
Jeff Johnson295189b2012-06-20 16:38:30 -07006574/*
6575 * FUNCTION: WDA_EnterUapsdReqCallback
6576 * send Enter UAPSD RSP back to PE
6577 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006578void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006579{
6580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6581 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006582 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006584 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006585 if(NULL == pWdaParams)
6586 {
6587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006588 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 VOS_ASSERT(0) ;
6590 return ;
6591 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006592
6593 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6594 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6595
6596 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6597 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6598
Jeff Johnson295189b2012-06-20 16:38:30 -07006599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6600 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006601 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 return ;
6603}
Jeff Johnson295189b2012-06-20 16:38:30 -07006604/*
6605 * FUNCTION: WDA_ProcessEnterUapsdReq
6606 * Request to WDI to Enter UAPSD power state.
6607 */
6608VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6609 tUapsdParams *pEnterUapsdReqParams)
6610{
6611 WDI_Status status = WDI_STATUS_SUCCESS ;
6612 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6613 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6614 sizeof(WDI_EnterUapsdReqParamsType)) ;
6615 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006617 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 if(NULL == wdiEnterUapsdReqParams)
6619 {
6620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006622 VOS_ASSERT(0);
6623 return VOS_STATUS_E_NOMEM;
6624 }
6625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6626 if(NULL == pWdaParams)
6627 {
6628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006630 VOS_ASSERT(0);
6631 vos_mem_free(wdiEnterUapsdReqParams);
6632 return VOS_STATUS_E_NOMEM;
6633 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006634 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6635 pEnterUapsdReqParams->beDeliveryEnabled;
6636 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6637 pEnterUapsdReqParams->beTriggerEnabled;
6638 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6639 pEnterUapsdReqParams->bkDeliveryEnabled;
6640 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6641 pEnterUapsdReqParams->bkTriggerEnabled;
6642 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6643 pEnterUapsdReqParams->viDeliveryEnabled;
6644 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6645 pEnterUapsdReqParams->viTriggerEnabled;
6646 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6647 pEnterUapsdReqParams->voDeliveryEnabled;
6648 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6649 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006650 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006651
6652 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6653
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 /* Store param pointer as passed in by caller */
6655 /* store Params pass it to WDI */
6656 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6657 pWdaParams->pWdaContext = pWDA;
6658 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6660 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006661 if(IS_WDI_STATUS_FAILURE(status))
6662 {
6663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6664 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6665 vos_mem_free(pWdaParams->wdaMsgParam) ;
6666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6667 vos_mem_free(pWdaParams) ;
6668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006669 return CONVERT_WDI2VOS_STATUS(status) ;
6670}
Jeff Johnson295189b2012-06-20 16:38:30 -07006671/*
6672 * FUNCTION: WDA_ExitUapsdReqCallback
6673 * send Exit UAPSD RSP back to PE
6674 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006675void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006676{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006677
6678 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6679 tWDA_CbContext *pWDA;
6680 tExitUapsdParams *pExitUapsdRspParams;
6681
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006683 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006684 if(NULL == pWdaParams)
6685 {
6686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006687 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006688 VOS_ASSERT(0);
6689 return;
6690 }
6691
6692 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6693 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6694
6695 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6696 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6697
6698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6699 vos_mem_free(pWdaParams) ;
6700
6701 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006702 return ;
6703}
Jeff Johnson295189b2012-06-20 16:38:30 -07006704/*
6705 * FUNCTION: WDA_ProcessExitUapsdReq
6706 * Request to WDI to Exit UAPSD power state.
6707 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006708VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6709 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006710{
6711 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006712 tWDA_ReqParams *pWdaParams ;
6713 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6714 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6715 sizeof(WDI_ExitUapsdReqParamsType)) ;
6716
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006718 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006719
6720 if(NULL == wdiExitUapsdReqParams)
6721 {
6722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006723 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006724 VOS_ASSERT(0);
6725 return VOS_STATUS_E_NOMEM;
6726 }
6727 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6728 if(NULL == pWdaParams)
6729 {
6730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006731 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006732 VOS_ASSERT(0);
6733 vos_mem_free(wdiExitUapsdReqParams);
6734 return VOS_STATUS_E_NOMEM;
6735 }
6736
6737 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6738 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6739
6740 /* Store param pointer as passed in by caller */
6741 /* store Params pass it to WDI */
6742 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6743 pWdaParams->pWdaContext = pWDA;
6744 pWdaParams->wdaMsgParam = pExitUapsdParams;
6745
6746 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 if(IS_WDI_STATUS_FAILURE(status))
6748 {
6749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6750 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006751 vos_mem_free(pWdaParams->wdaMsgParam) ;
6752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6753 vos_mem_free(pWdaParams) ;
6754
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 return CONVERT_WDI2VOS_STATUS(status) ;
6757}
6758
Jeff Johnson295189b2012-06-20 16:38:30 -07006759/*
6760 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6761 *
6762 */
6763void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6764{
6765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006767 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 if(NULL == pWdaParams)
6769 {
6770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006771 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 VOS_ASSERT(0) ;
6773 return ;
6774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 if( pWdaParams != NULL )
6776 {
6777 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6778 {
6779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6780 }
6781 if( pWdaParams->wdaMsgParam != NULL )
6782 {
6783 vos_mem_free(pWdaParams->wdaMsgParam) ;
6784 }
6785 vos_mem_free(pWdaParams) ;
6786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 return ;
6788}
Jeff Johnson295189b2012-06-20 16:38:30 -07006789/*
6790 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6791 * Request to WDI to set the power save params at start.
6792 */
6793VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6794 tSirPowerSaveCfg *pPowerSaveCfg)
6795{
6796 WDI_Status status = WDI_STATUS_SUCCESS ;
6797 tHalCfg *tlvStruct = NULL ;
6798 tANI_U8 *tlvStructStart = NULL ;
6799 v_PVOID_t *configParam;
6800 tANI_U32 configParamSize;
6801 tANI_U32 *configDataValue;
6802 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6803 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006805 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6807 {
6808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006809 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006811 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 return VOS_STATUS_E_FAILURE;
6813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6815 if (NULL == wdiPowerSaveCfg)
6816 {
6817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006818 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006820 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 return VOS_STATUS_E_NOMEM;
6822 }
6823 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6824 if(NULL == pWdaParams)
6825 {
6826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 VOS_ASSERT(0);
6829 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006830 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 return VOS_STATUS_E_NOMEM;
6832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6834 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 if(NULL == configParam)
6836 {
6837 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006838 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006839 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 vos_mem_free(pWdaParams);
6841 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006842 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 return VOS_STATUS_E_NOMEM;
6844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 vos_mem_set(configParam, configParamSize, 0);
6846 wdiPowerSaveCfg->pConfigBuffer = configParam;
6847 tlvStruct = (tHalCfg *)configParam;
6848 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6850 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6851 tlvStruct->length = sizeof(tANI_U32);
6852 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6853 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6855 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006856 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
6857 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6858 tlvStruct->length = sizeof(tANI_U32);
6859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6860 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07006861 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6862 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
6864 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6865 tlvStruct->length = sizeof(tANI_U32);
6866 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6867 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6869 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
6871 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6872 tlvStruct->length = sizeof(tANI_U32);
6873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6874 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6876 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
6878 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6879 tlvStruct->length = sizeof(tANI_U32);
6880 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6881 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6883 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006884 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6885 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6886 tlvStruct->length = sizeof(tANI_U32);
6887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6888 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006889 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6890 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6892 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6893 tlvStruct->length = sizeof(tANI_U32);
6894 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6895 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6897 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
6899 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6900 tlvStruct->length = sizeof(tANI_U32);
6901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6902 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6903 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6904 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006905 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6906 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6907 tlvStruct->length = sizeof(tANI_U32);
6908 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6909 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6910 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6911 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6913 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6914 tlvStruct->length = sizeof(tANI_U32);
6915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6916 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6918 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6920 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6921 tlvStruct->length = sizeof(tANI_U32);
6922 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6923 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6925 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 /* store Params pass it to WDI */
6929 pWdaParams->wdaMsgParam = configParam;
6930 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6931 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6933 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006934 if(IS_WDI_STATUS_FAILURE(status))
6935 {
6936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6937 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6938 vos_mem_free(pWdaParams->wdaMsgParam);
6939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6940 vos_mem_free(pWdaParams);
6941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006942 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006943 return CONVERT_WDI2VOS_STATUS(status);
6944}
Jeff Johnson295189b2012-06-20 16:38:30 -07006945/*
6946 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6947 *
6948 */
6949void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6950{
6951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6955 vos_mem_free(pWdaParams);
6956
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 return ;
6958}
Jeff Johnson295189b2012-06-20 16:38:30 -07006959/*
6960 * FUNCTION: WDA_SetUapsdAcParamsReq
6961 * Request to WDI to set the UAPSD params for an ac (sta mode).
6962 */
6963VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6964 tUapsdInfo *pUapsdInfo)
6965{
6966 WDI_Status status = WDI_STATUS_SUCCESS;
6967 tWDA_CbContext *pWDA = NULL ;
6968 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6969 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6970 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6971 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006973 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 if(NULL == wdiUapsdParams)
6975 {
6976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006977 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 VOS_ASSERT(0);
6979 return VOS_STATUS_E_NOMEM;
6980 }
6981 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6982 if(NULL == pWdaParams)
6983 {
6984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006985 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 VOS_ASSERT(0);
6987 vos_mem_free(wdiUapsdParams);
6988 return VOS_STATUS_E_NOMEM;
6989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6991 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6992 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6993 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6994 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6995 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006997 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 pWdaParams->pWdaContext = pWDA;
6999 /* Store param pointer as passed in by caller */
7000 pWdaParams->wdaMsgParam = pUapsdInfo;
7001 /* store Params pass it to WDI */
7002 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
7004 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
7005 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007006 if(IS_WDI_STATUS_FAILURE(status))
7007 {
7008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7009 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7011 vos_mem_free(pWdaParams);
7012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7014 return VOS_STATUS_SUCCESS;
7015 else
7016 return VOS_STATUS_E_FAILURE;
7017
Jeff Johnson295189b2012-06-20 16:38:30 -07007018}
7019/*
7020 * FUNCTION: WDA_ClearUapsdAcParamsReq
7021 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7022 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7023 * and again enter the UPASD with the modified params. Hence the disable
7024 * function was kept empty.
7025 *
7026 */
7027VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7028{
7029 /* do nothing */
7030 return VOS_STATUS_SUCCESS;
7031}
Jeff Johnson295189b2012-06-20 16:38:30 -07007032/*
7033 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7034 *
7035 */
7036void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
7037{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7039
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007041 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007042
7043 if(NULL == pWdaParams)
7044 {
7045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007046 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007047 VOS_ASSERT(0) ;
7048 return ;
7049 }
7050
7051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7052 vos_mem_free(pWdaParams->wdaMsgParam);
7053 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007054
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 //print a msg, nothing else to do
7056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7057 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 return ;
7059}
Jeff Johnson295189b2012-06-20 16:38:30 -07007060/*
7061 * FUNCTION: WDA_UpdateUapsdParamsReq
7062 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7063 */
7064VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7065 tUpdateUapsdParams* pUpdateUapsdInfo)
7066{
7067 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007068 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7070 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7071 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007072 tWDA_ReqParams *pWdaParams = NULL;
7073
Jeff Johnson295189b2012-06-20 16:38:30 -07007074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007075 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 if(NULL == wdiUpdateUapsdParams)
7077 {
7078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007080 VOS_ASSERT(0);
7081 return VOS_STATUS_E_NOMEM;
7082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7084 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7085 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007086
7087 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7088 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007089 {
7090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007091 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007093 vos_mem_free(pUpdateUapsdInfo);
7094 vos_mem_free(wdiUpdateUapsdParams);
7095 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007098 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007100 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7101 pWdaParams->pWdaContext = pWDA;
7102
Jeff Johnson43971f52012-07-17 12:26:56 -07007103 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007104 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7105 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007106
Jeff Johnson43971f52012-07-17 12:26:56 -07007107 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 {
7109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7110 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007111 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7113 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007114 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007116 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007117}
Jeff Johnson295189b2012-06-20 16:38:30 -07007118/*
7119 * FUNCTION: WDA_ConfigureRxpFilterCallback
7120 *
7121 */
7122void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7123{
7124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007126 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007127 if(WDI_STATUS_SUCCESS != wdiStatus)
7128 {
7129 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007130 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 if(NULL == pWdaParams)
7133 {
7134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007135 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 VOS_ASSERT(0) ;
7137 return ;
7138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7140 vos_mem_free(pWdaParams->wdaMsgParam);
7141 vos_mem_free(pWdaParams);
7142 return ;
7143}
Jeff Johnson295189b2012-06-20 16:38:30 -07007144/*
7145 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7146 *
7147 */
7148VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7149 tSirWlanSetRxpFilters *pWlanSuspendParam)
7150{
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007152 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7154 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7155 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7156 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007158 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007159 if(NULL == wdiRxpFilterParams)
7160 {
7161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 VOS_ASSERT(0);
7164 vos_mem_free(pWlanSuspendParam);
7165 return VOS_STATUS_E_NOMEM;
7166 }
7167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7168 if(NULL == pWdaParams)
7169 {
7170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007171 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 VOS_ASSERT(0);
7173 vos_mem_free(wdiRxpFilterParams);
7174 vos_mem_free(pWlanSuspendParam);
7175 return VOS_STATUS_E_NOMEM;
7176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7178 pWlanSuspendParam->setMcstBcstFilter;
7179 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7180 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7181
7182 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 pWdaParams->pWdaContext = pWDA;
7184 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7185 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007186 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007187 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7188 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007189 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 {
7191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7192 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007193 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7195 vos_mem_free(pWdaParams->wdaMsgParam);
7196 vos_mem_free(pWdaParams);
7197 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007198 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007199}
Jeff Johnson295189b2012-06-20 16:38:30 -07007200/*
7201 * FUNCTION: WDA_WdiIndicationCallback
7202 *
7203 */
7204void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7205 void* pUserData)
7206{
7207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007208 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007209}
Jeff Johnson295189b2012-06-20 16:38:30 -07007210/*
7211 * FUNCTION: WDA_ProcessWlanSuspendInd
7212 *
7213 */
7214VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7215 tSirWlanSuspendParam *pWlanSuspendParam)
7216{
7217 WDI_Status wdiStatus;
7218 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007220 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7222 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7223 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7224 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007226 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7227 if(WDI_STATUS_PENDING == wdiStatus)
7228 {
7229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007230 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007231 }
7232 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7233 {
7234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007235 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 vos_mem_free(pWlanSuspendParam);
7238 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7239}
7240
Jeff Johnson295189b2012-06-20 16:38:30 -07007241/*
7242 * FUNCTION: WDA_ProcessWlanResumeCallback
7243 *
7244 */
7245void WDA_ProcessWlanResumeCallback(
7246 WDI_SuspendResumeRspParamsType *resumeRspParams,
7247 void* pUserData)
7248{
7249 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007251 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007252 if(NULL == pWdaParams)
7253 {
7254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007255 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 VOS_ASSERT(0) ;
7257 return ;
7258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7260 {
7261 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007262 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7265 vos_mem_free(pWdaParams->wdaMsgParam);
7266 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007267 return ;
7268}
Jeff Johnson295189b2012-06-20 16:38:30 -07007269/*
7270 * FUNCTION: WDA_ProcessWlanResumeReq
7271 *
7272 */
7273VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7274 tSirWlanResumeParam *pWlanResumeParam)
7275{
7276 WDI_Status wdiStatus;
7277 WDI_ResumeParamsType *wdiResumeParams =
7278 (WDI_ResumeParamsType *)vos_mem_malloc(
7279 sizeof(WDI_ResumeParamsType) ) ;
7280 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007282 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 if(NULL == wdiResumeParams)
7284 {
7285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 VOS_ASSERT(0);
7288 return VOS_STATUS_E_NOMEM;
7289 }
7290 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7291 if(NULL == pWdaParams)
7292 {
7293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007295 VOS_ASSERT(0);
7296 vos_mem_free(wdiResumeParams);
7297 return VOS_STATUS_E_NOMEM;
7298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007299 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7300 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007302 wdiResumeParams->wdiReqStatusCB = NULL;
7303 pWdaParams->wdaMsgParam = pWlanResumeParam;
7304 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7305 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007306 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7307 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7308 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007309 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7310 {
7311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7312 "Failure in Host Resume REQ WDI API, free all the memory " );
7313 VOS_ASSERT(0);
7314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7315 vos_mem_free(pWdaParams->wdaMsgParam);
7316 vos_mem_free(pWdaParams);
7317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007318 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7319}
7320
Jeff Johnson295189b2012-06-20 16:38:30 -07007321/*
7322 * FUNCTION: WDA_SetBeaconFilterReqCallback
7323 *
7324 */
7325void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7326{
7327 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007329 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 if(NULL == pWdaParams)
7331 {
7332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007333 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007334 VOS_ASSERT(0) ;
7335 return ;
7336 }
7337
7338 vos_mem_free(pWdaParams->wdaMsgParam) ;
7339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7340 vos_mem_free(pWdaParams) ;
7341 /*
7342 * No respone required for SetBeaconFilter req so just free the request
7343 * param here
7344 */
7345
Jeff Johnson295189b2012-06-20 16:38:30 -07007346 return ;
7347}
Jeff Johnson295189b2012-06-20 16:38:30 -07007348/*
7349 * FUNCTION: WDA_SetBeaconFilterReq
7350 * Request to WDI to send the beacon filtering related information.
7351 */
7352VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7353 tBeaconFilterMsg* pBeaconFilterInfo)
7354{
7355 WDI_Status status = WDI_STATUS_SUCCESS;
7356 tANI_U8 *dstPtr, *srcPtr;
7357 tANI_U8 filterLength;
7358 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7359 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7360 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7361 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007363 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007364 if(NULL == wdiBeaconFilterInfo)
7365 {
7366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007368 VOS_ASSERT(0);
7369 return VOS_STATUS_E_NOMEM;
7370 }
7371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7372 if(NULL == pWdaParams)
7373 {
7374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007376 VOS_ASSERT(0);
7377 vos_mem_free(wdiBeaconFilterInfo);
7378 return VOS_STATUS_E_NOMEM;
7379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7381 pBeaconFilterInfo->beaconInterval;
7382 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7383 pBeaconFilterInfo->capabilityInfo;
7384 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7385 pBeaconFilterInfo->capabilityMask;
7386 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007387
7388 //Fill the BssIdx
7389 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7390
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 //Fill structure with info contained in the beaconFilterTable
7392 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7393 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7394 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7395 if(WDI_BEACON_FILTER_LEN < filterLength)
7396 {
7397 filterLength = WDI_BEACON_FILTER_LEN;
7398 }
7399 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7401 /* Store param pointer as passed in by caller */
7402 /* store Params pass it to WDI */
7403 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7404 pWdaParams->pWdaContext = pWDA;
7405 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7406
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7408 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 if(IS_WDI_STATUS_FAILURE(status))
7410 {
7411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7412 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7413 vos_mem_free(pWdaParams->wdaMsgParam) ;
7414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7415 vos_mem_free(pWdaParams) ;
7416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 return CONVERT_WDI2VOS_STATUS(status) ;
7418}
Jeff Johnson295189b2012-06-20 16:38:30 -07007419/*
7420 * FUNCTION: WDA_RemBeaconFilterReqCallback
7421 *
7422 */
7423void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7424{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007425 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7426
Jeff Johnson295189b2012-06-20 16:38:30 -07007427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007428 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007429
7430 if(NULL == pWdaParams)
7431 {
7432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007433 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007434 VOS_ASSERT(0) ;
7435 return ;
7436 }
7437
7438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7439 vos_mem_free(pWdaParams->wdaMsgParam);
7440 vos_mem_free(pWdaParams);
7441
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 //print a msg, nothing else to do
7443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7444 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 return ;
7446}
Jeff Johnson295189b2012-06-20 16:38:30 -07007447 // TODO: PE does not have this feature for now implemented,
7448 // but the support for removing beacon filter exists between
7449 // HAL and FW. This function can be called whenever PE defines
7450 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007451/*
7452 * FUNCTION: WDA_RemBeaconFilterReq
7453 * Request to WDI to send the removal of beacon filtering related information.
7454 */
7455VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7456 tRemBeaconFilterMsg* pBeaconFilterInfo)
7457{
7458 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007459 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7461 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7462 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007463 tWDA_ReqParams *pWdaParams ;
7464
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007466 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 if(NULL == wdiBeaconFilterInfo)
7468 {
7469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 VOS_ASSERT(0);
7472 return VOS_STATUS_E_NOMEM;
7473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7475 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 //Fill structure with info contained in the ucRemIeId
7477 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7478 pBeaconFilterInfo->ucRemIeId,
7479 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7480 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007481
7482 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7483 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007484 {
7485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007488 vos_mem_free(wdiBeaconFilterInfo);
7489 vos_mem_free(pBeaconFilterInfo);
7490 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 }
7492
7493 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007494 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007495 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007496 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7497
7498 pWdaParams->pWdaContext = pWDA;
7499
Jeff Johnson43971f52012-07-17 12:26:56 -07007500 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007501 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007502 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 {
7504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7505 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007506 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7508 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007509 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007511 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007512}
Jeff Johnson295189b2012-06-20 16:38:30 -07007513/*
7514 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7515 *
7516 */
7517void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7518{
7519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007521 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007522 if(NULL == pWdaParams)
7523 {
7524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007525 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 VOS_ASSERT(0) ;
7527 return ;
7528 }
7529
7530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7531 vos_mem_free(pWdaParams) ;
7532
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 return ;
7534}
Jeff Johnson295189b2012-06-20 16:38:30 -07007535/*
7536 * FUNCTION: WDA_SetRSSIThresholdsReq
7537 * Request to WDI to set the RSSI thresholds (sta mode).
7538 */
7539VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7540{
7541 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007542 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007543 tWDA_CbContext *pWDA = NULL ;
7544 v_PVOID_t pVosContext = NULL;
7545 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7546 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7547 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7548 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007550 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 if(NULL == wdiRSSIThresholdsInfo)
7552 {
7553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 VOS_ASSERT(0);
7556 return VOS_STATUS_E_NOMEM;
7557 }
7558 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7559 if(NULL == pWdaParams)
7560 {
7561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 VOS_ASSERT(0);
7564 vos_mem_free(wdiRSSIThresholdsInfo);
7565 return VOS_STATUS_E_NOMEM;
7566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007567 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7569 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7570 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007571 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7572 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7573 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007574 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7575 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7576 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7579 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7580
Jeff Johnson295189b2012-06-20 16:38:30 -07007581 /* Store param pointer as passed in by caller */
7582 /* store Params pass it to WDI */
7583 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7584 pWdaParams->pWdaContext = pWDA;
7585 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007586 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007587 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007588 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 {
7590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7591 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007592 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7594 vos_mem_free(pWdaParams) ;
7595 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007596 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007597
7598}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007599/*
7600 * FUNCTION: WDA_HostOffloadReqCallback
7601 *
7602 */
7603void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7604{
7605 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7606
7607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007608 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007609 if(NULL == pWdaParams)
7610 {
7611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007612 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 VOS_ASSERT(0) ;
7614 return ;
7615 }
7616
7617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7618 vos_mem_free(pWdaParams->wdaMsgParam);
7619 vos_mem_free(pWdaParams) ;
7620
7621 //print a msg, nothing else to do
7622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7623 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 return ;
7625}
Jeff Johnson295189b2012-06-20 16:38:30 -07007626/*
7627 * FUNCTION: WDA_ProcessHostOffloadReq
7628 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7629 * to broadcast traffic (sta mode).
7630 */
7631VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7632 tSirHostOffloadReq *pHostOffloadParams)
7633{
7634 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007635 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007636 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7637 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7638 sizeof(WDI_HostOffloadReqParamsType)) ;
7639 tWDA_ReqParams *pWdaParams ;
7640
7641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007642 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007643
7644 if(NULL == wdiHostOffloadInfo)
7645 {
7646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007647 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007648 VOS_ASSERT(0);
7649 return VOS_STATUS_E_NOMEM;
7650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007651 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7652 if(NULL == pWdaParams)
7653 {
7654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007656 VOS_ASSERT(0);
7657 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007658 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 return VOS_STATUS_E_NOMEM;
7660 }
7661
7662 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7663 pHostOffloadParams->offloadType;
7664 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7665 pHostOffloadParams->enableOrDisable;
7666
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007667 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7668 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7669
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7671 {
7672 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7673 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7674 pHostOffloadParams->params.hostIpv4Addr,
7675 4);
7676 break;
7677 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7678 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7679 pHostOffloadParams->params.hostIpv6Addr,
7680 16);
7681 break;
7682 case SIR_IPV6_NS_OFFLOAD:
7683 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7684 pHostOffloadParams->params.hostIpv6Addr,
7685 16);
7686
7687#ifdef WLAN_NS_OFFLOAD
7688 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7689 {
7690 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7691 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7692 16);
7693 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7694 }
7695 else
7696 {
7697 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7698 }
7699
7700 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7701 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7702 16);
7703 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7704 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7705 6);
7706
7707 //Only two are supported so let's go through them without a loop
7708 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7709 {
7710 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7711 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7712 16);
7713 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7714 }
7715 else
7716 {
7717 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7718 }
7719
7720 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7721 {
7722 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7723 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7724 16);
7725 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7726 }
7727 else
7728 {
7729 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7730 }
7731 break;
7732#endif //WLAN_NS_OFFLOAD
7733 default:
7734 {
7735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7736 "No Handling for Offload Type %x in WDA "
7737 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7738 //WDA_VOS_ASSERT(0) ;
7739 }
7740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007741 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007742
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007744 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 /* store Params pass it to WDI */
7746 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7747 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007748
Jeff Johnson295189b2012-06-20 16:38:30 -07007749
Jeff Johnson43971f52012-07-17 12:26:56 -07007750 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007751 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7752
Jeff Johnson43971f52012-07-17 12:26:56 -07007753 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 {
7755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7756 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007757 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7759 vos_mem_free(pWdaParams->wdaMsgParam);
7760 vos_mem_free(pWdaParams) ;
7761 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007762 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007763
7764}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007765/*
7766 * FUNCTION: WDA_KeepAliveReqCallback
7767 *
7768 */
7769void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7770{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7772
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007774 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007775
7776 if(NULL == pWdaParams)
7777 {
7778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007779 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007780 VOS_ASSERT(0) ;
7781 return ;
7782 }
7783
7784 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7785 vos_mem_free(pWdaParams->wdaMsgParam);
7786 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007787
Jeff Johnson295189b2012-06-20 16:38:30 -07007788 //print a msg, nothing else to do
7789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7790 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 return ;
7792}
Jeff Johnson295189b2012-06-20 16:38:30 -07007793/*
7794 * FUNCTION: WDA_ProcessKeepAliveReq
7795 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7796 * wakeup due to broadcast traffic (sta mode).
7797 */
7798VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7799 tSirKeepAliveReq *pKeepAliveParams)
7800{
7801 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007802 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7804 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7805 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007806 tWDA_ReqParams *pWdaParams;
7807
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007809 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 if(NULL == wdiKeepAliveInfo)
7811 {
7812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007815 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007816 return VOS_STATUS_E_NOMEM;
7817 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007818
7819 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7820 if(NULL == pWdaParams)
7821 {
7822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007823 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007824 VOS_ASSERT(0);
7825 vos_mem_free(wdiKeepAliveInfo);
7826 vos_mem_free(pKeepAliveParams);
7827 return VOS_STATUS_E_NOMEM;
7828 }
7829
Jeff Johnson295189b2012-06-20 16:38:30 -07007830 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7831 pKeepAliveParams->packetType;
7832 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7833 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007834
7835 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7836 pKeepAliveParams->bssId,
7837 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007838
7839 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7840 {
7841 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7842 pKeepAliveParams->hostIpv4Addr,
7843 SIR_IPV4_ADDR_LEN);
7844 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7845 pKeepAliveParams->destIpv4Addr,
7846 SIR_IPV4_ADDR_LEN);
7847 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7848 pKeepAliveParams->destMacAddr,
7849 SIR_MAC_ADDR_LEN);
7850 }
7851 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7852 {
7853 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7854 SIR_IPV4_ADDR_LEN,
7855 0);
7856 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7857 SIR_IPV4_ADDR_LEN,
7858 0);
7859 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7860 SIR_MAC_ADDR_LEN,
7861 0);
7862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007863 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007864
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007866 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007867 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007868 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7869 pWdaParams->pWdaContext = pWDA;
7870
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7872 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7873 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7874 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7875 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7877 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7878 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7879 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7880 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7882 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7883 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7884 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7885 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7886 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7887 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7888 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7890 "TimePeriod %d PacketType %d",
7891 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7892 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007893 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007894 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7895
Jeff Johnson43971f52012-07-17 12:26:56 -07007896 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 {
7898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7899 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007900 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7902 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007903 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007905 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007906
7907}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007908/*
7909 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7910 *
7911 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007912void WDA_WowlAddBcPtrnReqCallback(
7913 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7914 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007915{
7916 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007918 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 if(NULL == pWdaParams)
7920 {
7921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007922 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 VOS_ASSERT(0) ;
7924 return ;
7925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7927 vos_mem_free(pWdaParams->wdaMsgParam);
7928 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007929 return ;
7930}
Jeff Johnson295189b2012-06-20 16:38:30 -07007931/*
7932 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7933 * Request to WDI to add WOWL Bcast pattern
7934 */
7935VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7936 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7937{
7938 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007939 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007940 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7941 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7942 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7943 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007945 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007946 if(NULL == wdiWowlAddBcPtrnInfo)
7947 {
7948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 VOS_ASSERT(0);
7951 return VOS_STATUS_E_NOMEM;
7952 }
7953 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7954 if(NULL == pWdaParams)
7955 {
7956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007957 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007958 VOS_ASSERT(0);
7959 vos_mem_free(wdiWowlAddBcPtrnInfo);
7960 return VOS_STATUS_E_NOMEM;
7961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7963 pWowlAddBcPtrnParams->ucPatternId;
7964 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7965 pWowlAddBcPtrnParams->ucPatternByteOffset;
7966 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7967 pWowlAddBcPtrnParams->ucPatternMaskSize;
7968 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7969 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7971 {
7972 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7973 pWowlAddBcPtrnParams->ucPattern,
7974 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7975 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7976 pWowlAddBcPtrnParams->ucPatternMask,
7977 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7978 }
7979 else
7980 {
7981 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7982 pWowlAddBcPtrnParams->ucPattern,
7983 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7984 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7985 pWowlAddBcPtrnParams->ucPatternMask,
7986 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7987
7988 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7989 pWowlAddBcPtrnParams->ucPatternExt,
7990 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7991 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7992 pWowlAddBcPtrnParams->ucPatternMaskExt,
7993 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7994 }
7995
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007996 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7997 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7998
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 /* Store param pointer as passed in by caller */
8001 /* store Params pass it to WDI */
8002 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8003 pWdaParams->pWdaContext = pWDA;
8004 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008005 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008007 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 {
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8010 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008011 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 vos_mem_free(pWdaParams->wdaMsgParam) ;
8013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8014 vos_mem_free(pWdaParams) ;
8015 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008016 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008017
8018}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008019/*
8020 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8021 *
8022 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008023void WDA_WowlDelBcPtrnReqCallback(
8024 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8025 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008026{
8027 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008029 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 if(NULL == pWdaParams)
8031 {
8032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008033 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 VOS_ASSERT(0) ;
8035 return ;
8036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8038 vos_mem_free(pWdaParams->wdaMsgParam);
8039 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008040 return ;
8041}
Jeff Johnson295189b2012-06-20 16:38:30 -07008042/*
8043 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8044 * Request to WDI to delete WOWL Bcast pattern
8045 */
8046VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8047 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8048{
8049 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008050 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008051 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8052 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8053 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8054 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008056 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008057 if(NULL == wdiWowlDelBcPtrnInfo)
8058 {
8059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 VOS_ASSERT(0);
8062 return VOS_STATUS_E_NOMEM;
8063 }
8064 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8065 if(NULL == pWdaParams)
8066 {
8067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 VOS_ASSERT(0);
8070 vos_mem_free(wdiWowlDelBcPtrnInfo);
8071 return VOS_STATUS_E_NOMEM;
8072 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8074 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008075
8076 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8077 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8078
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 /* Store param pointer as passed in by caller */
8081 /* store Params pass it to WDI */
8082 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8083 pWdaParams->pWdaContext = pWDA;
8084 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008085 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008087 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 {
8089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8090 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008091 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 vos_mem_free(pWdaParams->wdaMsgParam) ;
8093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8094 vos_mem_free(pWdaParams) ;
8095 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008096 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097
8098}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008099/*
8100 * FUNCTION: WDA_WowlEnterReqCallback
8101 *
8102 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008103void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008104{
8105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8106 tWDA_CbContext *pWDA;
8107 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008109 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008110 if(NULL == pWdaParams)
8111 {
8112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008113 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 VOS_ASSERT(0) ;
8115 return ;
8116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8118 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8119
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008120 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8121
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8123 vos_mem_free(pWdaParams) ;
8124
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008125 pWowlEnterParams->status =
8126 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 return ;
8129}
Jeff Johnson295189b2012-06-20 16:38:30 -07008130/*
8131 * FUNCTION: WDA_ProcessWowlEnterReq
8132 * Request to WDI to enter WOWL
8133 */
8134VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8135 tSirHalWowlEnterParams *pWowlEnterParams)
8136{
8137 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008138 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8140 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8141 sizeof(WDI_WowlEnterReqParamsType)) ;
8142 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008144 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 if(NULL == wdiWowlEnterInfo)
8146 {
8147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008148 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008149 VOS_ASSERT(0);
8150 return VOS_STATUS_E_NOMEM;
8151 }
8152 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8153 if(NULL == pWdaParams)
8154 {
8155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008156 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008157 VOS_ASSERT(0);
8158 vos_mem_free(wdiWowlEnterInfo);
8159 return VOS_STATUS_E_NOMEM;
8160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008161 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8162 pWowlEnterParams->magicPtrn,
8163 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8165 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8167 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8169 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8171 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008172 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8173 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8175 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8177 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8179 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008180#ifdef WLAN_WAKEUP_EVENTS
8181 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8182 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8183
8184 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8185 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8186
8187 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8188 pWowlEnterParams->ucWowNetScanOffloadMatch;
8189
8190 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8191 pWowlEnterParams->ucWowGTKRekeyError;
8192
8193 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8194 pWowlEnterParams->ucWoWBSSConnLoss;
8195#endif // WLAN_WAKEUP_EVENTS
8196
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008197 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8198 pWowlEnterParams->bssIdx;
8199
Jeff Johnson295189b2012-06-20 16:38:30 -07008200 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 /* Store param pointer as passed in by caller */
8202 /* store Params pass it to WDI */
8203 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8204 pWdaParams->pWdaContext = pWDA;
8205 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008206 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008207 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008208 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 {
8210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8211 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008212 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 vos_mem_free(pWdaParams->wdaMsgParam) ;
8214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8215 vos_mem_free(pWdaParams) ;
8216 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008217 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008218
8219}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008220/*
8221 * FUNCTION: WDA_WowlExitReqCallback
8222 *
8223 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008224void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008225{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8227 tWDA_CbContext *pWDA;
8228 tSirHalWowlExitParams *pWowlExitParams;
8229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008230 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008231 if(NULL == pWdaParams)
8232 {
8233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008234 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008235 VOS_ASSERT(0) ;
8236 return ;
8237 }
8238 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8239 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8240
8241 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8242 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8243
8244 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8245 vos_mem_free(pWdaParams) ;
8246
Jeff Johnson295189b2012-06-20 16:38:30 -07008247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008248 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008249 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008250 return ;
8251}
Jeff Johnson295189b2012-06-20 16:38:30 -07008252/*
8253 * FUNCTION: WDA_ProcessWowlExitReq
8254 * Request to WDI to add WOWL Bcast pattern
8255 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008256VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8257 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008258{
8259 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008260 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008261 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8262 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8263 sizeof(WDI_WowlExitReqParamsType)) ;
8264 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008266 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008267 if(NULL == wdiWowlExitInfo)
8268 {
8269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008270 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008271 VOS_ASSERT(0);
8272 return VOS_STATUS_E_NOMEM;
8273 }
8274 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8275 if(NULL == pWdaParams)
8276 {
8277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008278 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008279 VOS_ASSERT(0);
8280 vos_mem_free(wdiWowlExitInfo);
8281 return VOS_STATUS_E_NOMEM;
8282 }
8283
8284 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8285 pWowlExitParams->bssIdx;
8286
8287 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8288
8289 /* Store param pointer as passed in by caller */
8290 /* store Params pass it to WDI */
8291 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8292 pWdaParams->pWdaContext = pWDA;
8293 pWdaParams->wdaMsgParam = pWowlExitParams;
8294
8295 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8296 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008297
Jeff Johnson43971f52012-07-17 12:26:56 -07008298 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008299 {
8300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8301 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008302 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8304 vos_mem_free(pWdaParams->wdaMsgParam);
8305 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008307 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008308}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008309/*
8310 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8311 * Request to WDI to determine whether a given station is capable of
8312 * using HW-based frame translation
8313 */
8314v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8315 tANI_U8 staIdx)
8316{
8317 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8318}
Jeff Johnson295189b2012-06-20 16:38:30 -07008319/*
8320 * FUNCTION: WDA_NvDownloadReqCallback
8321 * send NV Download RSP back to PE
8322 */
8323void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8324 void* pUserData)
8325{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008326
8327 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8328 tWDA_CbContext *pWDA;
8329
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008331 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008332
8333 if(NULL == pWdaParams)
8334 {
8335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008336 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008337 VOS_ASSERT(0) ;
8338 return ;
8339 }
8340
8341 pWDA = pWdaParams->pWdaContext;
8342
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8345 vos_mem_free(pWdaParams);
8346
Jeff Johnson295189b2012-06-20 16:38:30 -07008347 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 return ;
8349}
Jeff Johnson295189b2012-06-20 16:38:30 -07008350/*
8351 * FUNCTION: WDA_ProcessNvDownloadReq
8352 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8353 */
8354VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8355{
8356 /* Initialize the local Variables*/
8357 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8358 v_VOID_t *pNvBuffer=NULL;
8359 v_SIZE_t bufferSize = 0;
8360 WDI_Status status = WDI_STATUS_E_FAILURE;
8361 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008362 tWDA_ReqParams *pWdaParams ;
8363
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008365 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008366 if(NULL == pWDA)
8367 {
8368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008369 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008370 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 return VOS_STATUS_E_FAILURE;
8372 }
8373
8374 /* Get the NV structure base address and size from VOS */
8375 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8377 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 if(NULL == wdiNvDownloadReqParam)
8379 {
8380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008382 VOS_ASSERT(0);
8383 return VOS_STATUS_E_NOMEM;
8384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008385 /* Copy Params to wdiNvDownloadReqParam*/
8386 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8387 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008388
8389 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8390 if(NULL == pWdaParams)
8391 {
8392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008393 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008394 VOS_ASSERT(0);
8395 vos_mem_free(wdiNvDownloadReqParam);
8396 return VOS_STATUS_E_NOMEM;
8397 }
8398
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008400 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8401 pWdaParams->wdaMsgParam = NULL;
8402 pWdaParams->pWdaContext = pWDA;
8403
8404
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008406
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008408 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8409
Jeff Johnson295189b2012-06-20 16:38:30 -07008410 if(IS_WDI_STATUS_FAILURE(status))
8411 {
8412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8413 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008414 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8415 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008418}
8419/*
8420 * FUNCTION: WDA_FlushAcReqCallback
8421 * send Flush AC RSP back to TL
8422 */
8423void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8424{
8425 vos_msg_t wdaMsg = {0} ;
8426 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8427 tFlushACReq *pFlushACReqParams;
8428 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008430 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 if(NULL == pWdaParams)
8432 {
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008434 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 VOS_ASSERT(0) ;
8436 return ;
8437 }
8438
8439 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8440 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8441 if(NULL == pFlushACRspParams)
8442 {
8443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008446 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 return ;
8448 }
8449 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8450 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8451 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8452 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8453 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8454 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008455 vos_mem_free(pWdaParams->wdaMsgParam) ;
8456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8457 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008458 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8459 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8460 // POST message to TL
8461 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8462
Jeff Johnson295189b2012-06-20 16:38:30 -07008463 return ;
8464}
Jeff Johnson295189b2012-06-20 16:38:30 -07008465/*
8466 * FUNCTION: WDA_ProcessFlushAcReq
8467 * Request to WDI to Update the DELBA REQ params.
8468 */
8469VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8470 tFlushACReq *pFlushAcReqParams)
8471{
8472 WDI_Status status = WDI_STATUS_SUCCESS ;
8473 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8474 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8475 sizeof(WDI_FlushAcReqParamsType)) ;
8476 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008477 if(NULL == wdiFlushAcReqParam)
8478 {
8479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008481 VOS_ASSERT(0);
8482 return VOS_STATUS_E_NOMEM;
8483 }
8484 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8485 if(NULL == pWdaParams)
8486 {
8487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008489 VOS_ASSERT(0);
8490 vos_mem_free(wdiFlushAcReqParam);
8491 return VOS_STATUS_E_NOMEM;
8492 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008494 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8496 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8497 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8498 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 /* Store Flush AC pointer, as this will be used for response */
8500 /* store Params pass it to WDI */
8501 pWdaParams->pWdaContext = pWDA;
8502 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8503 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8505 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 if(IS_WDI_STATUS_FAILURE(status))
8507 {
8508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8509 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8510 vos_mem_free(pWdaParams->wdaMsgParam) ;
8511 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8512 vos_mem_free(pWdaParams) ;
8513 //TODO: respond to TL with failure
8514 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008515 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008516}
Jeff Johnson295189b2012-06-20 16:38:30 -07008517/*
8518 * FUNCTION: WDA_BtAmpEventReqCallback
8519 *
8520 */
8521void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8522{
8523 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8524 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008525 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008526
8527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008528 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008529 if(NULL == pWdaParams)
8530 {
8531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008532 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008533 VOS_ASSERT(0) ;
8534 return ;
8535 }
8536 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8537 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8538 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8539 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8540 {
8541 pWDA->wdaAmpSessionOn = VOS_FALSE;
8542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 vos_mem_free(pWdaParams->wdaMsgParam) ;
8544 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8545 vos_mem_free(pWdaParams) ;
8546 /*
8547 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8548 * param here
8549 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008550 return ;
8551}
8552
Jeff Johnson295189b2012-06-20 16:38:30 -07008553/*
8554 * FUNCTION: WDA_ProcessBtAmpEventReq
8555 * Request to WDI to Update with BT AMP events.
8556 */
8557VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8558 tSmeBtAmpEvent *pBtAmpEventParams)
8559{
8560 WDI_Status status = WDI_STATUS_SUCCESS ;
8561 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8562 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8563 sizeof(WDI_BtAmpEventParamsType)) ;
8564 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008566 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 if(NULL == wdiBtAmpEventParam)
8568 {
8569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008571 VOS_ASSERT(0);
8572 return VOS_STATUS_E_NOMEM;
8573 }
8574 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8575 if(NULL == pWdaParams)
8576 {
8577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008579 VOS_ASSERT(0);
8580 vos_mem_free(wdiBtAmpEventParam);
8581 return VOS_STATUS_E_NOMEM;
8582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008583 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8584 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008585 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 /* Store BT AMP event pointer, as this will be used for response */
8587 /* store Params pass it to WDI */
8588 pWdaParams->pWdaContext = pWDA;
8589 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8590 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8592 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 if(IS_WDI_STATUS_FAILURE(status))
8594 {
8595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8596 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8597 vos_mem_free(pWdaParams->wdaMsgParam) ;
8598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8599 vos_mem_free(pWdaParams) ;
8600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8602 {
8603 pWDA->wdaAmpSessionOn = VOS_TRUE;
8604 }
8605 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008606}
8607
Jeff Johnson295189b2012-06-20 16:38:30 -07008608#ifdef ANI_MANF_DIAG
8609/*
8610 * FUNCTION: WDA_FTMCommandReqCallback
8611 * Handle FTM CMD response came from HAL
8612 * Route responce to HDD FTM
8613 */
8614void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8615 void *usrData)
8616{
8617 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008618 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8619 {
8620 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008621 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 return;
8623 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008624 /* Release Current FTM Command Request */
8625 vos_mem_free(pWDA->wdaFTMCmdReq);
8626 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008627#ifndef WLAN_FTM_STUB
8628 /* Post FTM Responce to HDD FTM */
8629 wlan_sys_ftm(ftmCmdRspData);
8630#endif /* WLAN_FTM_STUB */
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 return;
8632}
Jeff Johnson295189b2012-06-20 16:38:30 -07008633/*
8634 * FUNCTION: WDA_ProcessFTMCommand
8635 * Send FTM command to WDI
8636 */
8637VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8638 tPttMsgbuffer *pPTTFtmCmd)
8639{
8640 WDI_Status status = WDI_STATUS_SUCCESS;
8641 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 ftmCMDReq = (WDI_FTMCommandReqType *)
8643 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8644 if(NULL == ftmCMDReq)
8645 {
8646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8647 "WDA FTM Command buffer alloc fail");
8648 return VOS_STATUS_E_NOMEM;
8649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8651 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008652 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 /* Send command to WDI */
8654 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 return status;
8656}
8657#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07008658#ifdef FEATURE_OEM_DATA_SUPPORT
8659/*
8660 * FUNCTION: WDA_StartOemDataReqCallback
8661 *
8662 */
8663void WDA_StartOemDataReqCallback(
8664 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8665 void* pUserData)
8666{
8667 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008668 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8669 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008670 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008671
Jeff Johnsone7245742012-09-05 17:12:55 -07008672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008673 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008674
8675 if(NULL == pWdaParams)
8676 {
8677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008678 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008679 VOS_ASSERT(0) ;
8680 return ;
8681 }
8682 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8683
Jeff Johnsone7245742012-09-05 17:12:55 -07008684 if(NULL == pWDA)
8685 {
8686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008687 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008688 VOS_ASSERT(0);
8689 return ;
8690 }
8691
8692 /*
8693 * Allocate memory for response params sent to PE
8694 */
8695 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8696
8697 // Check if memory is allocated for OemdataMeasRsp Params.
8698 if(NULL == pOemDataRspParams)
8699 {
8700 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8701 "OEM DATA WDA callback alloc fail");
8702 VOS_ASSERT(0) ;
8703 return;
8704 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008705
Jeff Johnsone7245742012-09-05 17:12:55 -07008706 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8708 vos_mem_free(pWdaParams->wdaMsgParam);
8709 vos_mem_free(pWdaParams) ;
8710
Jeff Johnsone7245742012-09-05 17:12:55 -07008711 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08008712 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07008713 * Also, here success always means that we have atleast one BSSID.
8714 */
8715 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8716
8717 //enable Tx
8718 status = WDA_ResumeDataTx(pWDA);
8719 if(status != VOS_STATUS_SUCCESS)
8720 {
8721 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8722 }
8723 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8724 return ;
8725}
8726/*
8727 * FUNCTION: WDA_ProcessStartOemDataReq
8728 * Send Start Oem Data Req to WDI
8729 */
8730VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8731 tStartOemDataReq *pOemDataReqParams)
8732{
8733 WDI_Status status = WDI_STATUS_SUCCESS;
8734 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008735 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008736
8737 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8738
8739 if(NULL == wdiOemDataReqParams)
8740 {
8741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008742 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008743 VOS_ASSERT(0);
8744 return VOS_STATUS_E_NOMEM;
8745 }
8746
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008747 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8748 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8749 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8750 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008751
8752 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8753
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008754 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8755 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008756 {
8757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008759 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008760 vos_mem_free(pOemDataReqParams);
8761 VOS_ASSERT(0);
8762 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008763 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008764
Bernald44a1ae2013-01-09 08:30:39 -08008765 pWdaParams->pWdaContext = (void*)pWDA;
8766 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
8767 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008768
8769 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8770 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008771
8772 if(IS_WDI_STATUS_FAILURE(status))
8773 {
8774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8775 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8777 vos_mem_free(pWdaParams->wdaMsgParam);
8778 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008779 }
8780 return CONVERT_WDI2VOS_STATUS(status) ;
8781}
8782#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008783/*
8784 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8785 *
8786 */
8787void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8788{
8789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008791 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 if(NULL == pWdaParams)
8793 {
8794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008795 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 VOS_ASSERT(0) ;
8797 return ;
8798 }
8799
8800 if(NULL != pWdaParams->wdaMsgParam)
8801 {
8802 vos_mem_free(pWdaParams->wdaMsgParam);
8803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008804 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8805 {
8806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8807 }
8808
8809 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 return ;
8811}
Jeff Johnson295189b2012-06-20 16:38:30 -07008812#ifdef WLAN_FEATURE_GTK_OFFLOAD
8813/*
8814 * FUNCTION: WDA_HostOffloadReqCallback
8815 *
8816 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008817void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8818 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008819{
8820 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8821
8822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008823 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008824
8825 VOS_ASSERT(NULL != pWdaParams);
8826
8827 vos_mem_free(pWdaParams->wdaMsgParam) ;
8828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8829 vos_mem_free(pWdaParams) ;
8830
8831 //print a msg, nothing else to do
8832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8833 "WDA_GTKOffloadReqCallback invoked " );
8834
8835 return ;
8836}
8837
8838/*
8839 * FUNCTION: WDA_ProcessGTKOffloadReq
8840 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8841 * to broadcast traffic (sta mode).
8842 */
8843VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8844 tpSirGtkOffloadParams pGtkOffloadParams)
8845{
8846 VOS_STATUS status = VOS_STATUS_SUCCESS;
8847 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8848 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8849 sizeof(WDI_GtkOffloadReqMsg)) ;
8850 tWDA_ReqParams *pWdaParams ;
8851
8852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008853 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008854
8855 if(NULL == wdiGtkOffloadReqMsg)
8856 {
8857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008859 VOS_ASSERT(0);
8860 return VOS_STATUS_E_NOMEM;
8861 }
8862
8863 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8864 if(NULL == pWdaParams)
8865 {
8866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 VOS_ASSERT(0);
8869 vos_mem_free(wdiGtkOffloadReqMsg);
8870 return VOS_STATUS_E_NOMEM;
8871 }
8872
8873 //
8874 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8875 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008876
8877 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8878 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8879
Jeff Johnson295189b2012-06-20 16:38:30 -07008880 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8881 // Copy KCK
8882 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8883 // Copy KEK
8884 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8885 // Copy KeyReplayCounter
8886 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8887 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8888
8889 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8890
8891 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8892 (NULL == pWDA->wdaWdiApiMsgParam));
8893
8894 /* Store Params pass it to WDI */
8895 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8896 pWdaParams->pWdaContext = pWDA;
8897 /* Store param pointer as passed in by caller */
8898 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8899
8900 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8901
8902 if(IS_WDI_STATUS_FAILURE(status))
8903 {
8904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8905 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8907 vos_mem_free(pWdaParams->wdaMsgParam);
8908 vos_mem_free(pWdaParams);
8909 }
8910
8911 return CONVERT_WDI2VOS_STATUS(status) ;
8912}
8913
8914/*
8915 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8916 *
8917 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008918void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8919 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008920{
8921 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8922 tWDA_CbContext *pWDA;
8923 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8924 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8925 tANI_U8 i;
8926 vos_msg_t vosMsg;
8927
8928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008929 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008930
8931 VOS_ASSERT(NULL != pWdaParams);
8932
8933 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8934 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8935
8936 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8937 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8938
8939 /* Message Header */
8940 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8941 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8942
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008943 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8944 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8945 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8946 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8947 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8948 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008949
8950 /* VOS message wrapper */
8951 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8952 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8953 vosMsg.bodyval = 0;
8954
8955 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8956 {
8957 /* free the mem and return */
8958 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8959 }
8960
8961 vos_mem_free(pWdaParams->wdaMsgParam) ;
8962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8963 vos_mem_free(pWdaParams) ;
8964}
8965#endif
8966
8967/*
8968 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8969 * Request to WDI to set Tx Per Tracking configurations
8970 */
8971VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8972{
8973 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008974 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008975 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8976 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8977 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8978 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008980 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008981 if(NULL == pwdiSetTxPerTrackingReqParams)
8982 {
8983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008984 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008985 vos_mem_free(pTxPerTrackingParams);
8986 VOS_ASSERT(0);
8987 return VOS_STATUS_E_NOMEM;
8988 }
8989 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8990 if(NULL == pWdaParams)
8991 {
8992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8995 vos_mem_free(pTxPerTrackingParams);
8996 VOS_ASSERT(0);
8997 return VOS_STATUS_E_NOMEM;
8998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008999 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
9000 pTxPerTrackingParams->ucTxPerTrackingEnable;
9001 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
9002 pTxPerTrackingParams->ucTxPerTrackingPeriod;
9003 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
9004 pTxPerTrackingParams->ucTxPerTrackingRatio;
9005 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
9006 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07009007 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009008 /* Store param pointer as passed in by caller */
9009 /* store Params pass it to WDI
9010 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
9011 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
9012 pWdaParams->pWdaContext = pWDA;
9013 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009014 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07009015 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009016 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009017 {
9018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9019 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009020 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009021 vos_mem_free(pWdaParams->wdaMsgParam) ;
9022 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9023 vos_mem_free(pWdaParams) ;
9024 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009025 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009026
9027}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009028/*
9029 * FUNCTION: WDA_HALDumpCmdCallback
9030 * Send the VOS complete .
9031 */
9032void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
9033 void* pUserData)
9034{
9035 tANI_U8 *buffer = NULL;
9036 tWDA_CbContext *pWDA = NULL;
9037 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009038 if(NULL == pWdaParams)
9039 {
9040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009041 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009042 VOS_ASSERT(0) ;
9043 return ;
9044 }
9045
9046 pWDA = pWdaParams->pWdaContext;
9047 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 if(wdiRspParams->usBufferLen > 0)
9049 {
9050 /*Copy the Resp data to UMAC supplied buffer*/
9051 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
9052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9054 vos_mem_free(pWdaParams);
9055
9056 /* Indicate VOSS about the start complete */
9057 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009058 return ;
9059}
9060
Jeff Johnson295189b2012-06-20 16:38:30 -07009061/*
9062 * FUNCTION: WDA_ProcessHALDumpCmdReq
9063 * Send Dump command to WDI
9064 */
9065VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9066 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9067 tANI_U32 arg4, tANI_U8 *pBuffer)
9068{
9069 WDI_Status status = WDI_STATUS_SUCCESS;
9070 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9071 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9072 tWDA_ReqParams *pWdaParams ;
9073 pVosContextType pVosContext = NULL;
9074 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9076 (void *)pMac);
9077
9078 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9079 if(NULL == pWdaParams)
9080 {
9081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009082 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009083 return VOS_STATUS_E_NOMEM;
9084 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009085 /* Allocate memory WDI request structure*/
9086 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9087 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9088 if(NULL == wdiHALDumpCmdReqParam)
9089 {
9090 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9091 "WDA HAL DUMP Command buffer alloc fail");
9092 vos_mem_free(pWdaParams);
9093 return WDI_STATUS_E_FAILURE;
9094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009095 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 /* Extract the arguments */
9097 wdiHalDumpCmdInfo->command = cmd;
9098 wdiHalDumpCmdInfo->argument1 = arg1;
9099 wdiHalDumpCmdInfo->argument2 = arg2;
9100 wdiHalDumpCmdInfo->argument3 = arg3;
9101 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009103 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9104
9105 /* Response message will be passed through the buffer */
9106 pWdaParams->wdaMsgParam = (void *)pBuffer;
9107
9108 /* store Params pass it to WDI */
9109 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 /* Send command to WDI */
9111 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -08009112 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -07009113 if ( vStatus != VOS_STATUS_SUCCESS )
9114 {
9115 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9116 {
9117 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -08009118 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009119 }
9120 else
9121 {
9122 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009123 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009124 }
9125 VOS_ASSERT(0);
9126 }
9127 return status;
9128}
Jeff Johnson295189b2012-06-20 16:38:30 -07009129#ifdef WLAN_FEATURE_GTK_OFFLOAD
9130/*
9131 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9132 * Request to WDI to get GTK Offload Information
9133 */
9134VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9135 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9136{
9137 VOS_STATUS status = VOS_STATUS_SUCCESS;
9138 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9139 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9140 tWDA_ReqParams *pWdaParams ;
9141
9142 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9143 {
9144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 VOS_ASSERT(0);
9147 return VOS_STATUS_E_NOMEM;
9148 }
9149
9150 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9151 if(NULL == pWdaParams)
9152 {
9153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 VOS_ASSERT(0);
9156 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9157 return VOS_STATUS_E_NOMEM;
9158 }
9159
9160 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9161
9162 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9163 (NULL == pWDA->wdaWdiApiMsgParam));
9164
9165 /* Store Params pass it to WDI */
9166 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9167 pWdaParams->pWdaContext = pWDA;
9168 /* Store param pointer as passed in by caller */
9169 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9170
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009171 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9172 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9173
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9175
9176 if(IS_WDI_STATUS_FAILURE(status))
9177 {
9178 /* failure returned by WDI API */
9179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9180 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9182 vos_mem_free(pWdaParams) ;
9183 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9184 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9185 }
9186
9187 return CONVERT_WDI2VOS_STATUS(status) ;
9188}
9189#endif // WLAN_FEATURE_GTK_OFFLOAD
9190
9191/*
9192 * -------------------------------------------------------------------------
9193 * DATA interface with WDI for Mgmt Frames
9194 * -------------------------------------------------------------------------
9195 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009196/*
9197 * FUNCTION: WDA_TxComplete
9198 * Callback function for the WDA_TxPacket
9199 */
9200VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9201 VOS_STATUS status )
9202{
9203
9204 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9205 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009206 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009207
9208 if(NULL == wdaContext)
9209 {
9210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9211 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009212 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009213 VOS_ASSERT(0);
9214 return VOS_STATUS_E_FAILURE;
9215 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009216
9217 /*Check if frame was timed out or not*/
9218 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9219 (v_PVOID_t)&uUserData);
9220
9221 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9222 {
9223 /*Discard frame - no further processing is needed*/
9224 vos_pkt_return_packet(pData);
9225 return VOS_STATUS_SUCCESS;
9226 }
9227
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9229 if( NULL!=wdaContext->pTxCbFunc)
9230 {
9231 /*check if packet is freed already*/
9232 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9233 {
9234 wdaContext->pTxCbFunc(pMac, pData);
9235 }
9236 else
9237 {
9238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9239 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009240 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 //Return from here since we reaching here because the packet already timeout
9242 return status;
9243 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009244 }
9245
9246 /*
9247 * Trigger the event to bring the HAL TL Tx complete function to come
9248 * out of wait
9249 * Let the coe above to complete the packet first. When this event is set,
9250 * the thread waiting for the event may run and set Vospacket_freed causing the original
9251 * packet not being freed.
9252 */
9253 status = vos_event_set(&wdaContext->txFrameEvent);
9254 if(!VOS_IS_STATUS_SUCCESS(status))
9255 {
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9257 "NEW VOS Event Set failed - status = %d \n", status);
9258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 return status;
9260}
Jeff Johnson295189b2012-06-20 16:38:30 -07009261/*
9262 * FUNCTION: WDA_TxPacket
9263 * Forward TX management frame to WDI
9264 */
9265VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9266 void *pFrmBuf,
9267 tANI_U16 frmLen,
9268 eFrameType frmType,
9269 eFrameTxDir txDir,
9270 tANI_U8 tid,
9271 pWDATxRxCompFunc pCompFunc,
9272 void *pData,
9273 pWDAAckFnTxComp pAckTxComp,
9274 tANI_U8 txFlag)
9275{
9276 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9277 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9278 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9279 tANI_U8 eventIdx = 0;
9280 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9281 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009282 if((NULL == pWDA)||(NULL == pFrmBuf))
9283 {
9284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9285 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009286 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 VOS_ASSERT(0);
9288 return VOS_STATUS_E_FAILURE;
9289 }
9290
9291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9292 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009293 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9294 if(NULL == pMac)
9295 {
9296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009297 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 VOS_ASSERT(0);
9299 return VOS_STATUS_E_FAILURE;
9300 }
9301
9302
9303
9304 /* store the call back function in WDA context */
9305 pWDA->pTxCbFunc = pCompFunc;
9306 /* store the call back for the function of ackTxComplete */
9307 if( pAckTxComp )
9308 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009309 if( NULL != pWDA->pAckTxCbFunc )
9310 {
9311 /* Already TxComp is active no need to active again */
9312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9313 "There is already one request pending for tx complete\n");
9314 pWDA->pAckTxCbFunc( pMac, 0);
9315 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009316
Jeff Johnsone7245742012-09-05 17:12:55 -07009317 if( VOS_STATUS_SUCCESS !=
9318 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9319 {
9320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9321 "Tx Complete timeout Timer Stop Failed ");
9322 }
9323 else
9324 {
9325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009326 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -07009327 }
9328 }
9329
9330 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9331 pWDA->pAckTxCbFunc = pAckTxComp;
9332 if( VOS_STATUS_SUCCESS !=
9333 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9334 {
9335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9336 "Tx Complete Timer Start Failed ");
9337 pWDA->pAckTxCbFunc = NULL;
9338 return eHAL_STATUS_FAILURE;
9339 }
9340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 /* Reset the event to be not signalled */
9342 status = vos_event_reset(&pWDA->txFrameEvent);
9343 if(!VOS_IS_STATUS_SUCCESS(status))
9344 {
9345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9346 "VOS Event reset failed - status = %d\n",status);
9347 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9348 if( pAckTxComp )
9349 {
9350 pWDA->pAckTxCbFunc = NULL;
9351 if( VOS_STATUS_SUCCESS !=
9352 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9353 {
9354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9355 "Tx Complete timeout Timer Stop Failed ");
9356 }
9357 }
9358 return VOS_STATUS_E_FAILURE;
9359 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009360
9361 /* If Peer Sta mask is set don't overwrite to self sta */
9362 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009363 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009364 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009365 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009366 else
9367 {
Ganesh K08bce952012-12-13 15:04:41 -08009368 /* Get system role, use the self station if in unknown role or STA role */
9369 systemRole = wdaGetGlobalSystemRole(pMac);
9370 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9371 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009372#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -08009373 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009374#endif
Ganesh K08bce952012-12-13 15:04:41 -08009375 ))
9376 {
9377 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9378 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009380
Jeff Johnsone7245742012-09-05 17:12:55 -07009381 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9382 disassoc frame reaches the HW, HAL has already deleted the peer station */
9383 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009385 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009386 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009387 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 /*Send Probe request frames on self sta idx*/
9389 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 /* Since we donot want probe responses to be retried, send probe responses
9392 through the NO_ACK queues */
9393 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9394 {
9395 //probe response is sent out using self station and no retries options.
9396 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9397 }
9398 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9399 {
9400 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9401 }
9402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009403 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9404
9405 /*Set frame tag to 0
9406 We will use the WDA user data in order to tag a frame as expired*/
9407 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9408 (v_PVOID_t)0);
9409
9410
9411 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9412 frmLen, ucTypeSubType, tid,
9413 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9414 {
9415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9416 "Sending Mgmt Frame failed - status = %d\n", status);
9417 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9418 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9419 if( pAckTxComp )
9420 {
9421 pWDA->pAckTxCbFunc = NULL;
9422 if( VOS_STATUS_SUCCESS !=
9423 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9424 {
9425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9426 "Tx Complete timeout Timer Stop Failed ");
9427 }
9428 }
9429 return VOS_STATUS_E_FAILURE;
9430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009431 /*
9432 * Wait for the event to be set by the TL, to get the response of TX
9433 * complete, this event should be set by the Callback function called by TL
9434 */
9435 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9436 &eventIdx);
9437 if(!VOS_IS_STATUS_SUCCESS(status))
9438 {
9439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9440 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009441 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009442 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9443 after the packet gets completed(packet freed once)*/
9444
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009445 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Gopichand Nakkala0b714452012-12-21 15:34:30 -08009446 WDA_TransportChannelDebug(1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009447
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009448 /*Tag Frame as timed out for later deletion*/
9449 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9450 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9451
Jeff Johnson295189b2012-06-20 16:38:30 -07009452 /* check whether the packet was freed already,so need not free again when
9453 * TL calls the WDA_Txcomplete routine
9454 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009455 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9456 /*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 -07009457 {
9458 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009459 } */
9460
Jeff Johnson295189b2012-06-20 16:38:30 -07009461 if( pAckTxComp )
9462 {
9463 pWDA->pAckTxCbFunc = NULL;
9464 if( VOS_STATUS_SUCCESS !=
9465 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9466 {
9467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9468 "Tx Complete timeout Timer Stop Failed ");
9469 }
9470 }
9471 status = VOS_STATUS_E_FAILURE;
9472 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009473 return status;
9474}
Jeff Johnson295189b2012-06-20 16:38:30 -07009475/*
9476 * FUNCTION: WDA_McProcessMsg
9477 * Trigger DAL-AL to start CFG download
9478 */
9479VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9480{
9481 VOS_STATUS status = VOS_STATUS_SUCCESS;
9482 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 if(NULL == pMsg)
9484 {
9485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009486 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 VOS_ASSERT(0);
9488 return VOS_STATUS_E_FAILURE;
9489 }
9490
9491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009492 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009493
9494 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9495 if(NULL == pWDA )
9496 {
9497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009498 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009499 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009500 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009501 return VOS_STATUS_E_FAILURE;
9502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 /* Process all the WDA messages.. */
9504 switch( pMsg->type )
9505 {
9506 case WNI_CFG_DNLD_REQ:
9507 {
9508 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009509 /* call WDA complete event if config download success */
9510 if( VOS_IS_STATUS_SUCCESS(status) )
9511 {
9512 vos_WDAComplete_cback(pVosContext);
9513 }
9514 else
9515 {
9516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9517 "WDA Config Download failure" );
9518 }
9519 break ;
9520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 /*
9522 * Init SCAN request from PE, convert it into DAL format
9523 * and send it to DAL
9524 */
9525 case WDA_INIT_SCAN_REQ:
9526 {
9527 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9528 break ;
9529 }
9530 /* start SCAN request from PE */
9531 case WDA_START_SCAN_REQ:
9532 {
9533 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9534 break ;
9535 }
9536 /* end SCAN request from PE */
9537 case WDA_END_SCAN_REQ:
9538 {
9539 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9540 break ;
9541 }
9542 /* end SCAN request from PE */
9543 case WDA_FINISH_SCAN_REQ:
9544 {
9545 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9546 break ;
9547 }
9548 /* join request from PE */
9549 case WDA_CHNL_SWITCH_REQ:
9550 {
9551 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9552 {
9553 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9554 }
9555 else
9556 {
9557 WDA_ProcessChannelSwitchReq(pWDA,
9558 (tSwitchChannelParams*)pMsg->bodyptr) ;
9559 }
9560 break ;
9561 }
9562 /* ADD BSS request from PE */
9563 case WDA_ADD_BSS_REQ:
9564 {
9565 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9566 break ;
9567 }
9568 case WDA_ADD_STA_REQ:
9569 {
9570 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9571 break ;
9572 }
9573 case WDA_DELETE_BSS_REQ:
9574 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009575 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9576 break ;
9577 }
9578 case WDA_DELETE_STA_REQ:
9579 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009580 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9581 break ;
9582 }
9583 case WDA_CONFIG_PARAM_UPDATE_REQ:
9584 {
9585 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9586 break ;
9587 }
9588 case WDA_SET_BSSKEY_REQ:
9589 {
9590 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9591 break ;
9592 }
9593 case WDA_SET_STAKEY_REQ:
9594 {
9595 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9596 break ;
9597 }
9598 case WDA_SET_STA_BCASTKEY_REQ:
9599 {
9600 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9601 break ;
9602 }
9603 case WDA_REMOVE_BSSKEY_REQ:
9604 {
9605 WDA_ProcessRemoveBssKeyReq(pWDA,
9606 (tRemoveBssKeyParams *)pMsg->bodyptr);
9607 break ;
9608 }
9609 case WDA_REMOVE_STAKEY_REQ:
9610 {
9611 WDA_ProcessRemoveStaKeyReq(pWDA,
9612 (tRemoveStaKeyParams *)pMsg->bodyptr);
9613 break ;
9614 }
9615 case WDA_REMOVE_STA_BCASTKEY_REQ:
9616 {
9617 /* TODO: currently UMAC is not sending this request, Add the code for
9618 handling this request when UMAC supports */
9619 break;
9620 }
9621#ifdef FEATURE_WLAN_CCX
9622 case WDA_TSM_STATS_REQ:
9623 {
9624 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9625 break;
9626 }
9627#endif
9628 case WDA_UPDATE_EDCA_PROFILE_IND:
9629 {
9630 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9631 break;
9632 }
9633 case WDA_ADD_TS_REQ:
9634 {
9635 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9636 break;
9637 }
9638 case WDA_DEL_TS_REQ:
9639 {
9640 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9641 break;
9642 }
9643 case WDA_ADDBA_REQ:
9644 {
9645 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9646 break;
9647 }
9648 case WDA_DELBA_IND:
9649 {
9650 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9651 break;
9652 }
9653 case WDA_SET_LINK_STATE:
9654 {
9655 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9656 break;
9657 }
9658 case WDA_GET_STATISTICS_REQ:
9659 {
9660 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9661 break;
9662 }
9663 case WDA_PWR_SAVE_CFG:
9664 {
9665 if(pWDA->wdaState == WDA_READY_STATE)
9666 {
9667 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9668 }
9669 else
9670 {
9671 if(NULL != pMsg->bodyptr)
9672 {
9673 vos_mem_free(pMsg->bodyptr);
9674 }
9675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9676 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9677 }
9678 break;
9679 }
9680 case WDA_ENTER_IMPS_REQ:
9681 {
9682 if(pWDA->wdaState == WDA_READY_STATE)
9683 {
9684 WDA_ProcessEnterImpsReq(pWDA);
9685 }
9686 else
9687 {
9688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9689 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9690 }
9691 break;
9692 }
9693 case WDA_EXIT_IMPS_REQ:
9694 {
9695 if(pWDA->wdaState == WDA_READY_STATE)
9696 {
9697 WDA_ProcessExitImpsReq(pWDA);
9698 }
9699 else
9700 {
9701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9702 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9703 }
9704 break;
9705 }
9706 case WDA_ENTER_BMPS_REQ:
9707 {
9708 if(pWDA->wdaState == WDA_READY_STATE)
9709 {
9710 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9711 }
9712 else
9713 {
9714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9715 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9716 }
9717 break;
9718 }
9719 case WDA_EXIT_BMPS_REQ:
9720 {
9721 if(pWDA->wdaState == WDA_READY_STATE)
9722 {
9723 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9724 }
9725 else
9726 {
9727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9728 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9729 }
9730 break;
9731 }
9732 case WDA_ENTER_UAPSD_REQ:
9733 {
9734 if(pWDA->wdaState == WDA_READY_STATE)
9735 {
9736 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9737 }
9738 else
9739 {
9740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9741 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9742 }
9743 break;
9744 }
9745 case WDA_EXIT_UAPSD_REQ:
9746 {
9747 if(pWDA->wdaState == WDA_READY_STATE)
9748 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009749 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009750 }
9751 else
9752 {
9753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9754 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9755 }
9756 break;
9757 }
9758 case WDA_UPDATE_UAPSD_IND:
9759 {
9760 if(pWDA->wdaState == WDA_READY_STATE)
9761 {
9762 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9763 }
9764 else
9765 {
9766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9767 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9768 }
9769 break;
9770 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009771 case WDA_REGISTER_PE_CALLBACK :
9772 {
9773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9774 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9775 /*TODO: store the PE callback */
9776 /* Do Nothing? MSG Body should be freed at here */
9777 if(NULL != pMsg->bodyptr)
9778 {
9779 vos_mem_free(pMsg->bodyptr);
9780 }
9781 break;
9782 }
9783 case WDA_SYS_READY_IND :
9784 {
9785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9786 "Handling msg type WDA_SYS_READY_IND " );
9787 pWDA->wdaState = WDA_READY_STATE;
9788 if(NULL != pMsg->bodyptr)
9789 {
9790 vos_mem_free(pMsg->bodyptr);
9791 }
9792 break;
9793 }
9794 case WDA_BEACON_FILTER_IND :
9795 {
9796 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9797 break;
9798 }
9799 case WDA_BTC_SET_CFG:
9800 {
9801 /*TODO: handle this while dealing with BTC */
9802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9803 "Handling msg type WDA_BTC_SET_CFG " );
9804 /* Do Nothing? MSG Body should be freed at here */
9805 if(NULL != pMsg->bodyptr)
9806 {
9807 vos_mem_free(pMsg->bodyptr);
9808 }
9809 break;
9810 }
9811 case WDA_SIGNAL_BT_EVENT:
9812 {
9813 /*TODO: handle this while dealing with BTC */
9814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9815 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9816 /* Do Nothing? MSG Body should be freed at here */
9817 if(NULL != pMsg->bodyptr)
9818 {
9819 vos_mem_free(pMsg->bodyptr);
9820 }
9821 break;
9822 }
9823 case WDA_CFG_RXP_FILTER_REQ:
9824 {
9825 WDA_ProcessConfigureRxpFilterReq(pWDA,
9826 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9827 break;
9828 }
9829 case WDA_SET_HOST_OFFLOAD:
9830 {
9831 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9832 break;
9833 }
9834 case WDA_SET_KEEP_ALIVE:
9835 {
9836 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9837 break;
9838 }
9839#ifdef WLAN_NS_OFFLOAD
9840 case WDA_SET_NS_OFFLOAD:
9841 {
9842 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9843 break;
9844 }
9845#endif //WLAN_NS_OFFLOAD
9846 case WDA_ADD_STA_SELF_REQ:
9847 {
9848 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9849 break;
9850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009851 case WDA_DEL_STA_SELF_REQ:
9852 {
9853 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9854 break;
9855 }
9856 case WDA_WOWL_ADD_BCAST_PTRN:
9857 {
9858 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9859 break;
9860 }
9861 case WDA_WOWL_DEL_BCAST_PTRN:
9862 {
9863 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9864 break;
9865 }
9866 case WDA_WOWL_ENTER_REQ:
9867 {
9868 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9869 break;
9870 }
9871 case WDA_WOWL_EXIT_REQ:
9872 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009873 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009874 break;
9875 }
9876 case WDA_TL_FLUSH_AC_REQ:
9877 {
9878 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9879 break;
9880 }
9881 case WDA_SIGNAL_BTAMP_EVENT:
9882 {
9883 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9884 break;
9885 }
9886#ifdef WDA_UT
9887 case WDA_WDI_EVENT_MSG:
9888 {
9889 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9890 break ;
9891 }
9892#endif
9893 case WDA_UPDATE_BEACON_IND:
9894 {
9895 WDA_ProcessUpdateBeaconParams(pWDA,
9896 (tUpdateBeaconParams *)pMsg->bodyptr);
9897 break;
9898 }
9899 case WDA_SEND_BEACON_REQ:
9900 {
9901 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9902 break;
9903 }
9904 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9905 {
9906 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9907 (tSendProbeRespParams *)pMsg->bodyptr);
9908 break;
9909 }
9910#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9911 case WDA_SET_MAX_TX_POWER_REQ:
9912 {
9913 WDA_ProcessSetMaxTxPowerReq(pWDA,
9914 (tMaxTxPowerParams *)pMsg->bodyptr);
9915 break;
9916 }
9917#endif
9918#ifdef WLAN_FEATURE_P2P
9919 case WDA_SET_P2P_GO_NOA_REQ:
9920 {
9921 WDA_ProcessSetP2PGONOAReq(pWDA,
9922 (tP2pPsParams *)pMsg->bodyptr);
9923 break;
9924 }
9925#endif
9926 /* timer related messages */
9927 case WDA_TIMER_BA_ACTIVITY_REQ:
9928 {
9929 WDA_BaCheckActivity(pWDA) ;
9930 break ;
9931 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08009932
9933 /* timer related messages */
9934 case WDA_TIMER_TRAFFIC_STATS_IND:
9935 {
9936 WDA_TimerTrafficStatsInd(pWDA);
9937 break;
9938 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009939#ifdef WLAN_FEATURE_VOWIFI_11R
9940 case WDA_AGGR_QOS_REQ:
9941 {
9942 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9943 break;
9944 }
9945#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009946#ifdef ANI_MANF_DIAG
9947 case WDA_FTM_CMD_REQ:
9948 {
9949 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9950 break ;
9951 }
9952#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07009953#ifdef FEATURE_OEM_DATA_SUPPORT
9954 case WDA_START_OEM_DATA_REQ:
9955 {
9956 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9957 break;
9958 }
9959#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 /* Tx Complete Time out Indication */
9961 case WDA_TX_COMPLETE_TIMEOUT_IND:
9962 {
9963 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9964 break;
9965 }
9966 case WDA_WLAN_SUSPEND_IND:
9967 {
9968 WDA_ProcessWlanSuspendInd(pWDA,
9969 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9970 break;
9971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 case WDA_WLAN_RESUME_REQ:
9973 {
9974 WDA_ProcessWlanResumeReq(pWDA,
9975 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9976 break;
9977 }
9978
9979 case WDA_UPDATE_CF_IND:
9980 {
9981 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9982 pMsg->bodyptr = NULL;
9983 break;
9984 }
9985#ifdef FEATURE_WLAN_SCAN_PNO
9986 case WDA_SET_PNO_REQ:
9987 {
9988 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9989 break;
9990 }
9991 case WDA_UPDATE_SCAN_PARAMS_REQ:
9992 {
9993 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9994 break;
9995 }
9996 case WDA_SET_RSSI_FILTER_REQ:
9997 {
9998 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
9999 break;
10000 }
10001#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070010002 case WDA_SET_TX_PER_TRACKING_REQ:
10003 {
10004 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
10005 break;
10006 }
10007
10008#ifdef WLAN_FEATURE_PACKET_FILTERING
10009 case WDA_8023_MULTICAST_LIST_REQ:
10010 {
10011 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
10012 break;
10013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010014 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
10015 {
10016 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
10017 break;
10018 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010019 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
10020 {
10021 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
10022 break;
10023 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
10025 {
10026 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
10027 break;
10028 }
10029#endif // WLAN_FEATURE_PACKET_FILTERING
10030
10031
10032 case WDA_TRANSMISSION_CONTROL_IND:
10033 {
10034 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
10035 break;
10036 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 case WDA_SET_POWER_PARAMS_REQ:
10038 {
10039 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
10040 break;
10041 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010042#ifdef WLAN_FEATURE_GTK_OFFLOAD
10043 case WDA_GTK_OFFLOAD_REQ:
10044 {
10045 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
10046 break;
10047 }
10048
10049 case WDA_GTK_OFFLOAD_GETINFO_REQ:
10050 {
10051 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
10052 break;
10053 }
10054#endif //WLAN_FEATURE_GTK_OFFLOAD
10055
10056 case WDA_SET_TM_LEVEL_REQ:
10057 {
10058 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
10059 break;
10060 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070010061#ifdef WLAN_FEATURE_11AC
10062 case WDA_UPDATE_OP_MODE:
10063 {
10064 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
10065 {
10066 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10067 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10068 else
10069 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10070 " VHT OpMode Feature is Not Supported \n");
10071 }
10072 else
10073 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10074 " 11AC Feature is Not Supported \n");
10075 break;
10076 }
10077#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 default:
10079 {
10080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10081 "No Handling for msg type %x in WDA "
10082 ,pMsg->type);
10083 /* Do Nothing? MSG Body should be freed at here */
10084 if(NULL != pMsg->bodyptr)
10085 {
10086 vos_mem_free(pMsg->bodyptr);
10087 }
10088 //WDA_VOS_ASSERT(0) ;
10089 }
10090 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 return status ;
10092}
10093
Jeff Johnson295189b2012-06-20 16:38:30 -070010094/*
10095 * FUNCTION: WDA_LowLevelIndCallback
10096 * IND API callback from WDI, send Ind to PE
10097 */
10098void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10099 void* pUserData )
10100{
10101 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10102#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10103 tSirRSSINotification rssiNotification;
10104#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 if(NULL == pWDA)
10106 {
10107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010108 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010109 VOS_ASSERT(0);
10110 return ;
10111 }
10112
10113 switch(wdiLowLevelInd->wdiIndicationType)
10114 {
10115 case WDI_RSSI_NOTIFICATION_IND:
10116 {
10117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10118 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010119#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10120 rssiNotification.bReserved =
10121 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10122 rssiNotification.bRssiThres1NegCross =
10123 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10124 rssiNotification.bRssiThres1PosCross =
10125 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10126 rssiNotification.bRssiThres2NegCross =
10127 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10128 rssiNotification.bRssiThres2PosCross =
10129 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10130 rssiNotification.bRssiThres3NegCross =
10131 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10132 rssiNotification.bRssiThres3PosCross =
10133 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080010134 rssiNotification.avgRssi = (v_S7_t)
10135 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070010136 WLANTL_BMPSRSSIRegionChangedNotification(
10137 pWDA->pVosContext,
10138 &rssiNotification);
10139#endif
10140 break ;
10141 }
10142 case WDI_MISSED_BEACON_IND:
10143 {
10144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10145 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010146 /* send IND to PE */
10147 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, NULL, 0) ;
10148 break ;
10149 }
10150 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10151 {
10152 /* TODO: Decode Ind and send Ind to PE */
10153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10154 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10155 break ;
10156 }
10157
10158 case WDI_MIC_FAILURE_IND:
10159 {
10160 tpSirSmeMicFailureInd pMicInd =
10161 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10162
10163 if(NULL == pMicInd)
10164 {
10165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010166 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010167 break;
10168 }
10169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10170 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010171 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10172 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10173 vos_mem_copy(pMicInd->bssId,
10174 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10175 sizeof(tSirMacAddr));
10176 vos_mem_copy(pMicInd->info.srcMacAddr,
10177 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10178 sizeof(tSirMacAddr));
10179 vos_mem_copy(pMicInd->info.taMacAddr,
10180 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10181 sizeof(tSirMacAddr));
10182 vos_mem_copy(pMicInd->info.dstMacAddr,
10183 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10184 sizeof(tSirMacAddr));
10185 vos_mem_copy(pMicInd->info.rxMacAddr,
10186 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10187 sizeof(tSirMacAddr));
10188 pMicInd->info.multicast =
10189 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10190 pMicInd->info.keyId=
10191 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10192 pMicInd->info.IV1=
10193 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10194 vos_mem_copy(pMicInd->info.TSC,
10195 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010196 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10197 (void *)pMicInd , 0) ;
10198 break ;
10199 }
10200 case WDI_FATAL_ERROR_IND:
10201 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010202 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010203 /* TODO: Decode Ind and send Ind to PE */
10204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10205 "Received WDI_FATAL_ERROR_IND from WDI ");
10206 break ;
10207 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 case WDI_DEL_STA_IND:
10209 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010210 tpDeleteStaContext pDelSTACtx =
10211 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10212
10213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10214 "Received WDI_DEL_STA_IND from WDI ");
10215 if(NULL == pDelSTACtx)
10216 {
10217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010218 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010219 break;
10220 }
10221 vos_mem_copy(pDelSTACtx->addr2,
10222 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10223 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 vos_mem_copy(pDelSTACtx->bssId,
10225 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10226 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 pDelSTACtx->assocId =
10228 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10229 pDelSTACtx->reasonCode =
10230 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10231 pDelSTACtx->staId =
10232 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10234 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 break ;
10236 }
10237 case WDI_COEX_IND:
10238 {
10239 tANI_U32 index;
10240 vos_msg_t vosMsg;
10241 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10242 if(NULL == pSmeCoexInd)
10243 {
10244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010245 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 break;
10247 }
10248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10249 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 /* Message Header */
10251 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10252 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 /* Info from WDI Indication */
10254 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10255 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10256 {
10257 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010259 /* VOS message wrapper */
10260 vosMsg.type = eWNI_SME_COEX_IND;
10261 vosMsg.bodyptr = (void *)pSmeCoexInd;
10262 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010263 /* Send message to SME */
10264 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10265 {
10266 /* free the mem and return */
10267 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10268 }
10269 else
10270 {
10271 /* DEBUG */
10272 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10273 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10274 pSmeCoexInd->coexIndType,
10275 pSmeCoexInd->coexIndData[0],
10276 pSmeCoexInd->coexIndData[1],
10277 pSmeCoexInd->coexIndData[2],
10278 pSmeCoexInd->coexIndData[3]);
10279 }
10280 break;
10281 }
10282 case WDI_TX_COMPLETE_IND:
10283 {
10284 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10285 /* Calling TxCompleteAck Indication from wda context*/
10286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10287 "Complete Indication received from HAL");
10288 if( pWDA->pAckTxCbFunc )
10289 {
10290 if( VOS_STATUS_SUCCESS !=
10291 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10292 {
10293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10294 "Tx Complete timeout Timer Stop Failed ");
10295 }
10296 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10297 pWDA->pAckTxCbFunc = NULL;
10298 }
10299 else
10300 {
10301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10302 "Tx Complete Indication is received after timeout ");
10303 }
10304 break;
10305 }
10306#ifdef WLAN_FEATURE_P2P
Viral Modid86bde22012-12-10 13:09:21 -080010307 case WDI_P2P_NOA_START_IND :
10308 {
10309 tSirP2PNoaStart *pP2pNoaStart =
10310 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
10311
10312 if (NULL == pP2pNoaStart)
10313 {
10314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10315 "Memory allocation failure, "
10316 "WDI_P2P_NOA_START_IND not forwarded");
10317 break;
10318 }
10319 pP2pNoaStart->status =
10320 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
10321 pP2pNoaStart->bssIdx =
10322 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
10323 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
10324 (void *)pP2pNoaStart , 0) ;
10325 break;
10326 }
10327
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 case WDI_P2P_NOA_ATTR_IND :
10329 {
10330 tSirP2PNoaAttr *pP2pNoaAttr =
10331 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10333 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010334 if (NULL == pP2pNoaAttr)
10335 {
10336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10337 "Memory allocation failure, "
10338 "WDI_P2P_NOA_ATTR_IND not forwarded");
10339 break;
10340 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010341 pP2pNoaAttr->index =
10342 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10343 pP2pNoaAttr->oppPsFlag =
10344 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10345 pP2pNoaAttr->ctWin =
10346 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10347
10348 pP2pNoaAttr->uNoa1IntervalCnt =
10349 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10350 pP2pNoaAttr->uNoa1Duration =
10351 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10352 pP2pNoaAttr->uNoa1Interval =
10353 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10354 pP2pNoaAttr->uNoa1StartTime =
10355 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010356 pP2pNoaAttr->uNoa2IntervalCnt =
10357 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10358 pP2pNoaAttr->uNoa2Duration =
10359 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10360 pP2pNoaAttr->uNoa2Interval =
10361 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10362 pP2pNoaAttr->uNoa2StartTime =
10363 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010364 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10365 (void *)pP2pNoaAttr , 0) ;
10366 break;
10367 }
10368#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010369#ifdef FEATURE_WLAN_SCAN_PNO
10370 case WDI_PREF_NETWORK_FOUND_IND:
10371 {
10372 vos_msg_t vosMsg;
10373 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10375 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 if (NULL == pPrefNetworkFoundInd)
10377 {
10378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10379 "Memory allocation failure, "
10380 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10381 break;
10382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 /* Message Header */
10384 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10385 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10386
10387 /* Info from WDI Indication */
10388 pPrefNetworkFoundInd->ssId.length =
10389 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010391 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10392 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10393 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010395 /* VOS message wrapper */
10396 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10397 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10398 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010399 /* Send message to SME */
10400 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10401 {
10402 /* free the mem and return */
10403 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10404 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 break;
10406 }
10407#endif // FEATURE_WLAN_SCAN_PNO
10408
10409#ifdef WLAN_WAKEUP_EVENTS
10410 case WDI_WAKE_REASON_IND:
10411 {
10412 vos_msg_t vosMsg;
10413 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10414 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10415 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10416
10417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10418 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10419 wdiLowLevelInd->wdiIndicationType,
10420 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10421 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10422 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10423
10424 if (NULL == pWakeReasonInd)
10425 {
10426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10427 "Memory allocation failure, "
10428 "WDI_WAKE_REASON_IND not forwarded");
10429 break;
10430 }
10431
10432 vos_mem_zero(pWakeReasonInd, allocSize);
10433
10434 /* Message Header */
10435 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10436 pWakeReasonInd->mesgLen = allocSize;
10437
10438 /* Info from WDI Indication */
10439 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10440 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10441 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10442 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10443 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10444 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10445 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10446 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10447
10448 /* VOS message wrapper */
10449 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10450 vosMsg.bodyptr = (void *) pWakeReasonInd;
10451 vosMsg.bodyval = 0;
10452
10453 /* Send message to SME */
10454 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10455 {
10456 /* free the mem and return */
10457 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10458 }
10459
10460 break;
10461 }
10462#endif // WLAN_WAKEUP_EVENTS
10463
10464 case WDI_TX_PER_HIT_IND:
10465 {
10466 vos_msg_t vosMsg;
10467 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10468 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10469 /* VOS message wrapper */
10470 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10471 vosMsg.bodyptr = NULL;
10472 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010473 /* Send message to SME */
10474 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10475 {
10476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10477 }
10478 break;
10479 }
10480
10481 default:
10482 {
10483 /* TODO error */
10484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10485 "Received UNKNOWN Indication from WDI ");
10486 }
10487 }
10488 return ;
10489}
10490
Jeff Johnson295189b2012-06-20 16:38:30 -070010491/*
10492 * BA related processing in WDA.
10493 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010494void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10495 void* pUserData)
10496{
10497 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10498 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010499 if(NULL == pWdaParams)
10500 {
10501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010502 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010503 VOS_ASSERT(0) ;
10504 return ;
10505 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010506 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010507 vos_mem_free(pWdaParams->wdaMsgParam) ;
10508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10509 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010511 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010512 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10513 {
10514 tANI_U8 i = 0 ;
10515 tBaActivityInd *baActivityInd = NULL ;
10516 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10517 tANI_U8 allocSize = sizeof(tBaActivityInd)
10518 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10519 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10520 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010521 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010522 if(NULL == baActivityInd)
10523 {
10524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010525 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 VOS_ASSERT(0) ;
10527 return;
10528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010529 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10530 sizeof(tSirMacAddr)) ;
10531 baActivityInd->baCandidateCnt = baCandidateCount ;
10532
10533 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10534 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10535
10536 for(i = 0 ; i < baCandidateCount ; i++)
10537 {
10538 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10540 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010541 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10542 {
10543 baCandidate->baInfo[tid].fBaEnable =
10544 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10545 baCandidate->baInfo[tid].startingSeqNum =
10546 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10547 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010548 wdiBaCandidate++ ;
10549 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010550 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10552 }
10553 else
10554 {
10555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10556 "BA Trigger RSP with Failure received ");
10557 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010558 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010559}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010560
10561
10562/*
10563 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
10564 * during MCC
10565 */
10566void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
10567{
10568 wpt_uint32 enabled;
10569 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
10570 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
10571 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
10572
10573 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10574 != eSIR_SUCCESS)
10575 {
10576 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10577 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10578 return;
10579 }
10580
10581 if(!enabled)
10582 {
10583 return;
10584 }
10585
10586 if(NULL == pWDA)
10587 {
10588 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10589 "%s:WDA context is NULL", __func__);
10590 VOS_ASSERT(0);
10591 return;
10592 }
10593
10594 if(activate)
10595 {
10596 if( VOS_STATUS_SUCCESS !=
10597 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10598 {
10599 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10600 "Traffic Stats Timer Start Failed ");
10601 return;
10602 }
10603 WDI_DS_ActivateTrafficStats();
10604 }
10605 else
10606 {
10607 WDI_DS_DeactivateTrafficStats();
10608 WDI_DS_ClearTrafficStats();
10609
10610 if( VOS_STATUS_SUCCESS !=
10611 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10612 {
10613 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10614 "Traffic Stats Timer Stop Failed ");
10615 return;
10616 }
10617 }
10618}
10619
10620/*
10621 * Traffic Stats Timer handler
10622 */
10623void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
10624{
10625 WDI_Status wdiStatus;
10626 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
10627 WDI_TrafficStatsIndType trafficStatsIndParams;
10628 wpt_uint32 length, enabled;
10629 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10630
10631 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
10632 != eSIR_SUCCESS)
10633 {
10634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10635 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
10636 return;
10637 }
10638
10639 if(!enabled)
10640 {
10641 WDI_DS_DeactivateTrafficStats();
10642 return;
10643 }
10644
10645 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
10646
10647 if(pWdiTrafficStats != NULL)
10648 {
10649 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
10650 trafficStatsIndParams.length = length;
10651 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080010652 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010653 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10654 trafficStatsIndParams.pUserData = pWDA;
10655
10656 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
10657
10658 if(WDI_STATUS_PENDING == wdiStatus)
10659 {
10660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10661 "Pending received for %s:%d ",__func__,__LINE__ );
10662 }
10663 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
10664 {
10665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10666 "Failure in %s:%d ",__func__,__LINE__ );
10667 }
10668
10669 WDI_DS_ClearTrafficStats();
10670 }
10671 else
10672 {
10673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10674 "pWdiTrafficStats is Null");
10675 }
10676
10677 if( VOS_STATUS_SUCCESS !=
10678 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
10679 {
10680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
10681 "Traffic Stats Timer Start Failed ");
10682 return;
10683 }
10684}
10685
Jeff Johnson295189b2012-06-20 16:38:30 -070010686/*
10687 * BA Activity check timer handler
10688 */
10689void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10690{
10691 tANI_U8 curSta = 0 ;
10692 tANI_U8 tid = 0 ;
10693 tANI_U8 size = 0 ;
10694 tANI_U8 baCandidateCount = 0 ;
10695 tANI_U8 newBaCandidate = 0 ;
10696 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10697
10698 if(NULL == pWDA)
10699 {
10700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010701 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 VOS_ASSERT(0);
10703 return ;
10704 }
10705 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10706 {
10707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10708 "Inconsistent STA entries in WDA");
10709 VOS_ASSERT(0) ;
10710 }
10711 /* walk through all STA entries and find out TX packet count */
10712 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10713 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080010714#ifdef WLAN_SOFTAP_VSTA_FEATURE
10715 // We can only do BA on "hard" STAs.
10716 if (!(IS_HWSTA_IDX(curSta)))
10717 {
10718 continue;
10719 }
10720#endif //WLAN_SOFTAP_VSTA_FEATURE
10721 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10722 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010723 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010724 tANI_U32 txPktCount = 0 ;
10725 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010726 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010727 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10728 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10730 curSta, tid, &txPktCount)))
10731 {
10732#if 0
10733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10734 "************* %d:%d, %d ",curSta, txPktCount,
10735 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10736#endif
10737 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010738 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010739 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10740 curSta, tid)))
10741 {
10742 /* get prepare for sending message to HAL */
10743 //baCandidate[baCandidateCount].staIdx = curSta ;
10744 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10745 newBaCandidate = WDA_ENABLE_BA ;
10746 }
10747 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10748 }
10749 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 /* fill the entry for all the sta with given TID's */
10751 if(WDA_ENABLE_BA == newBaCandidate)
10752 {
10753 /* move to next BA candidate */
10754 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
10755 size += sizeof(WDI_TriggerBAReqCandidateType) ;
10756 baCandidateCount++ ;
10757 newBaCandidate = WDA_DISABLE_BA ;
10758 }
10759 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010760 /* prepare and send message to hal */
10761 if( 0 < baCandidateCount)
10762 {
10763 WDI_Status status = WDI_STATUS_SUCCESS ;
10764 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
10765 tWDA_ReqParams *pWdaParams =
10766 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010767 if(NULL == pWdaParams)
10768 {
10769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010770 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010771 VOS_ASSERT(0) ;
10772 return;
10773 }
10774 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
10775 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
10776 if(NULL == wdiTriggerBaReq)
10777 {
10778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010780 VOS_ASSERT(0) ;
10781 vos_mem_free(pWdaParams);
10782 return;
10783 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010784 do
10785 {
10786 WDI_TriggerBAReqinfoType *triggerBaInfo =
10787 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
10788 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
10789 /* TEMP_FIX: Need to see if WDI need check for assoc session for
10790 * for each request */
10791 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
10792 triggerBaInfo->ucBASessionID = 0;
10793 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
10794 } while(0) ;
10795 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
10796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010797 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 pWdaParams->pWdaContext = pWDA;
10799 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
10800 pWdaParams->wdaMsgParam = NULL;
10801 status = WDI_TriggerBAReq(wdiTriggerBaReq,
10802 WDA_TriggerBaReqCallback, pWdaParams) ;
10803 if(IS_WDI_STATUS_FAILURE(status))
10804 {
10805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10806 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
10807 vos_mem_free(pWdaParams->wdaMsgParam) ;
10808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10809 vos_mem_free(pWdaParams) ;
10810 }
10811 }
10812 else
10813 {
10814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10815 "There is no TID for initiating BA");
10816 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010817 if( VOS_STATUS_SUCCESS !=
10818 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10819 {
10820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10821 "BA Activity Timer Stop Failed ");
10822 return ;
10823 }
10824 if( VOS_STATUS_SUCCESS !=
10825 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10826 {
10827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10828 "BA Activity Timer Start Failed ");
10829 return;
10830 }
10831 return ;
10832}
Jeff Johnson295189b2012-06-20 16:38:30 -070010833/*
10834 * WDA common routine to create timer used by WDA.
10835 */
10836static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
10837{
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10839 tANI_U32 val = 0 ;
10840 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10841
10842 if(NULL == pMac)
10843 {
10844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010845 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010846 VOS_ASSERT(0);
10847 return VOS_STATUS_E_FAILURE;
10848 }
10849 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
10850 != eSIR_SUCCESS)
10851 {
10852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10853 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
10854 return VOS_STATUS_E_FAILURE;
10855 }
10856 val = SYS_MS_TO_TICKS(val) ;
10857
10858 /* BA activity check timer */
10859 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
10860 "BA Activity Check timer", WDA_TimerHandler,
10861 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
10862 if(status != TX_SUCCESS)
10863 {
10864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10865 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010866 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010867 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010868 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010869 /* Tx Complete Timeout timer */
10870 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
10871 "Tx Complete Check timer", WDA_TimerHandler,
10872 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010873 if(status != TX_SUCCESS)
10874 {
10875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10876 "Unable to create Tx Complete Timeout timer");
10877 /* Destroy timer of BA activity check timer */
10878 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10879 if(status != TX_SUCCESS)
10880 {
10881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10882 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010883 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010885 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010886 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010887
10888 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
10889
10890 /* Traffic Stats timer */
10891 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
10892 "Traffic Stats timer", WDA_TimerHandler,
10893 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
10894 if(status != TX_SUCCESS)
10895 {
10896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10897 "Unable to create traffic stats timer");
10898 /* Destroy timer of BA activity check timer */
10899 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10900 if(status != TX_SUCCESS)
10901 {
10902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10903 "Unable to Destroy BA activity timer");
10904 }
10905 /* Destroy timer of tx complete timer */
10906 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10907 if(status != TX_SUCCESS)
10908 {
10909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10910 "Unable to Tx complete timer");
10911 }
10912 return VOS_STATUS_E_FAILURE ;
10913 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010914 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010915}
Jeff Johnson295189b2012-06-20 16:38:30 -070010916/*
10917 * WDA common routine to destroy timer used by WDA.
10918 */
10919static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
10920{
10921 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10923 if(status != TX_SUCCESS)
10924 {
10925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10926 "Unable to Destroy Tx Complete Timeout timer");
10927 return eSIR_FAILURE ;
10928 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10930 if(status != TX_SUCCESS)
10931 {
10932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10933 "Unable to Destroy BA activity timer");
10934 return eSIR_FAILURE ;
10935 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010936 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
10937 if(status != TX_SUCCESS)
10938 {
10939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10940 "Unable to Destroy traffic stats timer");
10941 return eSIR_FAILURE ;
10942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010943 return eSIR_SUCCESS ;
10944}
Jeff Johnson295189b2012-06-20 16:38:30 -070010945/*
10946 * WDA timer handler.
10947 */
10948void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
10949{
10950 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
10951 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010952 /*
10953 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
10954 */
10955 wdaMsg.type = timerInfo ;
10956 wdaMsg.bodyptr = NULL;
10957 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 /* post the message.. */
10959 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
10960 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
10961 {
10962 vosStatus = VOS_STATUS_E_BADMSG;
10963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010964}
Jeff Johnson295189b2012-06-20 16:38:30 -070010965/*
10966 * WDA Tx Complete timeout Indication.
10967 */
10968void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
10969{
10970 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010971 if( pWDA->pAckTxCbFunc )
10972 {
10973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10974 "TxComplete timer expired\n");
10975 pWDA->pAckTxCbFunc( pMac, 0);
10976 pWDA->pAckTxCbFunc = NULL;
10977 }
10978 else
10979 {
10980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10981 "There is no request pending for TxComplete and wait timer expired\n");
10982 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010983}
Jeff Johnson295189b2012-06-20 16:38:30 -070010984/*
10985 * WDA Set REG Domain to VOS NV
10986 */
10987eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
10988{
10989 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
10990 {
10991 return eHAL_STATUS_INVALID_PARAMETER;
10992 }
10993 return eHAL_STATUS_SUCCESS;
10994}
10995#endif /* FEATURE_WLAN_INTEGRATED_SOC */
10996
Jeff Johnson295189b2012-06-20 16:38:30 -070010997#ifdef FEATURE_WLAN_SCAN_PNO
10998/*
10999 * FUNCTION: WDA_PNOScanReqCallback
11000 *
11001 */
11002void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
11003{
11004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011006 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011007 if(NULL == pWdaParams)
11008 {
11009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011010 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011011 VOS_ASSERT(0) ;
11012 return ;
11013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 if( pWdaParams != NULL )
11015 {
11016 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11017 {
11018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11019 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011020 if( pWdaParams->wdaMsgParam != NULL)
11021 {
11022 vos_mem_free(pWdaParams->wdaMsgParam);
11023 }
11024
11025 vos_mem_free(pWdaParams) ;
11026 }
11027
11028 return ;
11029}
Jeff Johnson295189b2012-06-20 16:38:30 -070011030/*
11031 * FUNCTION: WDA_UpdateScanParamsCallback
11032 *
11033 */
11034void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
11035{
11036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011038 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011039 if(NULL == pWdaParams)
11040 {
11041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011042 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011043 VOS_ASSERT(0) ;
11044 return ;
11045 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011046 if( pWdaParams != NULL )
11047 {
11048 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11049 {
11050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11051 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011052 if( pWdaParams->wdaMsgParam != NULL)
11053 {
11054 vos_mem_free(pWdaParams->wdaMsgParam);
11055 }
11056 vos_mem_free(pWdaParams) ;
11057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 return ;
11059}
Jeff Johnson295189b2012-06-20 16:38:30 -070011060/*
11061 * FUNCTION: WDA_SetPowerParamsCallback
11062 *
11063 */
11064void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
11065{
Jeff Johnsone7245742012-09-05 17:12:55 -070011066 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011067
11068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011069 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011070 if(NULL == pWdaParams)
11071 {
11072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011073 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 VOS_ASSERT(0) ;
11075 return ;
11076 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011077 if( pWdaParams != NULL )
11078 {
11079 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11080 {
11081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11082 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011083 if( pWdaParams->wdaMsgParam != NULL)
11084 {
11085 vos_mem_free(pWdaParams->wdaMsgParam);
11086 }
11087 vos_mem_free(pWdaParams) ;
11088 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011089 return ;
11090}
Jeff Johnson295189b2012-06-20 16:38:30 -070011091/*
11092 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11093 * Request to WDI to set Preferred Network List.Offload
11094 */
11095VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
11096 tSirPNOScanReq *pPNOScanReqParams)
11097{
Jeff Johnson43971f52012-07-17 12:26:56 -070011098 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011099 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
11100 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
11101 tWDA_ReqParams *pWdaParams ;
11102 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011104 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011105 if(NULL == pwdiPNOScanReqInfo)
11106 {
11107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011109 VOS_ASSERT(0);
11110 return VOS_STATUS_E_NOMEM;
11111 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011112 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11113 if(NULL == pWdaParams)
11114 {
11115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011117 VOS_ASSERT(0);
11118 vos_mem_free(pwdiPNOScanReqInfo);
11119 return VOS_STATUS_E_NOMEM;
11120 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011121 //
11122 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
11123 //
11124 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
11125 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070011126 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
11127 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
11128 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
11130 {
11131 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
11132 &pPNOScanReqParams->aNetworks[i],
11133 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
11134 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011135 /*Scan timer intervals*/
11136 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
11137 &pPNOScanReqParams->scanTimers,
11138 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070011139 /*Probe template for 2.4GHz band*/
11140 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
11141 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11142 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011143 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
11144 pPNOScanReqParams->p24GProbeTemplate,
11145 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011146 /*Probe template for 5GHz band*/
11147 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
11148 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
11149 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011150 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
11151 pPNOScanReqParams->p5GProbeTemplate,
11152 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011154
Jeff Johnson295189b2012-06-20 16:38:30 -070011155 /* Store Params pass it to WDI */
11156 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
11157 pWdaParams->pWdaContext = pWDA;
11158 /* Store param pointer as passed in by caller */
11159 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011160 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
11161 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011162 if(IS_WDI_STATUS_FAILURE(status))
11163 {
11164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11165 "Failure in Set PNO REQ WDI API, free all the memory " );
11166 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11167 vos_mem_free(pWdaParams->wdaMsgParam);
11168 pWdaParams->wdaWdiApiMsgParam = NULL;
11169 pWdaParams->wdaMsgParam = NULL;
11170 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011171 return CONVERT_WDI2VOS_STATUS(status) ;
11172}
Jeff Johnson295189b2012-06-20 16:38:30 -070011173/*
11174 * FUNCTION: WDA_RssiFilterCallback
11175 *
11176 */
11177void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
11178{
11179 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11180
11181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011182 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011183
11184 VOS_ASSERT(NULL != pWdaParams);
11185
11186 vos_mem_free(pWdaParams->wdaMsgParam) ;
11187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11188 vos_mem_free(pWdaParams) ;
11189
11190 return ;
11191}
11192/*
11193 * FUNCTION: WDA_ProcessSetPreferredNetworkList
11194 * Request to WDI to set Preferred Network List.Offload
11195 */
11196VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
11197 tSirSetRSSIFilterReq* pRssiFilterParams)
11198{
Jeff Johnson43971f52012-07-17 12:26:56 -070011199 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011200 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
11201 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
11202 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011204 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011205 if(NULL == pwdiSetRssiFilterReqInfo)
11206 {
11207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011208 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011209 VOS_ASSERT(0);
11210 return VOS_STATUS_E_NOMEM;
11211 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11213 if(NULL == pWdaParams)
11214 {
11215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011216 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011217 VOS_ASSERT(0);
11218 vos_mem_free(pwdiSetRssiFilterReqInfo);
11219 return VOS_STATUS_E_NOMEM;
11220 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011221 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
11222 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011223
Jeff Johnson295189b2012-06-20 16:38:30 -070011224 /* Store Params pass it to WDI */
11225 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
11226 pWdaParams->pWdaContext = pWDA;
11227 /* Store param pointer as passed in by caller */
11228 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
11230 (WDI_PNOScanCb)WDA_RssiFilterCallback,
11231 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 if(IS_WDI_STATUS_FAILURE(status))
11233 {
11234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11235 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
11236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11237 vos_mem_free(pWdaParams->wdaMsgParam);
11238 pWdaParams->wdaWdiApiMsgParam = NULL;
11239 pWdaParams->wdaMsgParam = NULL;
11240 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011241 return CONVERT_WDI2VOS_STATUS(status) ;
11242}
11243
Jeff Johnson295189b2012-06-20 16:38:30 -070011244/*
11245 * FUNCTION: WDA_ProcessUpdateScanParams
11246 * Request to WDI to update Scan Parameters
11247 */
11248VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
11249 tSirUpdateScanParams *pUpdateScanParams)
11250{
Jeff Johnson43971f52012-07-17 12:26:56 -070011251 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
11253 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
11254 sizeof(WDI_UpdateScanParamsInfoType)) ;
11255 tWDA_ReqParams *pWdaParams ;
11256 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011258 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011259 if(NULL == wdiUpdateScanParamsInfoType)
11260 {
11261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011262 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011263 VOS_ASSERT(0);
11264 return VOS_STATUS_E_NOMEM;
11265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11267 if ( NULL == pWdaParams )
11268 {
11269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011270 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011271 VOS_ASSERT(0);
11272 vos_mem_free(wdiUpdateScanParamsInfoType);
11273 return VOS_STATUS_E_NOMEM;
11274 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011275 //
11276 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11277 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11279 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11280 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11281 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11282 "sir struct %d wdi struct %d",
11283 pUpdateScanParams->b11dEnabled,
11284 pUpdateScanParams->b11dResolved,
11285 pUpdateScanParams->ucChannelCount,
11286 pUpdateScanParams->usPassiveMinChTime,
11287 pUpdateScanParams->usPassiveMaxChTime,
11288 pUpdateScanParams->usActiveMinChTime,
11289 pUpdateScanParams->usActiveMaxChTime,
11290 sizeof(tSirUpdateScanParams),
11291 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11292
Jeff Johnson295189b2012-06-20 16:38:30 -070011293 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11294 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011295 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11296 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011297 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11298 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011299 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11300 pUpdateScanParams->usActiveMaxChTime;
11301 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11302 pUpdateScanParams->usActiveMinChTime;
11303 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11304 pUpdateScanParams->usPassiveMaxChTime;
11305 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11306 pUpdateScanParams->usPassiveMinChTime;
11307
Jeff Johnson295189b2012-06-20 16:38:30 -070011308 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011309 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11310 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011311
Jeff Johnson295189b2012-06-20 16:38:30 -070011312 for ( i = 0; i <
11313 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11314 i++)
11315 {
11316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11317 "Update Scan Parameters channel: %d",
11318 pUpdateScanParams->aChannels[i]);
11319
11320 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11321 pUpdateScanParams->aChannels[i];
11322 }
11323
Jeff Johnson295189b2012-06-20 16:38:30 -070011324 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011325
Jeff Johnson295189b2012-06-20 16:38:30 -070011326 /* Store Params pass it to WDI */
11327 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11328 pWdaParams->pWdaContext = pWDA;
11329 /* Store param pointer as passed in by caller */
11330 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011331
Jeff Johnson295189b2012-06-20 16:38:30 -070011332
11333
11334 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11335 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11336 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011337 if(IS_WDI_STATUS_FAILURE(status))
11338 {
11339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11340 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11341 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11342 vos_mem_free(pWdaParams->wdaMsgParam);
11343 vos_mem_free(pWdaParams);
11344 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 return CONVERT_WDI2VOS_STATUS(status) ;
11346}
11347#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070011348#ifdef WLAN_FEATURE_PACKET_FILTERING
11349/*
11350 * FUNCTION: WDA_8023MulticastListReqCallback
11351 *
11352 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011353void WDA_8023MulticastListReqCallback(
11354 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11355 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011356{
11357 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011359 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011360 if(NULL == pWdaParams)
11361 {
11362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011363 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 VOS_ASSERT(0) ;
11365 return ;
11366 }
11367
11368 vos_mem_free(pWdaParams->wdaMsgParam) ;
11369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11370 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 //print a msg, nothing else to do
11372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11373 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 return ;
11375}
Jeff Johnson295189b2012-06-20 16:38:30 -070011376/*
11377 * FUNCTION: WDA_Process8023MulticastListReq
11378 * Request to WDI to add 8023 Multicast List
11379 */
11380VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11381 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11382{
Jeff Johnson43971f52012-07-17 12:26:56 -070011383 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011384 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11385 tWDA_ReqParams *pWdaParams ;
11386 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011388 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011389 pwdiFltPktSetMcListReqParamsType =
11390 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11391 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11392 ) ;
11393 if(NULL == pwdiFltPktSetMcListReqParamsType)
11394 {
11395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011397 return VOS_STATUS_E_NOMEM;
11398 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11400 if(NULL == pWdaParams)
11401 {
11402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11405 return VOS_STATUS_E_NOMEM;
11406 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011407
Jeff Johnson295189b2012-06-20 16:38:30 -070011408 //
11409 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11410 //
11411 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011412 pRcvFltMcAddrList->ulMulticastAddrCnt;
11413
11414 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11415 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11416 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11417 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11418
Jeff Johnson295189b2012-06-20 16:38:30 -070011419 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11420 {
11421 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11422 &(pRcvFltMcAddrList->multicastAddr[i]),
11423 sizeof(tSirMacAddr));
11424 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011425 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011426
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 /* Store Params pass it to WDI */
11428 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11429 pWdaParams->pWdaContext = pWDA;
11430 /* Store param pointer as passed in by caller */
11431 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 status = WDI_8023MulticastListReq(
11433 pwdiFltPktSetMcListReqParamsType,
11434 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11435 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 if(IS_WDI_STATUS_FAILURE(status))
11437 {
11438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11439 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11441 vos_mem_free(pWdaParams->wdaMsgParam);
11442 vos_mem_free(pWdaParams);
11443 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 return CONVERT_WDI2VOS_STATUS(status) ;
11445}
Jeff Johnson295189b2012-06-20 16:38:30 -070011446/*
11447 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11448 *
11449 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011450void WDA_ReceiveFilterSetFilterReqCallback(
11451 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11452 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011453{
11454 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011456 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011457 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 if(NULL == pWdaParams)
11459 {
11460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011461 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011462 VOS_ASSERT(0) ;
11463 return ;
11464 }
11465
11466 vos_mem_free(pWdaParams->wdaMsgParam) ;
11467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11468 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011469 //print a msg, nothing else to do
11470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11471 "WDA_ReceiveFilterSetFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011472 return ;
11473}
Jeff Johnson295189b2012-06-20 16:38:30 -070011474/*
11475 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11476 * Request to WDI to set Receive Filters
11477 */
11478VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11479 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11480{
Jeff Johnson43971f52012-07-17 12:26:56 -070011481 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011482 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11483 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11484 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11485 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11486 tWDA_ReqParams *pWdaParams ;
11487 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011489 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11491 {
11492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011494 VOS_ASSERT(0);
11495 return VOS_STATUS_E_NOMEM;
11496 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011497 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11498 if(NULL == pWdaParams)
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011501 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 VOS_ASSERT(0);
11503 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11504 return VOS_STATUS_E_NOMEM;
11505 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011506 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11507 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11508 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11509 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011510 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11511 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11512
11513 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11514 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011515
11516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11517 "FID %d FT %d NParams %d CT %d",
11518 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11519 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11520 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11521 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011522 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11523 {
11524 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11525 &pRcvPktFilterCfg->paramsData[i],
11526 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11528 "Proto %d Comp Flag %d \n",
11529 pwdiSetRcvPktFilterReqParamsType->
11530 wdiPktFilterCfg.paramsData[i].protocolLayer,
11531 pwdiSetRcvPktFilterReqParamsType->
11532 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11534 "Data Offset %d Data Len %d\n",
11535 pwdiSetRcvPktFilterReqParamsType->
11536 wdiPktFilterCfg.paramsData[i].dataOffset,
11537 pwdiSetRcvPktFilterReqParamsType->
11538 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11540 "CData: %d:%d:%d:%d:%d:%d\n",
11541 pwdiSetRcvPktFilterReqParamsType->
11542 wdiPktFilterCfg.paramsData[i].compareData[0],
11543 pwdiSetRcvPktFilterReqParamsType->
11544 wdiPktFilterCfg.paramsData[i].compareData[1],
11545 pwdiSetRcvPktFilterReqParamsType->
11546 wdiPktFilterCfg.paramsData[i].compareData[2],
11547 pwdiSetRcvPktFilterReqParamsType->
11548 wdiPktFilterCfg.paramsData[i].compareData[3],
11549 pwdiSetRcvPktFilterReqParamsType->
11550 wdiPktFilterCfg.paramsData[i].compareData[4],
11551 pwdiSetRcvPktFilterReqParamsType->
11552 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11554 "MData: %d:%d:%d:%d:%d:%d\n",
11555 pwdiSetRcvPktFilterReqParamsType->
11556 wdiPktFilterCfg.paramsData[i].dataMask[0],
11557 pwdiSetRcvPktFilterReqParamsType->
11558 wdiPktFilterCfg.paramsData[i].dataMask[1],
11559 pwdiSetRcvPktFilterReqParamsType->
11560 wdiPktFilterCfg.paramsData[i].dataMask[2],
11561 pwdiSetRcvPktFilterReqParamsType->
11562 wdiPktFilterCfg.paramsData[i].dataMask[3],
11563 pwdiSetRcvPktFilterReqParamsType->
11564 wdiPktFilterCfg.paramsData[i].dataMask[4],
11565 pwdiSetRcvPktFilterReqParamsType->
11566 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011567 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011568 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 /* Store Params pass it to WDI */
11570 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11571 pWdaParams->pWdaContext = pWDA;
11572 /* Store param pointer as passed in by caller */
11573 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011574 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
11575 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterReqCallback,
11576 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011577 if(IS_WDI_STATUS_FAILURE(status))
11578 {
11579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11580 "Failure in SetFilter(),free all the memory,status %d ",status);
11581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11582 vos_mem_free(pWdaParams->wdaMsgParam);
11583 vos_mem_free(pWdaParams);
11584 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011585 return CONVERT_WDI2VOS_STATUS(status) ;
11586}
Jeff Johnson295189b2012-06-20 16:38:30 -070011587/*
11588 * FUNCTION: WDA_FilterMatchCountReqCallback
11589 *
11590 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011591void WDA_FilterMatchCountReqCallback(
11592 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11593 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011594{
11595 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11596 tWDA_CbContext *pWDA;
11597 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11598 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11599 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11600 tANI_U8 i;
11601 vos_msg_t vosMsg;
11602
11603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011604 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011605 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11606
Jeff Johnsone7245742012-09-05 17:12:55 -070011607 if(NULL == pRcvFltPktMatchCntRsp)
11608 {
11609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011610 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011611 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011612 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011613 return ;
11614 }
11615
Jeff Johnson295189b2012-06-20 16:38:30 -070011616 if(NULL == pWdaParams)
11617 {
11618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011619 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011620 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011621 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 return ;
11623 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011624 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11625 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011626 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11627 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11628
11629 /* Message Header */
11630 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11631 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11632
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011633 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011634
11635 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11636 {
11637 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11638 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11639 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 /* VOS message wrapper */
11641 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11642 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11643 vosMsg.bodyval = 0;
11644 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11645 {
11646 /* free the mem and return */
11647 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11648 }
11649
11650 vos_mem_free(pWdaParams->wdaMsgParam) ;
11651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11652 vos_mem_free(pWdaParams) ;
11653}
Jeff Johnson295189b2012-06-20 16:38:30 -070011654/*
11655 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11656 * Request to WDI to get PC Filter Match Count
11657 */
11658VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11659{
Jeff Johnson43971f52012-07-17 12:26:56 -070011660 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011661 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11662 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11663 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011665 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011666 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11667 {
11668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011669 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011670 VOS_ASSERT(0);
11671 return VOS_STATUS_E_NOMEM;
11672 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011673 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11674 if(NULL == pWdaParams)
11675 {
11676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011677 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 VOS_ASSERT(0);
11679 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11680 return VOS_STATUS_E_NOMEM;
11681 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011682
Jeff Johnson295189b2012-06-20 16:38:30 -070011683 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11684
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011685 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11686 pRcvFltPktMatchRsp->bssId,
11687 sizeof(wpt_macAddr));
11688
Jeff Johnson295189b2012-06-20 16:38:30 -070011689 /* Store Params pass it to WDI */
11690 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11691 pWdaParams->pWdaContext = pWDA;
11692 /* Store param pointer as passed in by caller */
11693 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011694 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11695 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11696 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011697 if(IS_WDI_STATUS_FAILURE(status))
11698 {
11699 /* failure returned by WDI API */
11700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11701 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11703 vos_mem_free(pWdaParams) ;
11704 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11705 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011707 return CONVERT_WDI2VOS_STATUS(status) ;
11708}
Jeff Johnson295189b2012-06-20 16:38:30 -070011709/*
11710 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11711 *
11712 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011713void WDA_ReceiveFilterClearFilterReqCallback(
11714 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11715 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011716{
11717 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011719 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011720/* WDA_VOS_ASSERT(NULL != pWdaParams); */
11721 if(NULL == pWdaParams)
11722 {
11723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011724 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011725 VOS_ASSERT(0) ;
11726 return ;
11727 }
11728
11729 vos_mem_free(pWdaParams->wdaMsgParam) ;
11730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11731 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011732 //print a msg, nothing else to do
11733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11734 "WDA_ReceiveFilterClearFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011735 return ;
11736}
Jeff Johnson295189b2012-06-20 16:38:30 -070011737/*
11738 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
11739 * Request to WDI to clear Receive Filters
11740 */
11741VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
11742 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
11743{
Jeff Johnson43971f52012-07-17 12:26:56 -070011744 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011745 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
11746 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
11747 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011749 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011750 if(NULL == pwdiRcvFltPktClearReqParamsType)
11751 {
11752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011754 VOS_ASSERT(0);
11755 return VOS_STATUS_E_NOMEM;
11756 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011757 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11758 if(NULL == pWdaParams)
11759 {
11760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011761 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011762 VOS_ASSERT(0);
11763 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
11764 return VOS_STATUS_E_NOMEM;
11765 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011766 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
11767 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070011768 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
11769 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
11770 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
11771 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011772
11773 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011774 /* Store Params pass it to WDI */
11775 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
11776 pWdaParams->pWdaContext = pWDA;
11777 /* Store param pointer as passed in by caller */
11778 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011779 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
11780 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterReqCallback,
11781 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011782 if(IS_WDI_STATUS_FAILURE(status))
11783 {
11784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11785 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
11786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11787 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 return CONVERT_WDI2VOS_STATUS(status) ;
11789}
11790#endif // WLAN_FEATURE_PACKET_FILTERING
11791
Jeff Johnson295189b2012-06-20 16:38:30 -070011792/*
11793 * FUNCTION: WDA_ProcessSetPowerParamsReq
11794 * Request to WDI to set power params
11795 */
11796VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
11797 tSirSetPowerParamsReq *pPowerParams)
11798{
Jeff Johnson43971f52012-07-17 12:26:56 -070011799 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011800 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
11801 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011802 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011804 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011805 if(NULL == pwdiSetPowerParamsReqInfo)
11806 {
11807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011808 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011809 VOS_ASSERT(0);
11810 return VOS_STATUS_E_NOMEM;
11811 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011812 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11813 if(NULL == pWdaParams)
11814 {
11815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011816 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011817 VOS_ASSERT(0);
11818 vos_mem_free(pwdiSetPowerParamsReqInfo);
11819 return VOS_STATUS_E_NOMEM;
11820 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011821
Jeff Johnson295189b2012-06-20 16:38:30 -070011822
11823 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
11824 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011825 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
11826 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070011827 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
11828 pPowerParams->uListenInterval;
11829 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
11830 pPowerParams->uBcastMcastFilter;
11831 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
11832 pPowerParams->uEnableBET;
11833 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
11834 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070011835 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011836
Jeff Johnson295189b2012-06-20 16:38:30 -070011837 /* Store Params pass it to WDI */
11838 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
11839 pWdaParams->pWdaContext = pWDA;
11840 /* Store param pointer as passed in by caller */
11841 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011842 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
11843 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
11844 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011845 if(IS_WDI_STATUS_FAILURE(status))
11846 {
11847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11848 "Failure in Set power params REQ WDI API, free all the memory " );
11849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11850 vos_mem_free(pWdaParams->wdaMsgParam);
11851 pWdaParams->wdaWdiApiMsgParam = NULL;
11852 pWdaParams->wdaMsgParam = NULL;
11853 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011854 return CONVERT_WDI2VOS_STATUS(status) ;
11855}
11856
11857/*
11858 * FUNCTION: WDA_SetTmLevelRspCallback
11859 * Set TM Level response
11860 */
11861void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
11862{
11863 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11864
11865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011866 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011867
11868 if(NULL == pWdaParams)
11869 {
11870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011871 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011872 VOS_ASSERT(0) ;
11873 return ;
11874 }
11875
11876 /* Dose not need to send notification to upper layer
11877 * Just free allocated resources */
11878 if( pWdaParams != NULL )
11879 {
11880 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11881 {
11882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11883 }
11884 vos_mem_free(pWdaParams->wdaMsgParam) ;
11885 vos_mem_free(pWdaParams) ;
11886 }
11887}
11888
11889/*
11890 * FUNCTION: WDA_ProcessSetTmLevelReq
11891 * Set TM Level request
11892 */
11893VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
11894 tAniSetTmLevelReq *setTmLevelReq)
11895{
11896 WDI_Status status = WDI_STATUS_SUCCESS ;
11897 tWDA_ReqParams *pWdaParams ;
11898 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
11899 (WDI_SetTmLevelReqType *)vos_mem_malloc(
11900 sizeof(WDI_SetTmLevelReqType)) ;
11901 if(NULL == wdiSetTmLevelReq)
11902 {
11903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011905 VOS_ASSERT(0);
11906 return VOS_STATUS_E_NOMEM;
11907 }
11908
11909 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11910 if(NULL == pWdaParams)
11911 {
11912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011914 VOS_ASSERT(0);
11915 vos_mem_free(wdiSetTmLevelReq);
11916 return VOS_STATUS_E_NOMEM;
11917 }
11918
11919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011920 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011921
11922 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
11923 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
11924
11925 pWdaParams->pWdaContext = pWDA;
11926 pWdaParams->wdaMsgParam = setTmLevelReq;
11927 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
11928
11929 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
11930 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
11931
11932 if(IS_WDI_STATUS_FAILURE(status))
11933 {
11934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080011935 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 vos_mem_free(pWdaParams->wdaMsgParam) ;
11937 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11938 vos_mem_free(pWdaParams) ;
11939 }
11940
11941 return CONVERT_WDI2VOS_STATUS(status) ;
11942}
11943
11944VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
11945 tpTxControlParams pTxCtrlParam)
11946{
11947 VOS_STATUS wdaStatus;
11948
11949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011950 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011951 if( pTxCtrlParam == NULL )
11952 {
11953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011954 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011955 return VOS_STATUS_E_FAILURE;
11956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011957 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
11958 {
11959 wdaStatus = WDA_SuspendDataTx(pWDA);
11960 }
11961 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
11962 {
11963 wdaStatus = WDA_ResumeDataTx(pWDA);
11964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011965 return wdaStatus;
11966}
11967
11968 /* FUNCTION WDA_featureCapsExchange
11969 * WDA API to invoke capability exchange between host and FW.
11970 */
11971void WDA_featureCapsExchange(v_PVOID_t pVosContext)
11972{
11973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011974 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011975 WDI_featureCapsExchangeReq( NULL, pVosContext);
11976}
11977
Yathish9f22e662012-12-10 14:21:35 -080011978/* FUNCTION WDA_disableCapablityFeature
11979 * WDA API to diable Active mode offload in host.
11980 */
11981void WDA_disableCapablityFeature(tANI_U8 feature_index)
11982{
11983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11984 "%s:enter", __func__ );
11985 WDI_disableCapablityFeature(feature_index);
11986}
11987
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 /* FUNCTION WDA_getHostWlanFeatCaps
11989 * Wrapper for WDI API, that will return if the feature (enum value).passed
11990 * to this API is supported or not in Host
11991 * return value
11992 * 0 - implies feature is NOT Supported
11993 * any non zero value - implies feature is SUPPORTED
11994 */
11995tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
11996{
11997 return WDI_getHostWlanFeatCaps(featEnumValue);
11998}
11999
12000 /* FUNCTION WDA_getFwWlanFeatCaps
12001 * Wrapper for WDI API, that will return if the feature (enum value).passed
12002 * to this API is supported or not in FW
12003 * return value
12004 * 0 - implies feature is NOT Supported
12005 * any non zero value - implies feature is SUPPORTED
12006 */
12007tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
12008{
12009 return WDI_getFwWlanFeatCaps(featEnumValue);
12010}
12011
12012/*
12013 * FUNCTION: WDA_shutdown
12014 * Shutdown WDA/WDI without handshaking with Riva.
12015 * Synchronous function.
12016 */
12017VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
12018{
12019 WDI_Status wdiStatus;
12020 //tANI_U8 eventIdx = 0;
12021 VOS_STATUS status = VOS_STATUS_SUCCESS;
12022 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070012023 if (NULL == pWDA)
12024 {
12025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012026 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070012027 VOS_ASSERT(0);
12028 return VOS_STATUS_E_FAILURE;
12029 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012030 /* FTM mode stay START_STATE */
12031 if( (WDA_READY_STATE != pWDA->wdaState) &&
12032 (WDA_INIT_STATE != pWDA->wdaState) &&
12033 (WDA_START_STATE != pWDA->wdaState) )
12034 {
12035 VOS_ASSERT(0);
12036 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012037
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012038 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
12039 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070012040 {
12041 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012042 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012044
Jeff Johnson295189b2012-06-20 16:38:30 -070012045 /* call WDI shutdown */
12046 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
12048 {
12049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12050 "error in WDA Stop" );
12051 status = VOS_STATUS_E_FAILURE;
12052 }
12053 /* WDI stop is synchrnous, shutdown is complete when it returns */
12054 pWDA->wdaState = WDA_STOP_STATE;
12055
Jeff Johnson295189b2012-06-20 16:38:30 -070012056 /* shutdown should perform the stop & close actions. */
12057 /* Destroy the event */
12058 status = vos_event_destroy(&pWDA->txFrameEvent);
12059 if(!VOS_IS_STATUS_SUCCESS(status))
12060 {
12061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12062 "VOS Event destroy failed - status = %d\n", status);
12063 status = VOS_STATUS_E_FAILURE;
12064 }
12065 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
12066 if(!VOS_IS_STATUS_SUCCESS(status))
12067 {
12068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12069 "VOS Event destroy failed - status = %d\n", status);
12070 status = VOS_STATUS_E_FAILURE;
12071 }
12072 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
12073 if(!VOS_IS_STATUS_SUCCESS(status))
12074 {
12075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12076 "VOS Event destroy failed - status = %d\n", status);
12077 status = VOS_STATUS_E_FAILURE;
12078 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012079 /* free WDA context */
12080 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
12081 if ( !VOS_IS_STATUS_SUCCESS(status) )
12082 {
12083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12084 "error in WDA close " );
12085 status = VOS_STATUS_E_FAILURE;
12086 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012087 return status;
12088}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012089
Jeff Johnsone7245742012-09-05 17:12:55 -070012090/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012091 * FUNCTION: WDA_setNeedShutdown
12092 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070012093 */
12094
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080012095void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070012096{
12097 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012098 if(pWDA == NULL)
12099 {
12100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12101 "Could not get the WDA Context pointer" );
12102 return;
12103 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012104 pWDA->needShutdown = TRUE;
12105}
12106/*
12107 * FUNCTION: WDA_needShutdown
12108 * WDA needs a shutdown
12109 */
12110
12111v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
12112{
12113 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070012114 if(pWDA == NULL)
12115 {
12116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12117 "Could not get the WDA Context pointer" );
12118 return 0;
12119 }
12120 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070012121}
12122
Mohit Khanna4a70d262012-09-11 16:30:12 -070012123#ifdef WLAN_FEATURE_11AC
12124/*
12125 * FUNCTION: WDA_SetBeaconFilterReqCallback
12126 *
12127 */
12128void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
12129{
12130 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012132 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012133 if(NULL == pWdaParams)
12134 {
12135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012136 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012137 VOS_ASSERT(0) ;
12138 return ;
12139 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012140
Mohit Khanna4a70d262012-09-11 16:30:12 -070012141 vos_mem_free(pWdaParams->wdaMsgParam) ;
12142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12143 vos_mem_free(pWdaParams) ;
12144 /*
12145 * No respone required for SetBeaconFilter req so just free the request
12146 * param here
12147 */
12148
12149 return ;
12150}
12151
12152VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
12153 tUpdateVHTOpMode *pData)
12154{
12155 WDI_Status status = WDI_STATUS_SUCCESS ;
12156 tWDA_ReqParams *pWdaParams ;
12157 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
12158 sizeof(WDI_UpdateVHTOpMode)) ;
12159 if(NULL == wdiTemp)
12160 {
12161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012162 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012163 VOS_ASSERT(0);
12164 return VOS_STATUS_E_NOMEM;
12165 }
12166 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12167 if(NULL == pWdaParams)
12168 {
12169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012170 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070012171 VOS_ASSERT(0);
12172 vos_mem_free(wdiTemp);
12173 return VOS_STATUS_E_NOMEM;
12174 }
12175
12176 wdiTemp->opMode = pData->opMode;
12177 wdiTemp->staId = pData->staId;
12178
12179 pWdaParams->pWdaContext = pWDA;
12180 /* Store Req pointer, as this will be used for response */
12181 pWdaParams->wdaMsgParam = (void *)pData;
12182 /* store Params pass it to WDI */
12183 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
12184
12185 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
12186
12187 if(IS_WDI_STATUS_FAILURE(status))
12188 {
12189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12190 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
12191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12192 vos_mem_free(pWdaParams->wdaMsgParam);
12193 vos_mem_free(pWdaParams);
12194 }
12195 return CONVERT_WDI2VOS_STATUS(status) ;
12196}
12197#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012198
12199/*==========================================================================
12200 FUNCTION WDA_TransportChannelDebug
12201
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070012202 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012203 Display Transport Channel debugging information
12204 User may request to display DXE channel snapshot
12205 Or if host driver detects any abnormal stcuk may display
12206
12207 PARAMETERS
Jeff Johnsonb88db982012-12-10 13:34:59 -080012208 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012209 enableStallDetect : Enable stall detect feature
12210 This feature will take effect to data performance
12211 Not integrate till fully verification
12212
12213 RETURN VALUE
12214 NONE
12215
12216===========================================================================*/
12217void WDA_TransportChannelDebug
12218(
12219 v_BOOL_t displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012220 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012221)
12222{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070012223 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070012224 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012225}