blob: 466189043d4ff8cce6ba2c400615cc38df5455ea [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700148extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
149
Jeff Johnson295189b2012-06-20 16:38:30 -0700150/* forward declarations */
151void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
152 void *pBodyptr, tANI_U32 bodyVal) ;
153VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
154 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
156VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
157
158extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
159 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
160void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
161 tANI_U32 *pConfig) ;
162void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
163 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
164void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
165 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
166void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
167 void* pUserData ) ;
168static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
169static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
170void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800171void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700172void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef WLAN_FEATURE_VOWIFI_11R
174VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
175#endif /* WLAN_FEATURE_VOWIFI_11R */
176
Jeff Johnson295189b2012-06-20 16:38:30 -0700177void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
178void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
179VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef FEATURE_WLAN_SCAN_PNO
181static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
182static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
183static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
184#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700186VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
222VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
223 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700224#ifdef WLAN_FEATURE_11AC
225VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
226 tUpdateVHTOpMode *pData);
227#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700228/*
229 * FUNCTION: WDA_open
230 * Allocate the WDA context
231 */
232VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
233 tMacOpenParameters *pMacParams )
234{
235 tWDA_CbContext *wdaContext;
236 VOS_STATUS status;
237 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700238 /* Allocate WDA context */
239 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
240 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
241 if(!VOS_IS_STATUS_SUCCESS(status))
242 {
243 return VOS_STATUS_E_NOMEM;
244 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700245 /*__asm int 3;*/
246 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
247
248 /* Initialize data structures */
249 wdaContext->pVosContext = pVosContext;
250 wdaContext->wdaState = WDA_INIT_STATE;
251 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
252
253 /* Initialize WDA-WDI synchronization event */
254 status = vos_event_init(&wdaContext->wdaWdiEvent);
255 if(!VOS_IS_STATUS_SUCCESS(status))
256 {
257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
258 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800259 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700260 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700261 /* Init Frame transfer event */
262 status = vos_event_init(&wdaContext->txFrameEvent);
263 if(!VOS_IS_STATUS_SUCCESS(status))
264 {
265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
266 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800267 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 status = vos_event_init(&wdaContext->suspendDataTxEvent);
270 if(!VOS_IS_STATUS_SUCCESS(status))
271 {
272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
273 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800274 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
277 if(!VOS_IS_STATUS_SUCCESS(status))
278 {
279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
280 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800281 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700282 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700283 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700284 wdaContext->driverMode = pMacParams->driverType;
285 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
286 &wdiDevCapability, pMacParams->driverType))
287 {
288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
289 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800290 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 }
292 else
293 {
294 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
295 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
296 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700297 /* update max STA in WDA used for BA */
298 wdaContext->wdaMaxSta = pMacParams->maxStation;
299 /* store the frameTransRequired flag in wdaContext, to send this to HAL
300 * in WDA_Start
301 */
302 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
303 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700304 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800305
306error:
307 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
308 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700309}
310
Jeff Johnson295189b2012-06-20 16:38:30 -0700311/*
312 * FUNCTION: WDA_preStart
313 * Trigger DAL-AL to start CFG download
314 */
315VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
316{
317 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
318 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 /*
320 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
321 */
322 wdaMsg.type = WNI_CFG_DNLD_REQ ;
323 wdaMsg.bodyptr = NULL;
324 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 /* post the message.. */
326 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
327 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
328 {
329 vosStatus = VOS_STATUS_E_BADMSG;
330 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 return( vosStatus );
332}
Jeff Johnson295189b2012-06-20 16:38:30 -0700333/*
334 * FUNCTION: WDA_wdiStartCallback
335 * Once WDI_Start is finished, WDI start callback will be called by WDI
336 * to indicate completion of WDI_Start.
337 */
338void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
339 void *pVosContext)
340{
341 tWDA_CbContext *wdaContext;
342 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 if (NULL == pVosContext)
344 {
345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700346 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700347 return;
348 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700349 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
350 if (NULL == wdaContext)
351 {
352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700353 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 return;
355 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700356 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
357 {
358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700359 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700360 }
361 else
362 {
363 wdaContext->wdaState = WDA_START_STATE;
364 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 /* extract and save version information from the Start Response */
366 wdaContext->wcnssWlanCompiledVersion.major =
367 wdiRspParams->wlanCompiledVersion.major;
368 wdaContext->wcnssWlanCompiledVersion.minor =
369 wdiRspParams->wlanCompiledVersion.minor;
370 wdaContext->wcnssWlanCompiledVersion.version =
371 wdiRspParams->wlanCompiledVersion.version;
372 wdaContext->wcnssWlanCompiledVersion.revision =
373 wdiRspParams->wlanCompiledVersion.revision;
374 wdaContext->wcnssWlanReportedVersion.major =
375 wdiRspParams->wlanReportedVersion.major;
376 wdaContext->wcnssWlanReportedVersion.minor =
377 wdiRspParams->wlanReportedVersion.minor;
378 wdaContext->wcnssWlanReportedVersion.version =
379 wdiRspParams->wlanReportedVersion.version;
380 wdaContext->wcnssWlanReportedVersion.revision =
381 wdiRspParams->wlanReportedVersion.revision;
382 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
383 wdiRspParams->wcnssSoftwareVersion,
384 sizeof(wdaContext->wcnssSoftwareVersionString));
385 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
386 wdiRspParams->wcnssHardwareVersion,
387 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 /* Notify WDA_start that WDI_Start has completed */
389 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700390 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 {
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700393 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700395 return;
396}
397
Jeff Johnson295189b2012-06-20 16:38:30 -0700398/*
399 * FUNCTION: WDA_start
400 * Prepare TLV configuration and call WDI_Start.
401 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700402VOS_STATUS WDA_start(v_PVOID_t pVosContext)
403{
404 tWDA_CbContext *wdaContext;
405 VOS_STATUS status;
406 WDI_Status wdiStatus;
407 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700408 if (NULL == pVosContext)
409 {
410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700411 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700412 return VOS_STATUS_E_FAILURE;
413 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
415 if (NULL == wdaContext)
416 {
417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700418 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 return VOS_STATUS_E_FAILURE;
420 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 /* Non-FTM mode, WDA status for START must be INIT
422 * FTM mode, WDA Status for START can be INIT or STOP */
423 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
424 (WDA_STOP_STATE != wdaContext->wdaState) )
425 {
426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
427 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700428 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 return VOS_STATUS_E_FAILURE;
430 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 /* initialize the wdiStartParam. Note that we can create this on
432 the stack since we won't exit until WDI_Start() completes or
433 times out */
434 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700435 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* prepare the config TLV for the WDI */
437 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
438 if ( !VOS_IS_STATUS_SUCCESS(status) )
439 {
440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700441 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 return VOS_STATUS_E_FAILURE;
443 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 /* note from here onwards if an error occurs we must
445 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
447 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
448 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* initialize the WDA-WDI synchronization event */
450 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 /* call WDI start */
452 wdiStatus = WDI_Start(&wdiStartParam,
453 (WDI_StartRspCb)WDA_wdiStartCallback,
454 (v_VOID_t *)pVosContext);
455 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
456 {
457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700458 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 vos_mem_free(wdiStartParam.pConfigBuffer);
460 return VOS_STATUS_E_FAILURE;
461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 /* wait for WDI start to invoke our callback */
463 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
464 WDA_WDI_START_TIMEOUT );
465 if ( !VOS_IS_STATUS_SUCCESS(status) )
466 {
467 if ( VOS_STATUS_E_TIMEOUT == status )
468 {
469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700470 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 }
472 else
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
475 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700476 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 }
478 vos_mem_free(wdiStartParam.pConfigBuffer);
479 return VOS_STATUS_E_FAILURE;
480 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 /* we no longer need the config TLV */
483 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700484 /* if we are not in the START state then WDI_Start() failed */
485 if (WDA_START_STATE != wdaContext->wdaState)
486 {
487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700488 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 return VOS_STATUS_E_FAILURE;
490 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 /* FTM mode does not need to monitor BA activity */
492 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
493 {
494 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800495 if(VOS_STATUS_SUCCESS == status)
496 {
497 wdaContext->wdaTimersCreated = VOS_TRUE;
498 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700499 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700500 return status;
501}
502
Jeff Johnson295189b2012-06-20 16:38:30 -0700503/*
504 * FUNCTION: WDA_prepareConfigTLV
505 * Function to prepare CFG for DAL(WDA)
506 */
507VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
508 WDI_StartReqParamsType *wdiStartParams )
509{
510 /* get pMac to acess CFG data base */
511 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
512 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
513 tHalCfg *tlvStruct = NULL ;
514 tANI_U8 *tlvStructStart = NULL ;
515 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
516 v_PVOID_t *configParam;
517 tANI_U32 configParamSize;
518 tANI_U32 *configDataValue;
519 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 if ((NULL == pMac)||(NULL == wdaContext))
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 VOS_ASSERT(0);
525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
528 WNI_CFG_STA_ID_LEN +
529 WNI_CFG_EDCA_WME_ACBK_LEN +
530 WNI_CFG_EDCA_WME_ACBE_LEN +
531 WNI_CFG_EDCA_WME_ACVI_LEN +
532 WNI_CFG_EDCA_WME_ACVO_LEN +
533 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 /* malloc memory for all configs in one shot */
535 configParam = vos_mem_malloc(configParamSize);
536
537 if(NULL == configParam )
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 VOS_ASSERT(0) ;
542 return VOS_STATUS_E_NOMEM;
543 }
544 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 tlvStruct = (tHalCfg *)configParam;
547 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 /* TODO: Remove Later */
549 /* QWLAN_HAL_CFG_STA_ID */
550 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
551 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
552 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
553 eSIR_SUCCESS)
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
556 "Failed to get value for WNI_CFG_STA_ID");
557 goto handle_failure;
558 }
559 tlvStruct->length = strLength ;
560 /* calculate the pad bytes to have the CFG in aligned format */
561 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
562 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
564 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
566 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
567 tlvStruct->length = sizeof(tANI_U32);
568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
569 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
570 != eSIR_SUCCESS)
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
573 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
574 goto handle_failure;
575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
577 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
579 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
580 tlvStruct->length = sizeof(tANI_U32);
581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
582 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
583 eSIR_SUCCESS)
584 {
585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
586 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
587 goto handle_failure;
588 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
590 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
592 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
593 tlvStruct->length = sizeof(tANI_U32);
594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
595 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
596 != eSIR_SUCCESS)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
599 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
600 goto handle_failure;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
603 + sizeof(tHalCfg) + tlvStruct->length)) ;
604
605 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
606 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
610 configDataValue ) != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CAL_PERIOD */
619 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
623 != eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CAL_PERIOD");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_CAL_CONTROL */
632 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_CAL_CONTROL");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 /* QWLAN_HAL_CFG_PROXIMITY */
645 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
646 tlvStruct->length = sizeof(tANI_U32);
647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
648 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
649 != eSIR_SUCCESS)
650 {
651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
652 "Failed to get value for WNI_CFG_PROXIMITY");
653 goto handle_failure;
654 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
656 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
658 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
659 tlvStruct->length = sizeof(tANI_U32);
660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
661 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
662 != eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
666 goto handle_failure;
667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
669 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
671 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
672 tlvStruct->length = sizeof(tANI_U32);
673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
674 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
675 eSIR_SUCCESS)
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
679 goto handle_failure;
680 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
682 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
684 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
688 configDataValue ) != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
692 goto handle_failure;
693 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
697 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
701 eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
705 goto handle_failure;
706 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
708 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
710 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
714 eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
718 goto handle_failure;
719 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
721 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
723 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
724 tlvStruct->length = sizeof(tANI_U32);
725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
726 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
727 eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
731 goto handle_failure;
732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
734 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
736 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
740 configDataValue ) != eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
744 goto handle_failure;
745 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
747 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
749 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
753 configDataValue ) != eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length));
761
762 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
763 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
767 configDataValue ) != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
776 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length));
788
789 /* QWLAN_HAL_CFG_FIXED_RATE */
790 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_FIXED_RATE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length));
802
803 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
804 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
816
817 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
818 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
831 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
832 tlvStruct->length = sizeof(tANI_U32);
833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
834 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
835 configDataValue ) != eSIR_SUCCESS)
836 {
837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
838 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
839 goto handle_failure;
840 }
841 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
842 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
844 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
848 configDataValue ) != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
857 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
858 tlvStruct->length = sizeof(tANI_U32);
859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
860 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
861 configDataValue ) != eSIR_SUCCESS)
862 {
863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
864 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
865 goto handle_failure;
866 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
868 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700869 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
882
883#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
884 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
885 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
886 tlvStruct->length = sizeof(tANI_U32);
887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
888 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
889 configDataValue ) != eSIR_SUCCESS)
890 {
891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
892 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
893 goto handle_failure;
894 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700895 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
896 + sizeof(tHalCfg) + tlvStruct->length);
897#endif
898 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
899 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
900 tlvStruct->length = sizeof(tANI_U32);
901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
902 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
903 configDataValue ) != eSIR_SUCCESS)
904 {
905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
906 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
907 goto handle_failure;
908 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
910 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
912 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
913 tlvStruct->length = sizeof(tANI_U32);
914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
915 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
916 eSIR_SUCCESS)
917 {
918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
919 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
920 goto handle_failure;
921 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
923 + sizeof(tHalCfg) + tlvStruct->length);
924
925 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
926 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
927 tlvStruct->length = sizeof(tANI_U32);
928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
929 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
930 configDataValue ) != eSIR_SUCCESS)
931 {
932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
933 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
934 goto handle_failure;
935 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
937 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
939 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
940 tlvStruct->length = sizeof(tANI_U32);
941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
942 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
943 configDataValue ) != eSIR_SUCCESS)
944 {
945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
946 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
947 goto handle_failure;
948 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
950 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700951 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
952 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
953 tlvStruct->length = sizeof(tANI_U32);
954 configDataValue = (tANI_U32 *)(tlvStruct + 1);
955 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
956 configDataValue ) != eSIR_SUCCESS)
957 {
958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
959 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
960 goto handle_failure;
961 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
963 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700964 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
965 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
966 tlvStruct->length = sizeof(tANI_U32);
967 configDataValue = (tANI_U32 *)(tlvStruct + 1);
968 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
969 configDataValue ) != eSIR_SUCCESS)
970 {
971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
972 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
973 goto handle_failure;
974 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
976 + sizeof(tHalCfg) + tlvStruct->length);
977
978 /* QWLAN_HAL_CFG_STATS_PERIOD */
979 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
980 tlvStruct->length = sizeof(tANI_U32);
981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
982 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
983 eSIR_SUCCESS)
984 {
985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
986 "Failed to get value for WNI_CFG_STATS_PERIOD");
987 goto handle_failure;
988 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
990 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700991 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
992 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
993 tlvStruct->length = sizeof(tANI_U32);
994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
995 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
996 eSIR_SUCCESS)
997 {
998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
999 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1000 goto handle_failure;
1001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1005 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1009 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1011 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001012 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1013 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1014 tlvStruct->length = sizeof(tANI_U32);
1015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1016 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1017 != eSIR_SUCCESS)
1018 {
1019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1020 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1021 goto handle_failure;
1022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1024 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001025 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1026 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1027 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1029 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1030 &strLength) != eSIR_SUCCESS)
1031 {
1032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1033 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1034 goto handle_failure;
1035 }
1036 tlvStruct->length = strLength;
1037 /* calculate the pad bytes to have the CFG in aligned format */
1038 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1039 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1041 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1043 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1044 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1046 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1047 &strLength) != eSIR_SUCCESS)
1048 {
1049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1050 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1051 goto handle_failure;
1052 }
1053 tlvStruct->length = strLength;
1054 /* calculate the pad bytes to have the CFG in aligned format */
1055 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1056 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1058 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001059 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1060 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1061 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1062 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1063 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1064 &strLength) != eSIR_SUCCESS)
1065 {
1066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1067 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1068 goto handle_failure;
1069 }
1070 tlvStruct->length = strLength;
1071 /* calculate the pad bytes to have the CFG in aligned format */
1072 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1073 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001074 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1075 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001076 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1077 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1078 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1079 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1080 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1081 &strLength) != eSIR_SUCCESS)
1082 {
1083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1084 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1085 goto handle_failure;
1086 }
1087 tlvStruct->length = strLength;
1088 /* calculate the pad bytes to have the CFG in aligned format */
1089 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1090 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1092 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001093 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1094 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1095 tlvStruct->length = sizeof(tANI_U32);
1096 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1097 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1098 != eSIR_SUCCESS)
1099 {
1100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1101 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1102 goto handle_failure;
1103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1105 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001106 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1107 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1108 tlvStruct->length = sizeof(tANI_U32);
1109 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1110 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1111 != eSIR_SUCCESS)
1112 {
1113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1114 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1115 goto handle_failure;
1116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1118 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001119 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1120 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1121 tlvStruct->length = sizeof(tANI_U32);
1122 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1123 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1124 != eSIR_SUCCESS)
1125 {
1126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1127 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1128 goto handle_failure;
1129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1131 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1133 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1134 tlvStruct->length = sizeof(tANI_U32);
1135 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1136 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1137 != eSIR_SUCCESS)
1138 {
1139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1140 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1141 goto handle_failure;
1142 }
1143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1144 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001145 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1146 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1147 tlvStruct->length = sizeof(tANI_U32);
1148 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1149 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1150 != eSIR_SUCCESS)
1151 {
1152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1153 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1154 goto handle_failure;
1155 }
1156 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1157 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1159 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1160 tlvStruct->length = sizeof(tANI_U32);
1161 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1162 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1163 != eSIR_SUCCESS)
1164 {
1165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1166 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1167 goto handle_failure;
1168 }
1169 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1170 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001171 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1172 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1173 tlvStruct->length = sizeof(tANI_U32);
1174 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1175 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1176 != eSIR_SUCCESS)
1177 {
1178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1179 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1180 goto handle_failure;
1181 }
1182 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1183 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001184 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1185 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1186 tlvStruct->length = sizeof(tANI_U32);
1187 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1188 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1189 != eSIR_SUCCESS)
1190 {
1191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1192 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1193 goto handle_failure;
1194 }
1195 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1196 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1198 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1199 tlvStruct->length = sizeof(tANI_U32);
1200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1201 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1202 != eSIR_SUCCESS)
1203 {
1204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1205 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1206 goto handle_failure;
1207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1211 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1215 != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1219 goto handle_failure;
1220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1222 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1224 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1225 tlvStruct->length = sizeof(tANI_U32);
1226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1227 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1228 != eSIR_SUCCESS)
1229 {
1230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1231 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1232 goto handle_failure;
1233 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1235 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001236 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1237 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1238 * into FW, so the parameters are added here.
1239 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1241 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1242 tlvStruct->length = sizeof(tANI_U32);
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1248 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1249 tlvStruct->length = sizeof(tANI_U32);
1250 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1251 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1253 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1255 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1256 tlvStruct->length = sizeof(tANI_U32);
1257 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1258 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001261 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1262 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1266 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1267 + sizeof(tHalCfg) + tlvStruct->length) ;
1268
1269 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1270 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1271 tlvStruct->length = sizeof(tANI_U32);
1272 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1273 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length) ;
1276
1277 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1278 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1279 tlvStruct->length = sizeof(tANI_U32);
1280 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1281 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1282 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1283 + sizeof(tHalCfg) + tlvStruct->length) ;
1284
1285 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
1292
1293 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1294 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1298 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1299 + sizeof(tHalCfg) + tlvStruct->length) ;
1300
1301 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1302 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1306 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1307 + sizeof(tHalCfg) + tlvStruct->length) ;
1308
1309 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1310 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1314 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1315 + sizeof(tHalCfg) + tlvStruct->length) ;
1316
1317 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1318 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
1324
1325 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1326 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1327 tlvStruct->length = sizeof(tANI_U32);
1328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1329 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
1332
1333 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1334 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1335 tlvStruct->length = sizeof(tANI_U32);
1336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1337 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
1340
1341 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1342 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
1348
1349 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
1356
1357 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1358 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1359 tlvStruct->length = sizeof(tANI_U32);
1360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1361 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1362 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1363 + sizeof(tHalCfg) + tlvStruct->length) ;
1364
1365 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001366 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1370 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1371 wcnssCompiledApiVersion.minor,
1372 wcnssCompiledApiVersion.version,
1373 wcnssCompiledApiVersion.revision);
1374 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1375 + sizeof(tHalCfg) + tlvStruct->length) ;
1376
Jeff Johnsond13512a2012-07-17 11:42:19 -07001377 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1378 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1379 tlvStruct->length = sizeof(tANI_U32);
1380 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1381 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1382 configDataValue ) != eSIR_SUCCESS)
1383 {
1384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1385 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1386 goto handle_failure;
1387 }
1388
1389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
1391 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1392 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1393 tlvStruct->length = sizeof(tANI_U32);
1394 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1395 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1396 configDataValue ) != eSIR_SUCCESS)
1397 {
1398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1399 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1400 goto handle_failure;
1401 }
1402
1403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
1405
1406 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1407 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1408 tlvStruct->length = sizeof(tANI_U32);
1409 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1410 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1411 != eSIR_SUCCESS)
1412 {
1413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1414 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1415 goto handle_failure;
1416 }
1417
1418 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1419 + sizeof(tHalCfg) + tlvStruct->length) ;
1420
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001421 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1422 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1426 != eSIR_SUCCESS)
1427 {
1428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1429 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1430 goto handle_failure;
1431 }
1432
1433 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1434 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001435#ifdef WLAN_SOFTAP_VSTA_FEATURE
1436 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1437 tlvStruct->length = sizeof(tANI_U32);
1438 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1439 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1440 != eSIR_SUCCESS)
1441 {
1442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1443 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1444 goto handle_failure;
1445 }
1446
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449#endif
1450
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001451 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1452 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455
1456 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1457 != eSIR_SUCCESS)
1458 {
1459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1460 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1461 goto handle_failure;
1462 }
1463
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301467/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1468 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1472 configDataValue ) != eSIR_SUCCESS)
1473 {
1474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1475 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1476 goto handle_failure;
1477 }
1478
1479 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1480 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301481#ifdef FEATURE_WLAN_TDLS
1482 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1483 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1484 tlvStruct->length = sizeof(tANI_U32);
1485 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1486 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1487 configDataValue ) != eSIR_SUCCESS)
1488 {
1489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1490 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1491 goto handle_failure;
1492 }
1493 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1494 + sizeof(tHalCfg) + tlvStruct->length) ;
1495
1496 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1497 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1498 tlvStruct->length = sizeof(tANI_U32);
1499 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1500 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1501 configDataValue ) != eSIR_SUCCESS)
1502 {
1503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1504 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1505 goto handle_failure;
1506 }
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
1509 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1510 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1511 tlvStruct->length = sizeof(tANI_U32);
1512 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1513 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1514 configDataValue ) != eSIR_SUCCESS)
1515 {
1516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1517 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1518 goto handle_failure;
1519 }
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1523 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1524 tlvStruct->length = sizeof(tANI_U32);
1525 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1526 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1527 configDataValue ) != eSIR_SUCCESS)
1528 {
1529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1530 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1531 goto handle_failure;
1532 }
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
1535#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301536
Jeff Johnson295189b2012-06-20 16:38:30 -07001537 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001538#ifdef WLAN_DEBUG
1539 {
1540 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001541 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1542 "****** Dumping CFG TLV ***** ");
1543 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1544 {
1545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1546 "%02x %02x %02x %02x %02x %02x %02x %02x",
1547 tlvStructStart[i],
1548 tlvStructStart[i+1],
1549 tlvStructStart[i+2],
1550 tlvStructStart[i+3],
1551 tlvStructStart[i+4],
1552 tlvStructStart[i+5],
1553 tlvStructStart[i+6],
1554 tlvStructStart[i+7]);
1555 }
1556 /* Dump the bytes in the last line*/
1557 for (; i < wdiStartParams->usConfigBufferLen; i++)
1558 {
1559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1560 "%02x ",tlvStructStart[i]);
1561 }
1562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1563 "**************************** ");
1564 }
1565#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001566 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001567handle_failure:
1568 vos_mem_free(configParam);
1569 return VOS_STATUS_E_FAILURE;
1570}
Jeff Johnson295189b2012-06-20 16:38:30 -07001571/*
1572 * FUNCTION: WDA_wdiCompleteCB
1573 * call the voss call back function
1574 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001575void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001576{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001577 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1578 tWDA_CbContext *wdaContext;
1579
1580 if(NULL == pWdaParams)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001583 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001584 VOS_ASSERT(0) ;
1585 return ;
1586 }
1587
1588 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1589
Jeff Johnson295189b2012-06-20 16:38:30 -07001590 if (NULL == wdaContext)
1591 {
1592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001593 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001594 return ;
1595 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001596
Jeff Johnson295189b2012-06-20 16:38:30 -07001597 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001598 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001599 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001601 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001602 vos_mem_free(pWdaParams);
1603
Jeff Johnson295189b2012-06-20 16:38:30 -07001604 if(WDI_STATUS_SUCCESS != status)
1605 {
1606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1607 "WDI stop callback returned failure" );
1608 VOS_ASSERT(0) ;
1609 }
1610 else
1611 {
1612 wdaContext->wdaState = WDA_STOP_STATE;
1613 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001614
Jeff Johnson295189b2012-06-20 16:38:30 -07001615 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001616 vos_WDAComplete_cback(wdaContext->pVosContext);
1617
Jeff Johnson295189b2012-06-20 16:38:30 -07001618 return ;
1619}
Jeff Johnson295189b2012-06-20 16:38:30 -07001620/*
1621 * FUNCTION: WDA_stop
1622 * call WDI_stop
1623 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001624VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1625{
1626 WDI_Status wdiStatus;
1627 VOS_STATUS status = VOS_STATUS_SUCCESS;
1628 WDI_StopReqParamsType *wdiStopReq;
1629 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001630 tWDA_ReqParams *pWdaParams ;
1631
Jeff Johnson295189b2012-06-20 16:38:30 -07001632 if (NULL == pWDA)
1633 {
1634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001635 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001636 VOS_ASSERT(0);
1637 return VOS_STATUS_E_FAILURE;
1638 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001639 if (pWDA->wdiFailed == true)
1640 {
1641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001642 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001643 return VOS_STATUS_E_ALREADY;
1644 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001645
Jeff Johnson295189b2012-06-20 16:38:30 -07001646 /* FTM mode stay START_STATE */
1647 if( (WDA_READY_STATE != pWDA->wdaState) &&
1648 (WDA_INIT_STATE != pWDA->wdaState) &&
1649 (WDA_START_STATE != pWDA->wdaState) )
1650 {
1651 VOS_ASSERT(0);
1652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001653 wdiStopReq = (WDI_StopReqParamsType *)
1654 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1655 if(NULL == wdiStopReq)
1656 {
1657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001659 VOS_ASSERT(0);
1660 return VOS_STATUS_E_NOMEM;
1661 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001662
Jeff Johnson295189b2012-06-20 16:38:30 -07001663 wdiStopReq->wdiStopReason = reason;
1664 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001665
1666 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1667 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001668 {
1669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001671 VOS_ASSERT(0);
1672 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001673 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001674 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001675
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001676 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1677 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001678 {
1679 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001680 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001681 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001682
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001683 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1684 pWdaParams->wdaMsgParam = NULL;
1685 pWdaParams->pWdaContext = pWDA;
1686
Jeff Johnson295189b2012-06-20 16:38:30 -07001687 /* call WDI stop */
1688 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001689 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1690
Jeff Johnson295189b2012-06-20 16:38:30 -07001691 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1692 {
1693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1694 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1696 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001697 status = VOS_STATUS_E_FAILURE;
1698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001699 return status;
1700}
Jeff Johnson295189b2012-06-20 16:38:30 -07001701/*
1702 * FUNCTION: WDA_close
1703 * call WDI_close and free the WDA context
1704 */
1705VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1706{
Jeff Johnson43971f52012-07-17 12:26:56 -07001707 VOS_STATUS status = VOS_STATUS_SUCCESS;
1708 WDI_Status wstatus;
1709 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001710 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001711 if (NULL == wdaContext)
1712 {
1713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001714 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001715 return VOS_STATUS_E_FAILURE;
1716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001717 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1718 (WDA_STOP_STATE != wdaContext->wdaState))
1719 {
1720 VOS_ASSERT(0);
1721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001722 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001723 wstatus = WDI_Close();
1724 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 {
1726 status = VOS_STATUS_E_FAILURE;
1727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001728 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001729 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001730 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1731 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001732 {
1733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1734 "WDI Sync Event destroy failed - status = %d\n", status);
1735 status = VOS_STATUS_E_FAILURE;
1736 }
1737
Jeff Johnson43971f52012-07-17 12:26:56 -07001738 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001739 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001740 {
1741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1742 "VOS Event destroy failed - status = %d\n", status);
1743 status = VOS_STATUS_E_FAILURE;
1744 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001745 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001746 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001747 {
1748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1749 "VOS Event destroy failed - status = %d\n", status);
1750 status = VOS_STATUS_E_FAILURE;
1751 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001752 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001753 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001754 {
1755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1756 "VOS Event destroy failed - status = %d\n", status);
1757 status = VOS_STATUS_E_FAILURE;
1758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001759 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001760 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001761 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "error in WDA close " );
1765 status = VOS_STATUS_E_FAILURE;
1766 }
1767 return status;
1768}
Jeff Johnson295189b2012-06-20 16:38:30 -07001769/*
1770 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1771 * returns 1 if the compiled version is greater than or equal to the input version
1772 */
1773
1774uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1775{
1776 VOS_STATUS status = VOS_STATUS_SUCCESS;
1777 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1778 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001779 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001780 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1781 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1782 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1783 (compiledVersion.revision >= revision)))
1784 return 1;
1785 else
1786 return 0;
1787}
Jeff Johnson295189b2012-06-20 16:38:30 -07001788/*
1789 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1790 * returns 1 if the compiled version is greater than or equal to the input version
1791 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001792uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1793{
1794 VOS_STATUS status = VOS_STATUS_SUCCESS;
1795 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1796 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001797 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1799 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1800 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1801 (reportedVersion.revision >= revision)))
1802 return 1;
1803 else
1804 return 0;
1805}
Jeff Johnson295189b2012-06-20 16:38:30 -07001806/*
1807 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1808 * Returns the version of the WCNSS WLAN API with which the HOST
1809 * device driver was compiled
1810 */
1811VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1812 tSirVersionType *pVersion)
1813{
1814 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001816 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001817 if ((NULL == pvosGCtx) || (NULL == pVersion))
1818 {
1819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001820 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001821 VOS_ASSERT(0);
1822 return VOS_STATUS_E_FAILURE;
1823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1825 if (NULL == pWDA )
1826 {
1827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001828 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001829 VOS_ASSERT(0);
1830 return VOS_STATUS_E_FAILURE;
1831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001832 *pVersion = pWDA->wcnssWlanCompiledVersion;
1833 return VOS_STATUS_SUCCESS;
1834}
Jeff Johnson295189b2012-06-20 16:38:30 -07001835/*
1836 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1837 * Returns the version of the WCNSS WLAN API with which the WCNSS
1838 * device driver was compiled
1839 */
1840VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1841 tSirVersionType *pVersion)
1842{
1843 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001845 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001846 if ((NULL == pvosGCtx) || (NULL == pVersion))
1847 {
1848 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001849 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001850 VOS_ASSERT(0);
1851 return VOS_STATUS_E_FAILURE;
1852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001853 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1854 if (NULL == pWDA )
1855 {
1856 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001857 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001858 VOS_ASSERT(0);
1859 return VOS_STATUS_E_FAILURE;
1860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 *pVersion = pWDA->wcnssWlanReportedVersion;
1862 return VOS_STATUS_SUCCESS;
1863}
Jeff Johnson295189b2012-06-20 16:38:30 -07001864/*
1865 * FUNCTION: WDA_GetWcnssSoftwareVersion
1866 * Returns the WCNSS Software version string
1867 */
1868VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1869 tANI_U8 *pVersion,
1870 tANI_U32 versionBufferSize)
1871{
1872 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001874 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001875 if ((NULL == pvosGCtx) || (NULL == pVersion))
1876 {
1877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001878 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001879 VOS_ASSERT(0);
1880 return VOS_STATUS_E_FAILURE;
1881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001882 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1883 if (NULL == pWDA )
1884 {
1885 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001886 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 VOS_ASSERT(0);
1888 return VOS_STATUS_E_FAILURE;
1889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001890 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1891 return VOS_STATUS_SUCCESS;
1892}
Jeff Johnson295189b2012-06-20 16:38:30 -07001893/*
1894 * FUNCTION: WDA_GetWcnssHardwareVersion
1895 * Returns the WCNSS Hardware version string
1896 */
1897VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1898 tANI_U8 *pVersion,
1899 tANI_U32 versionBufferSize)
1900{
1901 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001902 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001903 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001904 if ((NULL == pvosGCtx) || (NULL == pVersion))
1905 {
1906 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001907 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001908 VOS_ASSERT(0);
1909 return VOS_STATUS_E_FAILURE;
1910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001911 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1912 if (NULL == pWDA )
1913 {
1914 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001915 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001916 VOS_ASSERT(0);
1917 return VOS_STATUS_E_FAILURE;
1918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001919 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1920 return VOS_STATUS_SUCCESS;
1921}
Jeff Johnson295189b2012-06-20 16:38:30 -07001922/*
1923 * FUNCTION: WDA_WniCfgDnld
1924 * Trigger CFG Download
1925 */
1926VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1927{
1928 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001929 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001930 v_VOID_t *pFileImage = NULL;
1931 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001932 v_VOID_t *pCfgBinary = NULL;
1933 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001934 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07001935
Jeff Johnson295189b2012-06-20 16:38:30 -07001936 if (NULL == pMac )
1937 {
1938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001939 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001940 VOS_ASSERT(0);
1941 return VOS_STATUS_E_FAILURE;
1942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 /* get the number of bytes in the CFG Binary... */
1944 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1945 &cbFileImageSize );
1946 if ( VOS_STATUS_E_NOMEM != vosStatus )
1947 {
1948 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1949 "Error obtaining binary size" );
1950 goto fail;
1951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 // malloc a buffer to read in the Configuration binary file.
1953 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001954 if ( NULL == pFileImage )
1955 {
1956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1957 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1958 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001959 vosStatus = VOS_STATUS_E_NOMEM;
1960 goto fail;
1961 }
1962
1963 /* Get the entire CFG file image... */
1964 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1965 &cbFileImageSize );
1966 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1967 {
1968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1969 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1970 cbFileImageSize );
1971 goto fail;
1972 }
1973
1974 /*
1975 * Validate the binary image. This function will return a pointer
1976 * and length where the CFG binary is located within the binary image file.
1977 */
1978 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1979 &pCfgBinary, &cbCfgBinarySize );
1980 if ( VOS_FALSE == bStatus )
1981 {
1982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1983 "Error: Cannot find STA CFG in binary image file" );
1984 vosStatus = VOS_STATUS_E_FAILURE;
1985 goto fail;
1986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001987 /*
1988 * TODO: call the config download function
1989 * for now calling the existing cfg download API
1990 */
1991 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07001992 vosStatus = VOS_STATUS_SUCCESS;
1993
1994 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07001995
1996fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07001997 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07001998 return vosStatus;
1999}
Jeff Johnson295189b2012-06-20 16:38:30 -07002000/* -----------------------------------------------------------------
2001 * WDI interface
2002 * -----------------------------------------------------------------
2003 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002004/*
2005 * FUNCTION: WDA_suspendDataTxCallback
2006 * call back function called from TL after suspend Transmission
2007 */
2008VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2009 v_U8_t* ucSTAId,
2010 VOS_STATUS vosStatus)
2011{
2012 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002014 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002015 if (NULL == pWDA )
2016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002018 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002019 VOS_ASSERT(0);
2020 return VOS_STATUS_E_FAILURE;
2021 }
2022 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2023 {
2024 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2025 }
2026 else
2027 {
2028 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002030 /* Trigger the event to bring the WDA TL suspend function to come
2031 * out of wait*/
2032 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2033 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2034 {
2035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2036 "NEW VOS Event Set failed - status = %d \n", vosStatus);
2037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002038 /* If TL suspended had timedout before this callback was called, resume back
2039 * TL.*/
2040 if (pWDA->txSuspendTimedOut)
2041 {
2042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2043 "Late TLSuspendCallback, resuming TL back again\n");
2044 WDA_ResumeDataTx(pWDA);
2045 pWDA->txSuspendTimedOut = FALSE;
2046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002047 return VOS_STATUS_SUCCESS;
2048}
Jeff Johnson295189b2012-06-20 16:38:30 -07002049/*
2050 * FUNCTION: WDA_suspendDataTx
2051 * Update TL to suspend the data Transmission
2052 */
2053VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2054{
2055 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2056 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002057
2058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002059 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002061 if (pWDA->txSuspendTimedOut)
2062 {
2063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2064 "TL suspend timedout previously, CB not called yet\n");
2065 return status;
2066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002067 /* Reset the event to be not signalled */
2068 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2069 if(!VOS_IS_STATUS_SUCCESS(status))
2070 {
2071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2072 "VOS Event reset failed - status = %d\n",status);
2073 return VOS_STATUS_E_FAILURE;
2074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002075 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002076 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 WDA_SuspendDataTxCallback);
2078 if(status != VOS_STATUS_SUCCESS)
2079 {
2080 return status;
2081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002082 /* Wait for the event to be set by the TL, to get the response of
2083 * suspending the TX queues, this event should be set by the Callback
2084 * function called by TL*/
2085 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2086 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2087 if(!VOS_IS_STATUS_SUCCESS(status))
2088 {
2089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2090 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002091 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 /* Set this flag to true when TL suspend times out, so that when TL
2093 * suspend eventually happens and calls the callback, TL can be resumed
2094 * right away by looking at this flag when true.*/
2095 pWDA->txSuspendTimedOut = TRUE;
2096 }
2097 else
2098 {
2099 pWDA->txSuspendTimedOut = FALSE;
2100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2102 {
2103 status = VOS_STATUS_SUCCESS;
2104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002105 return status;
2106}
Jeff Johnson295189b2012-06-20 16:38:30 -07002107/*
2108 * FUNCTION: WDA_resumeDataTx
2109 * Update TL to resume the data Transmission
2110 */
2111VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2112{
2113 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002114
2115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002116 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002117
2118 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002119 return status;
2120}
Jeff Johnson295189b2012-06-20 16:38:30 -07002121/*
2122 * FUNCTION: WDA_InitScanReqCallback
2123 * Trigger Init SCAN callback
2124 */
2125void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2126{
2127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2128 tWDA_CbContext *pWDA;
2129 tInitScanParams *pWDA_ScanParam ;
2130 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002132 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 if(NULL == pWdaParams)
2134 {
2135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002136 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 VOS_ASSERT(0) ;
2138 return ;
2139 }
2140 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2141 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002142 if(NULL == pWDA_ScanParam)
2143 {
2144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002145 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002146 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2148 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002149 return ;
2150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002151 if(WDI_STATUS_SUCCESS != wdiStatus)
2152 {
2153 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 if(VOS_STATUS_SUCCESS != status)
2155 {
2156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002157 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 }
2159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002160 /* free WDI command buffer */
2161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002163
Jeff Johnson295189b2012-06-20 16:38:30 -07002164
2165 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002166 /* without converting the Status to Failure or Success Just
2167 pass the same status to lim */
2168 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 /* send SCAN RSP message back to PE */
2170 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 return ;
2172}
2173
2174/*
2175 * FUNCTION: WDA_ProcessInitScanReq
2176 * Trigger Init SCAN in DAL
2177 */
2178VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2179 tInitScanParams *initScanParams)
2180{
2181 WDI_Status status = WDI_STATUS_SUCCESS ;
2182 WDI_InitScanReqParamsType *wdiInitScanParam =
2183 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2184 sizeof(WDI_InitScanReqParamsType)) ;
2185 tWDA_ReqParams *pWdaParams;
2186 tANI_U8 i = 0;
2187
2188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002189 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 if(NULL == wdiInitScanParam)
2191 {
2192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 VOS_ASSERT(0);
2195 return VOS_STATUS_E_NOMEM;
2196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2198 if(NULL == pWdaParams)
2199 {
2200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002202 VOS_ASSERT(0);
2203 vos_mem_free(wdiInitScanParam);
2204 return VOS_STATUS_E_NOMEM;
2205 }
2206
2207 /* Copy init Scan params to WDI structure */
2208 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2209 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2210 sizeof(tSirMacAddr)) ;
2211 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2212 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2213 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2215 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2217 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2219 {
2220 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2221 initScanParams->scanEntry.bssIdx[i] ;
2222 }
2223
2224 /* if Frame length, copy macMgmtHdr or WDI structure */
2225 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2226 {
2227 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2228 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2229 }
2230 wdiInitScanParam->wdiReqStatusCB = NULL ;
2231
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 /* Store Init Req pointer, as this will be used for response */
2233 pWdaParams->pWdaContext = pWDA;
2234 pWdaParams->wdaMsgParam = initScanParams;
2235 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 /* first try to suspend TX */
2237 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 if(WDI_STATUS_SUCCESS != status)
2239 {
2240 goto handleWdiFailure;
2241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 /* call DAL API to pass init scan request to DAL */
2243 status = WDI_InitScanReq(wdiInitScanParam,
2244 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 if(IS_WDI_STATUS_FAILURE(status))
2246 {
2247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2248 "error in WDA Init Scan, Resume Tx " );
2249 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 VOS_ASSERT(0) ;
2251
2252 goto handleWdiFailure;
2253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002254 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002255handleWdiFailure:
2256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2257 "Failure in WDI Api, free all the memory " );
2258 /* free WDI command buffer */
2259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2260 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002261 /* send Failure to PE */
2262 initScanParams->status = eSIR_FAILURE ;
2263 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 return CONVERT_WDI2VOS_STATUS(status) ;
2265}
2266
Jeff Johnson295189b2012-06-20 16:38:30 -07002267/*
2268 * FUNCTION: WDA_StartScanReqCallback
2269 * send Start SCAN RSP back to PE
2270 */
2271void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2272 void* pUserData)
2273{
2274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2275 tWDA_CbContext *pWDA;
2276 tStartScanParams *pWDA_ScanParam;
2277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002278 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002279 if(NULL == pWdaParams)
2280 {
2281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002282 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 VOS_ASSERT(0) ;
2284 return ;
2285 }
2286 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2287 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 if(NULL == pWDA_ScanParam)
2289 {
2290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002291 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002292 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002293 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 return ;
2295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002296 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2297 {
2298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002299 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002301 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 return ;
2303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2305 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002306
Jeff Johnson295189b2012-06-20 16:38:30 -07002307
2308 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002309 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 /* send SCAN RSP message back to PE */
2311 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002312 return ;
2313}
2314
Jeff Johnson295189b2012-06-20 16:38:30 -07002315/*
2316 * FUNCTION: WDA_ProcessStartScanReq
2317 * Trigger start SCAN in WDI
2318 */
2319VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2320 tStartScanParams *startScanParams)
2321{
2322 WDI_Status status = WDI_STATUS_SUCCESS;
2323 WDI_StartScanReqParamsType *wdiStartScanParams =
2324 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2325 sizeof(WDI_StartScanReqParamsType)) ;
2326 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002328 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 if(NULL == wdiStartScanParams)
2330 {
2331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002333 VOS_ASSERT(0);
2334 return VOS_STATUS_E_NOMEM;
2335 }
2336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2337 if(NULL == pWdaParams)
2338 {
2339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 VOS_ASSERT(0);
2342 vos_mem_free(wdiStartScanParams);
2343 return VOS_STATUS_E_NOMEM;
2344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 /* Copy init Scan params to WDI structure */
2346 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2347 wdiStartScanParams->wdiReqStatusCB = NULL ;
2348
Jeff Johnson295189b2012-06-20 16:38:30 -07002349 /* Store Init Req pointer, as this will be used for response */
2350 /* store Params pass it to WDI */
2351 pWdaParams->pWdaContext = pWDA;
2352 pWdaParams->wdaMsgParam = startScanParams;
2353 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 /* call DAL API to pass init scan request to DAL */
2355 status = WDI_StartScanReq(wdiStartScanParams,
2356 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 /* failure returned by WDI API */
2358 if(IS_WDI_STATUS_FAILURE(status))
2359 {
2360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2361 "Failure in Start Scan WDI API, free all the memory "
2362 "It should be due to previous abort scan." );
2363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2364 vos_mem_free(pWdaParams) ;
2365 startScanParams->status = eSIR_FAILURE ;
2366 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 return CONVERT_WDI2VOS_STATUS(status) ;
2369}
Jeff Johnson295189b2012-06-20 16:38:30 -07002370/*
2371 * FUNCTION: WDA_EndScanReqCallback
2372 * END SCAN callback
2373 */
2374void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2375{
2376 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2377 tWDA_CbContext *pWDA;
2378 tEndScanParams *endScanParam;
2379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002380 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 if(NULL == pWdaParams)
2382 {
2383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002384 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 VOS_ASSERT(0) ;
2386 return ;
2387 }
2388 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2389 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 if(NULL == endScanParam)
2391 {
2392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002393 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002394 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2396 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002397 return ;
2398 }
2399
2400 /* Free WDI command buffer */
2401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2402 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002404 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002405 /* send response back to PE */
2406 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2407 return ;
2408}
2409
Jeff Johnson295189b2012-06-20 16:38:30 -07002410/*
2411 * FUNCTION: WDA_ProcessEndScanReq
2412 * Trigger END SCAN in WDI
2413 */
2414VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2415 tEndScanParams *endScanParams)
2416{
2417 WDI_Status status = WDI_STATUS_SUCCESS;
2418 WDI_EndScanReqParamsType *wdiEndScanParams =
2419 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2420 sizeof(WDI_EndScanReqParamsType)) ;
2421 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002423 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 if(NULL == wdiEndScanParams)
2425 {
2426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 VOS_ASSERT(0);
2429 return VOS_STATUS_E_NOMEM;
2430 }
2431 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2432 if(NULL == pWdaParams)
2433 {
2434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 VOS_ASSERT(0);
2437 vos_mem_free(wdiEndScanParams);
2438 return VOS_STATUS_E_NOMEM;
2439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 /* Copy init Scan params to WDI structure */
2441 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2442 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 /* Store Init Req pointer, as this will be used for response */
2444 /* store Params pass it to WDI */
2445 pWdaParams->pWdaContext = pWDA;
2446 pWdaParams->wdaMsgParam = endScanParams;
2447 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 /* call DAL API to pass init scan request to DAL */
2449 status = WDI_EndScanReq(wdiEndScanParams,
2450 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 if(IS_WDI_STATUS_FAILURE(status))
2452 {
2453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2454 "Failure in End Scan WDI API, free all the memory "
2455 "It should be due to previous abort scan." );
2456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2457 vos_mem_free(pWdaParams) ;
2458 endScanParams->status = eSIR_FAILURE ;
2459 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 return CONVERT_WDI2VOS_STATUS(status) ;
2462}
Jeff Johnson295189b2012-06-20 16:38:30 -07002463/*
2464 * FUNCTION: WDA_FinishScanReqCallback
2465 * Trigger Finish SCAN callback
2466 */
2467void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2468{
2469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2470 tWDA_CbContext *pWDA;
2471 tFinishScanParams *finishScanParam;
2472 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002474 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 if(NULL == pWdaParams)
2476 {
2477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002478 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 VOS_ASSERT(0) ;
2480 return ;
2481 }
2482
2483 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2484 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 if(NULL == finishScanParam)
2486 {
2487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002488 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2491 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 return ;
2493 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2495 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002496 /*
2497 * Now Resume TX, if we reached here means, TX is already suspended, we
2498 * have to resume it unconditionaly
2499 */
2500 status = WDA_ResumeDataTx(pWDA) ;
2501
2502 if(VOS_STATUS_SUCCESS != status)
2503 {
2504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002505 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002507 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002508 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2509 return ;
2510}
Jeff Johnson295189b2012-06-20 16:38:30 -07002511/*
2512 * FUNCTION: WDA_ProcessFinshScanReq
2513 * Trigger Finish SCAN in WDI
2514 */
2515VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2516 tFinishScanParams *finishScanParams)
2517{
2518 WDI_Status status = WDI_STATUS_SUCCESS;
2519 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2520 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2521 sizeof(WDI_FinishScanReqParamsType)) ;
2522 tWDA_ReqParams *pWdaParams ;
2523 tANI_U8 i = 0;
2524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002525 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 if(NULL == wdiFinishScanParams)
2527 {
2528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002529 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 VOS_ASSERT(0);
2531 return VOS_STATUS_E_NOMEM;
2532 }
2533 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2534 if(NULL == pWdaParams)
2535 {
2536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 VOS_ASSERT(0);
2539 vos_mem_free(wdiFinishScanParams);
2540 return VOS_STATUS_E_NOMEM;
2541 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 /* Copy init Scan params to WDI structure */
2543 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2544 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2545 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2547 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2548 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2549 finishScanParams->frameLength ;
2550 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2551 finishScanParams->currentOperChannel ;
2552 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2553 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2554 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2556 {
2557 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2558 finishScanParams->scanEntry.bssIdx[i] ;
2559 }
2560
2561
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 /* if Frame length, copy macMgmtHdr ro WDI structure */
2563 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2564 {
2565 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2566 &finishScanParams->macMgmtHdr,
2567 sizeof(WDI_MacMgmtHdr)) ;
2568 }
2569 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 /* Store Init Req pointer, as this will be used for response */
2571 /* store Params pass it to WDI */
2572 pWdaParams->pWdaContext = pWDA;
2573 pWdaParams->wdaMsgParam = finishScanParams;
2574 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 /* call DAL API to pass init scan request to DAL */
2576 status = WDI_FinishScanReq(wdiFinishScanParams,
2577 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002578
Jeff Johnson295189b2012-06-20 16:38:30 -07002579
2580 /*
2581 * WDI API returns failure..
2582 */
2583 if(IS_WDI_STATUS_FAILURE( status))
2584 {
2585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2586 "Failure in Finish Scan WDI API, free all the memory " );
2587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2588 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 finishScanParams->status = eSIR_FAILURE ;
2590 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 return CONVERT_WDI2VOS_STATUS(status) ;
2593}
Jeff Johnson295189b2012-06-20 16:38:30 -07002594/*---------------------------------------------------------------------
2595 * ASSOC API's
2596 *---------------------------------------------------------------------
2597 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002598/*
2599 * FUNCTION: WDA_JoinReqCallback
2600 * Trigger Init SCAN callback
2601 */
2602void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2603{
2604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2605 tWDA_CbContext *pWDA;
2606 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002608 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 if(NULL == pWdaParams)
2610 {
2611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 VOS_ASSERT(0) ;
2614 return ;
2615 }
2616 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2617 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2619 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 /* reset macBSSID */
2621 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 /* reset macSTASelf */
2623 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002624 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 return ;
2627}
Jeff Johnson295189b2012-06-20 16:38:30 -07002628/*
2629 * FUNCTION: WDA_ProcessJoinReq
2630 * Trigger Join REQ in WDI
2631 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002632VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2633 tSwitchChannelParams* joinReqParam)
2634{
2635 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 WDI_JoinReqParamsType *wdiJoinReqParam =
2637 (WDI_JoinReqParamsType *)vos_mem_malloc(
2638 sizeof(WDI_JoinReqParamsType)) ;
2639 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002641 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 if(NULL == wdiJoinReqParam)
2643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002645 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002647 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 return VOS_STATUS_E_NOMEM;
2649 }
2650 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2651 if(NULL == pWdaParams)
2652 {
2653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002654 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 VOS_ASSERT(0);
2656 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002657 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 return VOS_STATUS_E_NOMEM;
2659 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002660
2661 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2662 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2663 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2664 {
2665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2666 "%s: received join request when BSSID or self-STA is NULL "
2667 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002668 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002669 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2670 VOS_ASSERT(0);
2671 vos_mem_free(wdiJoinReqParam);
2672 vos_mem_free(pWdaParams);
2673 joinReqParam->status = eSIR_FAILURE ;
2674 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2675 return VOS_STATUS_E_INVAL;
2676 }
2677
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 /* copy the BSSID for pWDA */
2679 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2680 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2682 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002683 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2684 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002685#ifdef WLAN_FEATURE_VOWIFI
2686 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2687 joinReqParam->maxTxPower ;
2688#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2690 joinReqParam->localPowerConstraint ;
2691#endif
2692 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2693 joinReqParam->secondaryChannelOffset ;
2694 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2695
2696 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 /* Store Init Req pointer, as this will be used for response */
2698 /* store Params pass it to WDI */
2699 pWdaParams->pWdaContext = pWDA;
2700 pWdaParams->wdaMsgParam = joinReqParam;
2701 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 status = WDI_JoinReq(wdiJoinReqParam,
2703 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 if(IS_WDI_STATUS_FAILURE(status))
2705 {
2706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2707 "Failure in Join WDI API, free all the memory " );
2708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2709 vos_mem_free(pWdaParams) ;
2710 joinReqParam->status = eSIR_FAILURE ;
2711 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2712 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 return CONVERT_WDI2VOS_STATUS(status) ;
2714}
Jeff Johnson295189b2012-06-20 16:38:30 -07002715/*
2716 * FUNCTION: WDA_SwitchChannelReqCallback
2717 * send Switch channel RSP back to PE
2718 */
2719void WDA_SwitchChannelReqCallback(
2720 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2721{
2722 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2723 tWDA_CbContext *pWDA;
2724 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002726 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 if(NULL == pWdaParams)
2728 {
2729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002730 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 VOS_ASSERT(0) ;
2732 return ;
2733 }
2734 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2735 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2736
2737#ifdef WLAN_FEATURE_VOWIFI
2738 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2739#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2741 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002742 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002743 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 return ;
2746}
Jeff Johnson295189b2012-06-20 16:38:30 -07002747/*
2748 * FUNCTION: WDA_ProcessChannelSwitchReq
2749 * Request to WDI to switch channel REQ params.
2750 */
2751VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2752 tSwitchChannelParams *pSwitchChanParams)
2753{
2754 WDI_Status status = WDI_STATUS_SUCCESS ;
2755 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2756 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2757 sizeof(WDI_SwitchChReqParamsType)) ;
2758 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002760 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 if(NULL == wdiSwitchChanParam)
2762 {
2763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002764 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 VOS_ASSERT(0);
2766 return VOS_STATUS_E_NOMEM;
2767 }
2768 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2769 if(NULL == pWdaParams)
2770 {
2771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 VOS_ASSERT(0);
2774 vos_mem_free(wdiSwitchChanParam);
2775 return VOS_STATUS_E_NOMEM;
2776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2778#ifndef WLAN_FEATURE_VOWIFI
2779 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2780 pSwitchChanParams->localPowerConstraint;
2781#endif
2782 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2783 pSwitchChanParams->secondaryChannelOffset;
2784 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 /* Store req pointer, as this will be used for response */
2786 /* store Params pass it to WDI */
2787 pWdaParams->pWdaContext = pWDA;
2788 pWdaParams->wdaMsgParam = pSwitchChanParams;
2789 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002790#ifdef WLAN_FEATURE_VOWIFI
2791 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2792 = pSwitchChanParams->maxTxPower;
2793 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2794 pSwitchChanParams ->selfStaMacAddr,
2795 sizeof(tSirMacAddr));
2796#endif
2797 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2798 pSwitchChanParams->bssId,
2799 sizeof(tSirMacAddr));
2800
2801 status = WDI_SwitchChReq(wdiSwitchChanParam,
2802 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 if(IS_WDI_STATUS_FAILURE(status))
2804 {
2805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2806 "Failure in process channel switch Req WDI API, free all the memory " );
2807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2808 vos_mem_free(pWdaParams) ;
2809 pSwitchChanParams->status = eSIR_FAILURE ;
2810 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 return CONVERT_WDI2VOS_STATUS(status) ;
2813}
Jeff Johnson295189b2012-06-20 16:38:30 -07002814/*
2815 * FUNCTION: WDA_ConfigBssReqCallback
2816 * config BSS Req Callback, called by WDI
2817 */
2818void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2819 ,void* pUserData)
2820{
2821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2822 tWDA_CbContext *pWDA;
2823 tAddBssParams *configBssReqParam;
2824 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002826 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002827 if(NULL == pWdaParams)
2828 {
2829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002830 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 VOS_ASSERT(0) ;
2832 return ;
2833 }
2834 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2835 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2836 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002838 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2840 {
2841 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2842 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2844 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2845 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2846
2847 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2848 {
2849 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2850 {
2851 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2852 staConfigBssParam->staType = STA_ENTRY_BSSID;
2853 }
2854 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2855 (staConfigBssParam->staType == STA_ENTRY_SELF))
2856 {
2857 /* This is the 1st add BSS Req for the BTAMP STA */
2858 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2859 staConfigBssParam->staType = STA_ENTRY_BSSID;
2860 }
2861 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2862 (staConfigBssParam->staType == STA_ENTRY_PEER))
2863 {
2864 /* This is the 2nd ADD BSS Request that is sent
2865 * on the BTAMP STA side. The Sta type is
2866 * set to STA_ENTRY_PEER here.*/
2867 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2868 }
2869 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2870 (staConfigBssParam->staType == STA_ENTRY_SELF))
2871 {
2872 /* statype is already set by PE.
2873 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2874 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2875 staConfigBssParam->staType = STA_ENTRY_BSSID;
2876 }
2877 else
2878 {
2879 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2880 staConfigBssParam->staType = STA_ENTRY_PEER;
2881 }
2882 }
2883 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2884 {
2885 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2886 staConfigBssParam->staType = STA_ENTRY_SELF;
2887 }
2888 else
2889 {
2890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2891 "Invalid operation mode specified");
2892 VOS_ASSERT(0);
2893 }
2894
2895 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2900 sizeof(tSirMacAddr));
2901 staConfigBssParam->txChannelWidthSet =
2902 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2904 staConfigBssParam->htCapable)
2905 {
2906 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2907 wdiConfigBssRsp->ucBSSIdx;
2908 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2909 WDA_VALID_STA_INDEX ;
2910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2912 wdiConfigBssRsp->ucBSSIdx,
2913 wdiConfigBssRsp->ucSTAIdx))
2914 {
2915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002916 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 VOS_ASSERT(0) ;
2918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2920 {
2921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002922 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 VOS_ASSERT(0) ;
2924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002925#ifdef WLAN_FEATURE_VOWIFI
2926 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2927#endif
2928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2930 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 return ;
2933}
Jeff Johnson295189b2012-06-20 16:38:30 -07002934/*
2935 * FUNCTION: WDA_UpdateEdcaParamsForAC
2936 * Update WDI EDCA params with PE edca params
2937 */
2938void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2939 WDI_EdcaParamRecord *wdiEdcaParam,
2940 tSirMacEdcaParamRecord *macEdcaParam)
2941{
2942 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2943 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2944 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2945 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2946 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2947 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2948}
Jeff Johnson295189b2012-06-20 16:38:30 -07002949/*
2950 * FUNCTION: WDA_ProcessConfigBssReq
2951 * Configure BSS before starting Assoc with AP
2952 */
2953VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2954 tAddBssParams* configBssReqParam)
2955{
2956 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05302957 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002960 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05302961 if (NULL == configBssReqParam)
2962 {
2963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2964 "%s: configBssReqParam is NULL", __func__);
2965 return VOS_STATUS_E_INVAL;
2966 }
2967
2968 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2969 sizeof(WDI_ConfigBSSReqParamsType)) ;
2970
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 if(NULL == wdiConfigBssReqParam)
2972 {
2973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002974 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 VOS_ASSERT(0);
2976 return VOS_STATUS_E_NOMEM;
2977 }
2978 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2979 if(NULL == pWdaParams)
2980 {
2981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002982 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 VOS_ASSERT(0);
2984 vos_mem_free(wdiConfigBssReqParam);
2985 return VOS_STATUS_E_NOMEM;
2986 }
Kiran4a17ebe2013-01-31 10:43:43 -08002987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2988 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002990 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2991 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 /* Store Init Req pointer, as this will be used for response */
2993 /* store Params pass it to WDI */
2994 pWdaParams->pWdaContext = pWDA;
2995 pWdaParams->wdaMsgParam = configBssReqParam;
2996 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2998 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 if(IS_WDI_STATUS_FAILURE(status))
3000 {
3001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3002 "Failure in Config BSS WDI API, free all the memory " );
3003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3004 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003005 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 return CONVERT_WDI2VOS_STATUS(status) ;
3009}
Jeff Johnson295189b2012-06-20 16:38:30 -07003010#ifdef ENABLE_HAL_COMBINED_MESSAGES
3011/*
3012 * FUNCTION: WDA_PostAssocReqCallback
3013 * Post ASSOC req callback, send RSP back to PE
3014 */
3015void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3016 void* pUserData)
3017{
3018 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3019 tPostAssocParams *postAssocReqParam =
3020 (tPostAssocParams *)pWDA->wdaMsgParam ;
3021 /*STA context within the BSS Params*/
3022 tAddStaParams *staPostAssocParam =
3023 &postAssocReqParam->addBssParams.staContext ;
3024 /*STA Params for self STA*/
3025 tAddStaParams *selfStaPostAssocParam =
3026 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003030 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3032 {
3033 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3034 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3035 sizeof(tSirMacAddr)) ;
3036 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3037 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3038 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3040 }
3041 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3042 pWDA->wdaWdiApiMsgParam = NULL;
3043 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 return ;
3046}
Jeff Johnson295189b2012-06-20 16:38:30 -07003047/*
3048 * FUNCTION: WDA_ProcessPostAssocReq
3049 * Trigger POST ASSOC processing in WDI
3050 */
3051VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3052 tPostAssocParams *postAssocReqParam)
3053{
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 WDI_Status status = WDI_STATUS_SUCCESS ;
3055
3056 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3057 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3058 sizeof(WDI_PostAssocReqParamsType)) ;
3059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003060 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003061
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 if(NULL == wdiPostAssocReqParam)
3063 {
3064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003065 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 VOS_ASSERT(0);
3067 return VOS_STATUS_E_NOMEM;
3068 }
3069
3070 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3071 {
3072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003073 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 VOS_ASSERT(0);
3075 return VOS_STATUS_E_FAILURE;
3076 }
3077
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 /* update BSS params into WDI structure */
3079 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3080 &postAssocReqParam->addBssParams) ;
3081 /* update STA params into WDI structure */
3082 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3083 &postAssocReqParam->addStaParams) ;
3084
3085 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3086 postAssocReqParam->addBssParams.highPerformance;
3087 WDA_UpdateEdcaParamsForAC(pWDA,
3088 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3089 &postAssocReqParam->addBssParams.acbe);
3090 WDA_UpdateEdcaParamsForAC(pWDA,
3091 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3092 &postAssocReqParam->addBssParams.acbk);
3093 WDA_UpdateEdcaParamsForAC(pWDA,
3094 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3095 &postAssocReqParam->addBssParams.acvi);
3096 WDA_UpdateEdcaParamsForAC(pWDA,
3097 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3098 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 /* Store Init Req pointer, as this will be used for response */
3100 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 /* store Params pass it to WDI */
3102 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3104 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 if(IS_WDI_STATUS_FAILURE(status))
3106 {
3107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3108 "Failure in Post Assoc WDI API, free all the memory " );
3109 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3110 pWDA->wdaWdiApiMsgParam = NULL;
3111 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 return CONVERT_WDI2VOS_STATUS(status) ;
3116}
3117#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003118/*
3119 * FUNCTION: WDA_AddStaReqCallback
3120 * ADD STA req callback, send RSP back to PE
3121 */
3122void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3123 void* pUserData)
3124{
3125 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3126 tWDA_CbContext *pWDA;
3127 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003129 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 if(NULL == pWdaParams)
3131 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 VOS_ASSERT(0) ;
3134 return ;
3135 }
3136 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3137 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003138 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003139 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003140 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3141 {
3142 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3143 /*TODO: UMAC structure doesn't have these fields*/
3144 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3145 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3146 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3147 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3148 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3149 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003150#ifdef FEATURE_WLAN_TDLS
3151 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3152 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3153#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003155#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 {
3157 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3158 wdiConfigStaRsp->ucBssIdx;
3159 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3160 WDA_VALID_STA_INDEX ;
3161 }
3162 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3163 {
3164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003165 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003166 VOS_ASSERT(0) ;
3167 return ;
3168 }
3169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3171 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 return ;
3174}
Jeff Johnson295189b2012-06-20 16:38:30 -07003175/*
3176 * FUNCTION: WDA_ConfigStaReq
3177 * Trigger Config STA processing in WDI
3178 */
3179VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3180 tAddStaParams *addStaReqParam)
3181{
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3184 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3185 sizeof(WDI_ConfigSTAReqParamsType)) ;
3186 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003188 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 if(NULL == wdiConfigStaReqParam)
3190 {
3191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 VOS_ASSERT(0);
3194 return VOS_STATUS_E_NOMEM;
3195 }
3196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3197 if(NULL == pWdaParams)
3198 {
3199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 VOS_ASSERT(0);
3202 vos_mem_free(wdiConfigStaReqParam);
3203 return VOS_STATUS_E_NOMEM;
3204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 /* update STA params into WDI structure */
3207 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3208 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 /* Store Init Req pointer, as this will be used for response */
3210 /* store Params pass it to WDI */
3211 pWdaParams->pWdaContext = pWDA;
3212 pWdaParams->wdaMsgParam = addStaReqParam;
3213 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3215 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 if(IS_WDI_STATUS_FAILURE(status))
3217 {
3218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3219 "Failure in Config STA WDI API, free all the memory " );
3220 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3221 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003222 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003225 return CONVERT_WDI2VOS_STATUS(status) ;
3226}
Jeff Johnson295189b2012-06-20 16:38:30 -07003227/*
3228 * FUNCTION: WDA_DelBSSReqCallback
3229 * Dens DEL BSS RSP back to PE
3230 */
3231void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3232 void* pUserData)
3233{
3234 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3235 tWDA_CbContext *pWDA;
3236 tDeleteBssParams *delBssReqParam;
3237 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003239 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 if(NULL == pWdaParams)
3241 {
3242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003243 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 VOS_ASSERT(0) ;
3245 return ;
3246 }
3247 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3248 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003249 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3251 {
3252 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3253 sizeof(tSirMacAddr)) ;
3254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3256 {
3257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003258 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 VOS_ASSERT(0) ;
3260 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3262 {
3263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003264 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 VOS_ASSERT(0) ;
3266 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3268 {
3269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003270 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 VOS_ASSERT(0) ;
3272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3274 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 /* reset the the system role*/
3276 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3277
3278 /* Reset the BA related information */
3279 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3280 {
3281 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3282 {
3283 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3284 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3285 /* Reset framesTxed counters here */
3286 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3287 {
3288 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3289 }
3290 }
3291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 return ;
3294}
3295
Jeff Johnson295189b2012-06-20 16:38:30 -07003296/*
3297 * FUNCTION: WDA_ProcessDelBssReq
3298 * Init DEL BSS req with WDI
3299 */
3300VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3301 tDeleteBssParams *delBssParam)
3302{
3303 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003304 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3305 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3306 sizeof(WDI_DelBSSReqParamsType)) ;
3307 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003309 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003310 if(NULL == wdiDelBssReqParam)
3311 {
3312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 VOS_ASSERT(0);
3315 return VOS_STATUS_E_NOMEM;
3316 }
3317 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3318 if(NULL == pWdaParams)
3319 {
3320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003322 VOS_ASSERT(0);
3323 vos_mem_free(wdiDelBssReqParam);
3324 return VOS_STATUS_E_NOMEM;
3325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3327 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3328
3329 /* Store Init Req pointer, as this will be used for response */
3330 /* store Params pass it to WDI */
3331 pWdaParams->pWdaContext = pWDA;
3332 pWdaParams->wdaMsgParam = delBssParam;
3333 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 status = WDI_DelBSSReq(wdiDelBssReqParam,
3335 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 if(IS_WDI_STATUS_FAILURE(status))
3337 {
3338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3339 "Failure in Del BSS WDI API, free all the memory " );
3340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3341 vos_mem_free(pWdaParams) ;
3342 delBssParam->status = eSIR_FAILURE ;
3343 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003345 return CONVERT_WDI2VOS_STATUS(status) ;
3346}
Jeff Johnson295189b2012-06-20 16:38:30 -07003347/*
3348 * FUNCTION: WDA_DelSTAReqCallback
3349 * Dens DEL STA RSP back to PE
3350 */
3351void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3352 void* pUserData)
3353{
3354 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3355 tWDA_CbContext *pWDA;
3356 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003358 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 if(NULL == pWdaParams)
3360 {
3361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003362 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 VOS_ASSERT(0) ;
3364 return ;
3365 }
3366 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3367 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003368 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003369 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3370 {
3371 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3372 {
3373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003374 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 VOS_ASSERT(0) ;
3376 }
3377 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3378 }
3379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3380 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003381 /*Reset the BA information corresponding to this STAIdx */
3382 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3383 WDA_INVALID_STA_INDEX;
3384 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3385
3386 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 return ;
3388}
Jeff Johnson295189b2012-06-20 16:38:30 -07003389/*
3390 * FUNCTION: WDA_ProcessDelStaReq
3391 * Init DEL STA req with WDI
3392 */
3393VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3394 tDeleteStaParams *delStaParam)
3395{
3396 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3398 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3399 sizeof(WDI_DelSTAReqParamsType)) ;
3400 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003402 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 if(NULL == wdiDelStaReqParam)
3404 {
3405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003407 VOS_ASSERT(0);
3408 return VOS_STATUS_E_NOMEM;
3409 }
3410 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3411 if(NULL == pWdaParams)
3412 {
3413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003414 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 VOS_ASSERT(0);
3416 vos_mem_free(wdiDelStaReqParam);
3417 return VOS_STATUS_E_NOMEM;
3418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3420 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 /* Store Init Req pointer, as this will be used for response */
3422 /* store Params pass it to WDI */
3423 pWdaParams->pWdaContext = pWDA;
3424 pWdaParams->wdaMsgParam = delStaParam;
3425 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003426 status = WDI_DelSTAReq(wdiDelStaReqParam,
3427 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003428 if(IS_WDI_STATUS_FAILURE(status))
3429 {
3430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3431 "Failure in Del STA WDI API, free all the memory status = %d",
3432 status );
3433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3434 vos_mem_free(pWdaParams) ;
3435 delStaParam->status = eSIR_FAILURE ;
3436 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 return CONVERT_WDI2VOS_STATUS(status) ;
3439}
Jeff Johnson295189b2012-06-20 16:38:30 -07003440void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3441{
3442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3443 tWDA_CbContext *pWDA;
3444 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003446 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003447 if(NULL == pWdaParams)
3448 {
3449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003450 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003451 VOS_ASSERT(0) ;
3452 return ;
3453 }
3454 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3455 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3457 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3459 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3460 pwdiAddSTASelfRsp->macSelfSta,
3461 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003462 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 return ;
3464}
Jeff Johnson295189b2012-06-20 16:38:30 -07003465/*
3466 * FUNCTION: WDA_ProcessAddStaSelfReq
3467 *
3468 */
3469VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3470{
3471 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003472 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003473 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3474 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3475 sizeof(WDI_AddSTASelfReqParamsType)) ;
3476 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003478 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003479 if( NULL == wdiAddStaSelfReq )
3480 {
3481 VOS_ASSERT( 0 );
3482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003483 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 return( VOS_STATUS_E_NOMEM );
3485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 if( NULL == pWdaParams )
3488 {
3489 VOS_ASSERT( 0 );
3490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003491 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003492 vos_mem_free(wdiAddStaSelfReq) ;
3493 return( VOS_STATUS_E_NOMEM );
3494 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003497 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 /* Store Init Req pointer, as this will be used for response */
3499 /* store Params pass it to WDI */
3500 pWdaParams->pWdaContext = pWDA;
3501 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3502 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003503 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003504
Jeff Johnson43971f52012-07-17 12:26:56 -07003505 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 {
3507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3508 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003509 wstatus );
3510 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003511 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3512 vos_mem_free(pWdaParams) ;
3513 pAddStaSelfReq->status = eSIR_FAILURE ;
3514 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3515 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003516 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003517}
Jeff Johnson295189b2012-06-20 16:38:30 -07003518/*
3519 * FUNCTION: WDA_DelSTASelfRespCallback
3520 *
3521 */
3522void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3523 wdiDelStaSelfRspParams , void* pUserData)
3524{
3525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3526 tWDA_CbContext *pWDA;
3527 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003529 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003530 if (NULL == pWdaParams)
3531 {
3532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003533 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 VOS_ASSERT(0);
3535 return;
3536 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003537 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3538 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003539 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003540 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003541
3542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3543 vos_mem_free(pWdaParams) ;
3544
3545 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003546 return ;
3547}
Jeff Johnson295189b2012-06-20 16:38:30 -07003548/*
3549 * FUNCTION: WDA_DelSTASelfReqCallback
3550 *
3551 */
3552void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3553 void* pUserData)
3554{
3555 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3556 tWDA_CbContext *pWDA;
3557 tDelStaSelfParams *delStaSelfParams;
3558
3559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303560 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003561 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003562
3563 if (NULL == pWdaParams)
3564 {
3565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003566 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 VOS_ASSERT(0);
3568 return;
3569 }
3570
3571 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3572 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3573
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003574 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003575
3576 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3577 {
3578 VOS_ASSERT(0);
3579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3580 vos_mem_free(pWdaParams) ;
3581 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3582 }
3583
3584 return ;
3585}
3586
3587/*
3588 * FUNCTION: WDA_DelSTASelfReq
3589 * Trigger Config STA processing in WDI
3590 */
3591VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3592 tDelStaSelfParams* pDelStaSelfReqParam)
3593{
3594 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003595 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 tWDA_ReqParams *pWdaParams = NULL;
3597 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3598 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3599 sizeof(WDI_DelSTASelfReqParamsType)) ;
3600
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003602 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 if( NULL == wdiDelStaSelfReq )
3604 {
3605 VOS_ASSERT( 0 );
3606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003607 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003608 return( VOS_STATUS_E_NOMEM );
3609 }
3610
3611 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3612 if( NULL == pWdaParams )
3613 {
3614 VOS_ASSERT( 0 );
3615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003616 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 vos_mem_free(wdiDelStaSelfReq) ;
3618 return( VOS_STATUS_E_NOMEM );
3619 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003620 pWdaParams->pWdaContext = pWDA;
3621 /* Store param pointer as passed in by caller */
3622 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3623 /* store Params pass it to WDI */
3624 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003625 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3626 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3627
3628 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3629 wdiDelStaSelfReq->pUserData = pWdaParams;
3630
Jeff Johnson43971f52012-07-17 12:26:56 -07003631 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003632 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3633
Jeff Johnson43971f52012-07-17 12:26:56 -07003634 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003635 {
3636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3637 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3638 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003639 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3641 vos_mem_free(pWdaParams) ;
3642 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3643 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3644 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003645 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003646}
3647
Jeff Johnson295189b2012-06-20 16:38:30 -07003648/*
3649 * FUNCTION: WDA_SendMsg
3650 * Send Message back to PE
3651 */
3652void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3653 void *pBodyptr, tANI_U32 bodyVal)
3654{
3655 tSirMsgQ msg = {0} ;
3656 tANI_U32 status = VOS_STATUS_SUCCESS ;
3657 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 msg.type = msgType;
3659 msg.bodyval = bodyVal;
3660 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 if (VOS_STATUS_SUCCESS != status)
3663 {
3664 if(NULL != pBodyptr)
3665 {
3666 vos_mem_free(pBodyptr);
3667 }
3668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003669 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 VOS_ASSERT(0) ;
3671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 return ;
3673}
Jeff Johnson295189b2012-06-20 16:38:30 -07003674/*
3675 * FUNCTION: WDA_UpdateBSSParams
3676 * Translated WDA/PE BSS info into WDI BSS info..
3677 */
3678void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3679 WDI_ConfigBSSReqInfoType *wdiBssParams,
3680 tAddBssParams *wdaBssParams)
3681{
3682 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 /* copy bssReq Params to WDI structure */
3684 vos_mem_copy(wdiBssParams->macBSSID,
3685 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3686 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3687 sizeof(tSirMacAddr)) ;
3688 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3689 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3690 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 wdiBssParams->ucShortSlotTimeSupported =
3692 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3694 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3695 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3696 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3697 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3698
3699 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3700 wdiBssParams->ucTXOPProtectionFullSupport =
3701 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003702 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3703 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003704 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3706 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3707 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3708 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3709
Chet Lanctot186b5732013-03-18 10:26:30 -07003710 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3711
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 /* copy SSID into WDI structure */
3713 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3714 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3715 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003716 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3717 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003718 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003719#ifdef WLAN_FEATURE_VOWIFI
3720 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3721#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003722 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003723 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003724#ifdef WLAN_FEATURE_VOWIFI_11R
3725 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 if(wdiBssParams->bExtSetStaKeyParamValid)
3727 {
3728 /* copy set STA key params to WDI structure */
3729 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3730 wdaBssParams->extSetStaKeyParam.staIdx;
3731 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3732 wdaBssParams->extSetStaKeyParam.encType;
3733 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3734 wdaBssParams->extSetStaKeyParam.wepType;
3735 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3736 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003737 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3738 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003739 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3741 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3742 {
3743 WDA_GetWepKeysFromCfg( pWDA,
3744 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3745 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3746 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3747 }
3748 else
3749 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3751 keyIndex++)
3752 {
3753 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3754 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3755 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3756 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3757 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3758 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003759 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3760 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3761 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3762 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3763 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3764 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3765 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3766 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3769 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 }
3771 }
3772 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3773 }
3774 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3775 {
3776 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3777 sizeof(wdaBssParams->extSetStaKeyParam) );
3778 }
3779#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003780#ifdef WLAN_FEATURE_11AC
3781 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3782 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3783#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003784
3785 return ;
3786}
Jeff Johnson295189b2012-06-20 16:38:30 -07003787/*
3788 * FUNCTION: WDA_UpdateSTAParams
3789 * Translated WDA/PE BSS info into WDI BSS info..
3790 */
3791void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3792 WDI_ConfigStaReqInfoType *wdiStaParams,
3793 tAddStaParams *wdaStaParams)
3794{
3795 tANI_U8 i = 0;
3796 /* Update STA params */
3797 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3798 sizeof(tSirMacAddr)) ;
3799 wdiStaParams->usAssocId = wdaStaParams->assocId;
3800 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003801 wdiStaParams->staIdx = wdaStaParams->staIdx;
3802
Jeff Johnson295189b2012-06-20 16:38:30 -07003803 wdiStaParams->ucShortPreambleSupported =
3804 wdaStaParams->shortPreambleSupported;
3805 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3806 sizeof(tSirMacAddr)) ;
3807 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3808
3809 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3810
3811 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3812 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3813 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3814 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3815 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3816 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3817 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3818
3819 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3820 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 wdiStaParams->wdiSupportedRates.opRateMode =
3822 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3824 {
3825 wdiStaParams->wdiSupportedRates.llbRates[i] =
3826 wdaStaParams->supportedRates.llbRates[i];
3827 }
3828 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3829 {
3830 wdiStaParams->wdiSupportedRates.llaRates[i] =
3831 wdaStaParams->supportedRates.llaRates[i];
3832 }
3833 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3834 {
3835 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3836 wdaStaParams->supportedRates.aniLegacyRates[i];
3837 }
3838 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3839 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003840#ifdef WLAN_FEATURE_11AC
3841 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3842 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3843 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3844 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3845#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003846 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3847 {
3848 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3849 wdaStaParams->supportedRates.supportedMCSSet[i];
3850 }
3851 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3852 wdaStaParams->supportedRates.rxHighestDataRate;
3853
3854 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3855
3856 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3857
3858 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3859 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3860 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3861
3862 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3863 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3864 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3865 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003867#ifdef WLAN_FEATURE_11AC
3868 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3869 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003870 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003871#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003872 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3873 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 return ;
3875}
Jeff Johnson295189b2012-06-20 16:38:30 -07003876/*
3877 * -------------------------------------------------------------------------
3878 * CFG update to WDI
3879 * -------------------------------------------------------------------------
3880 */
3881
3882 /*
3883 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3884 * Convert the WNI CFG ID to HAL CFG ID
3885 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003886static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003887{
3888 switch(wniCfgId)
3889 {
3890 case WNI_CFG_STA_ID:
3891 return QWLAN_HAL_CFG_STA_ID;
3892 case WNI_CFG_CURRENT_TX_ANTENNA:
3893 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3894 case WNI_CFG_CURRENT_RX_ANTENNA:
3895 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3896 case WNI_CFG_LOW_GAIN_OVERRIDE:
3897 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3898 case WNI_CFG_POWER_STATE_PER_CHAIN:
3899 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3900 case WNI_CFG_CAL_PERIOD:
3901 return QWLAN_HAL_CFG_CAL_PERIOD;
3902 case WNI_CFG_CAL_CONTROL:
3903 return QWLAN_HAL_CFG_CAL_CONTROL;
3904 case WNI_CFG_PROXIMITY:
3905 return QWLAN_HAL_CFG_PROXIMITY;
3906 case WNI_CFG_NETWORK_DENSITY:
3907 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3908 case WNI_CFG_MAX_MEDIUM_TIME:
3909 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3910 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3911 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3912 case WNI_CFG_RTS_THRESHOLD:
3913 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3914 case WNI_CFG_SHORT_RETRY_LIMIT:
3915 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3916 case WNI_CFG_LONG_RETRY_LIMIT:
3917 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3918 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3919 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3920 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3921 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3922 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3923 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3924 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3925 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3926 case WNI_CFG_FIXED_RATE:
3927 return QWLAN_HAL_CFG_FIXED_RATE;
3928 case WNI_CFG_RETRYRATE_POLICY:
3929 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3930 case WNI_CFG_RETRYRATE_SECONDARY:
3931 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3932 case WNI_CFG_RETRYRATE_TERTIARY:
3933 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3934 case WNI_CFG_FORCE_POLICY_PROTECTION:
3935 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3936 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3937 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3938 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3939 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3940 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3941 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3942 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3943 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3944 case WNI_CFG_MAX_BA_SESSIONS:
3945 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3946 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3947 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3948 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3949 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3950 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3951 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3952 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3953 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3954 case WNI_CFG_STATS_PERIOD:
3955 return QWLAN_HAL_CFG_STATS_PERIOD;
3956 case WNI_CFG_CFP_MAX_DURATION:
3957 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3958#if 0 /*This is not part of CFG*/
3959 case WNI_CFG_FRAME_TRANS_ENABLED:
3960 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3961#endif
3962 case WNI_CFG_DTIM_PERIOD:
3963 return QWLAN_HAL_CFG_DTIM_PERIOD;
3964 case WNI_CFG_EDCA_WME_ACBK:
3965 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3966 case WNI_CFG_EDCA_WME_ACBE:
3967 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3968 case WNI_CFG_EDCA_WME_ACVI:
3969 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3970 case WNI_CFG_EDCA_WME_ACVO:
3971 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3972#if 0
3973 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3974 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3975 case WNI_CFG_TELE_BCN_TRANS_LI:
3976 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3977 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3978 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3979 case WNI_CFG_TELE_BCN_MAX_LI:
3980 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3981 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3982 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3983#endif
3984 case WNI_CFG_ENABLE_CLOSE_LOOP:
3985 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003986 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3987 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 default:
3989 {
3990 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3991 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3992 wniCfgId);
3993 return VOS_STATUS_E_INVAL;
3994 }
3995 }
3996}
Jeff Johnson295189b2012-06-20 16:38:30 -07003997/*
3998 * FUNCTION: WDA_UpdateCfgCallback
3999 *
4000 */
4001void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4002{
4003 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4004 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4005 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 /*
4009 * currently there is no response message is expected between PE and
4010 * WDA, Failure return from WDI is a ASSERT condition
4011 */
4012 if(WDI_STATUS_SUCCESS != wdiStatus)
4013 {
4014 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004015 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004016 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4017 }
4018
4019 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4020 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4021 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004022 return ;
4023}
Jeff Johnson295189b2012-06-20 16:38:30 -07004024/*
4025 * FUNCTION: WDA_UpdateCfg
4026 *
4027 */
4028VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4029{
4030
4031 WDI_Status status = WDI_STATUS_SUCCESS ;
4032 tANI_U32 val =0;
4033 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4034 tHalCfg *configData;
4035 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4036 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004038 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 if (NULL == pMac )
4040 {
4041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004042 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 return VOS_STATUS_E_FAILURE;
4044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 if(WDA_START_STATE != pWDA->wdaState)
4046 {
4047 return VOS_STATUS_E_FAILURE;
4048 }
4049
4050 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4051 {
4052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004053 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004054 VOS_ASSERT(0);
4055 return VOS_STATUS_E_FAILURE;
4056 }
4057
4058 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4059 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 if(NULL == wdiCfgReqParam)
4061 {
4062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 VOS_ASSERT(0);
4065 return VOS_STATUS_E_NOMEM;
4066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004067 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4068 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004069 if(NULL == wdiCfgReqParam->pConfigBuffer)
4070 {
4071 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004072 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 vos_mem_free(wdiCfgReqParam);
4074 VOS_ASSERT(0);
4075 return VOS_STATUS_E_NOMEM;
4076 }
4077
4078 /*convert the WNI CFG Id to HAL CFG Id*/
4079 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4080 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4081
4082 /*TODO: revisit this for handling string parameters */
4083 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4084 &val) != eSIR_SUCCESS)
4085 {
4086 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4087 "Failed to cfg get id %d\n", cfgParam->bodyval);
4088 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4089 vos_mem_free(wdiCfgReqParam);
4090 return eSIR_FAILURE;
4091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004092 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4093 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4094 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4095 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4096 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4097
4098 /* store Params pass it to WDI */
4099 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004100#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4101 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4102 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 if(IS_WDI_STATUS_FAILURE(status))
4104 {
4105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4106 "Failure in Update CFG WDI API, free all the memory " );
4107 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4108 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4109 pWDA->wdaWdiCfgApiMsgParam = NULL;
4110 /* Failure is not expected */
4111 VOS_ASSERT(0) ;
4112 }
4113#else
4114 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4115 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4116 pWDA->wdaWdiCfgApiMsgParam = NULL;
4117#endif
4118 return CONVERT_WDI2VOS_STATUS(status) ;
4119}
4120
Jeff Johnson295189b2012-06-20 16:38:30 -07004121VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4122 v_U8_t *pDefaultKeyId,
4123 v_U8_t *pNumKeys,
4124 WDI_KeysType *pWdiKeys )
4125{
4126 v_U32_t i, j, defKeyId = 0;
4127 v_U32_t val = SIR_MAC_KEY_LENGTH;
4128 VOS_STATUS status = WDI_STATUS_SUCCESS;
4129 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 if (NULL == pMac )
4131 {
4132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004133 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 return VOS_STATUS_E_FAILURE;
4135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4137 &defKeyId ))
4138 {
4139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4140 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4141 }
4142
4143 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 /* Need to extract ALL of the configured WEP Keys */
4145 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4146 {
4147 val = SIR_MAC_KEY_LENGTH;
4148 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4149 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4150 pWdiKeys[j].key,
4151 &val ))
4152 {
4153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4154 "WEP Key index [%d] may not configured in CFG\n",i);
4155 }
4156 else
4157 {
4158 pWdiKeys[j].keyId = (tANI_U8) i;
4159 /*
4160 * Actually, a DC (Don't Care) because
4161 * this is determined (and set) by PE/MLME
4162 */
4163 pWdiKeys[j].unicast = 0;
4164 /*
4165 * Another DC (Don't Care)
4166 */
4167 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4168 /* Another DC (Don't Care). Unused for WEP */
4169 pWdiKeys[j].paeRole = 0;
4170 /* Determined from wlan_cfgGetStr() above.*/
4171 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 j++;
4173 *pNumKeys = (tANI_U8) j;
4174 }
4175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004176 return status;
4177}
Jeff Johnson295189b2012-06-20 16:38:30 -07004178/*
4179 * FUNCTION: WDA_SetBssKeyReqCallback
4180 * send SET BSS key RSP back to PE
4181 */
4182void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4183{
4184 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4185 tWDA_CbContext *pWDA;
4186 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004188 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004189 if(NULL == pWdaParams)
4190 {
4191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004192 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 VOS_ASSERT(0) ;
4194 return ;
4195 }
4196 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4197 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4199 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004200 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 return ;
4203}
Jeff Johnson295189b2012-06-20 16:38:30 -07004204/*
4205 * FUNCTION: WDA_ProcessSetBssKeyReq
4206 * Request to WDI for programming the BSS key( key for
4207 * broadcast/multicast frames Encryption)
4208 */
4209VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4210 tSetBssKeyParams *setBssKeyParams )
4211{
4212 WDI_Status status = WDI_STATUS_SUCCESS ;
4213 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4214 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4215 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4216 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004219 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 if(NULL == wdiSetBssKeyParam)
4221 {
4222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 VOS_ASSERT(0);
4225 return VOS_STATUS_E_NOMEM;
4226 }
4227 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4228 if(NULL == pWdaParams)
4229 {
4230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004231 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 VOS_ASSERT(0);
4233 vos_mem_free(wdiSetBssKeyParam);
4234 return VOS_STATUS_E_NOMEM;
4235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004237 /* copy set BSS params to WDI structure */
4238 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4239 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4240 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 if(setBssKeyParams->encType != eSIR_ED_NONE)
4242 {
4243 if( setBssKeyParams->numKeys == 0 &&
4244 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4245 setBssKeyParams->encType == eSIR_ED_WEP104))
4246 {
4247 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004248 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4249 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4250 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4251 }
4252 else
4253 {
4254 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4255 {
4256 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4257 setBssKeyParams->key[keyIndex].keyId;
4258 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4259 setBssKeyParams->key[keyIndex].unicast;
4260 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4261 setBssKeyParams->key[keyIndex].keyDirection;
4262 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4263 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4264 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4265 setBssKeyParams->key[keyIndex].paeRole;
4266 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4267 setBssKeyParams->key[keyIndex].keyLength;
4268 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4269 setBssKeyParams->key[keyIndex].key,
4270 SIR_MAC_MAX_KEY_LENGTH);
4271 }
4272 }
4273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4275 setBssKeyParams->singleTidRc;
4276 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004277 /* Store set key pointer, as this will be used for response */
4278 /* store Params pass it to WDI */
4279 pWdaParams->pWdaContext = pWDA;
4280 pWdaParams->wdaMsgParam = setBssKeyParams;
4281 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4283 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4284
4285 if(IS_WDI_STATUS_FAILURE(status))
4286 {
4287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4288 "Failure in Set BSS Key Req WDI API, free all the memory " );
4289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4290 vos_mem_free(pWdaParams) ;
4291 setBssKeyParams->status = eSIR_FAILURE ;
4292 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 return CONVERT_WDI2VOS_STATUS(status) ;
4295}
Jeff Johnson295189b2012-06-20 16:38:30 -07004296/*
4297 * FUNCTION: WDA_RemoveBssKeyReqCallback
4298 * send SET BSS key RSP back to PE
4299 */
4300void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4301{
4302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4303 tWDA_CbContext *pWDA;
4304 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004306 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 if(NULL == pWdaParams)
4308 {
4309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004310 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 VOS_ASSERT(0) ;
4312 return ;
4313 }
4314 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4315 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4317 vos_mem_free(pWdaParams) ;
4318
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004319 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 return ;
4322}
Jeff Johnson295189b2012-06-20 16:38:30 -07004323/*
4324 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4325 * Request to WDI to remove the BSS key( key for broadcast/multicast
4326 * frames Encryption)
4327 */
4328VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4329 tRemoveBssKeyParams *removeBssKeyParams )
4330{
4331 WDI_Status status = WDI_STATUS_SUCCESS ;
4332 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4333 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4334 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4335 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004337 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 if(NULL == wdiRemoveBssKeyParam)
4339 {
4340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 VOS_ASSERT(0);
4343 return VOS_STATUS_E_NOMEM;
4344 }
4345 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4346 if(NULL == pWdaParams)
4347 {
4348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 VOS_ASSERT(0);
4351 vos_mem_free(wdiRemoveBssKeyParam);
4352 return VOS_STATUS_E_NOMEM;
4353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 /* copy Remove BSS key params to WDI structure*/
4355 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4356 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4357 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4358 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4359 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 /* Store remove key pointer, as this will be used for response */
4361 /* store Params pass it to WDI */
4362 pWdaParams->pWdaContext = pWDA;
4363 pWdaParams->wdaMsgParam = removeBssKeyParams;
4364 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4366 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 if(IS_WDI_STATUS_FAILURE(status))
4368 {
4369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4370 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4372 vos_mem_free(pWdaParams) ;
4373 removeBssKeyParams->status = eSIR_FAILURE ;
4374 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 return CONVERT_WDI2VOS_STATUS(status) ;
4377}
Jeff Johnson295189b2012-06-20 16:38:30 -07004378/*
4379 * FUNCTION: WDA_SetBssKeyReqCallback
4380 * send SET BSS key RSP back to PE
4381 */
4382void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4383{
4384 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4385 tWDA_CbContext *pWDA;
4386 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004388 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 if(NULL == pWdaParams)
4390 {
4391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004392 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 VOS_ASSERT(0) ;
4394 return ;
4395 }
4396 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4397 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4399 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004400 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004402 return ;
4403}
Jeff Johnson295189b2012-06-20 16:38:30 -07004404/*
4405 * FUNCTION: WDA_ProcessSetStaKeyReq
4406 * Request to WDI for programming the STA key( key for Unicast frames
4407 * Encryption)
4408 */
4409VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4410 tSetStaKeyParams *setStaKeyParams )
4411{
4412 WDI_Status status = WDI_STATUS_SUCCESS ;
4413 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4414 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4415 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4416 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004417 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004419 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 if(NULL == wdiSetStaKeyParam)
4421 {
4422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 VOS_ASSERT(0);
4425 return VOS_STATUS_E_NOMEM;
4426 }
4427 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4428 if(NULL == pWdaParams)
4429 {
4430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 VOS_ASSERT(0);
4433 vos_mem_free(wdiSetStaKeyParam);
4434 return VOS_STATUS_E_NOMEM;
4435 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004437 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004438 /* copy set STA key params to WDI structure */
4439 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4440 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4441 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4442 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004443 if(setStaKeyParams->encType != eSIR_ED_NONE)
4444 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004445 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4447 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4448 {
4449 WDA_GetWepKeysFromCfg( pWDA,
4450 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4451 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4452 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4453 }
4454 else
4455 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4457 keyIndex++)
4458 {
4459 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4460 setStaKeyParams->key[keyIndex].keyId;
4461 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4462 setStaKeyParams->key[keyIndex].unicast;
4463 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4464 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004465 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4466 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4467 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4468 setStaKeyParams->key[keyIndex].paeRole;
4469 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4470 setStaKeyParams->key[keyIndex].keyLength;
4471 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4472 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4473 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4474 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4475 {
4476 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4477 }
4478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004479 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4480 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 }
4482 }
4483 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4484 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 /* Store set key pointer, as this will be used for response */
4486 /* store Params pass it to WDI */
4487 pWdaParams->pWdaContext = pWDA;
4488 pWdaParams->wdaMsgParam = setStaKeyParams;
4489 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4491 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 if(IS_WDI_STATUS_FAILURE(status))
4493 {
4494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4495 "Failure in set STA Key Req WDI API, free all the memory " );
4496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4497 vos_mem_free(pWdaParams) ;
4498 setStaKeyParams->status = eSIR_FAILURE ;
4499 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 return CONVERT_WDI2VOS_STATUS(status) ;
4502}
Jeff Johnson295189b2012-06-20 16:38:30 -07004503/*
4504 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4505 * send SET Bcast STA key RSP back to PE
4506 */
4507void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4508{
4509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4510 tWDA_CbContext *pWDA;
4511 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004513 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 if(NULL == pWdaParams)
4515 {
4516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004517 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 VOS_ASSERT(0) ;
4519 return ;
4520 }
4521 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4522 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4524 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004525 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004527 return ;
4528}
4529
Jeff Johnson295189b2012-06-20 16:38:30 -07004530/*
4531 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4532 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4533 * Encryption)
4534 */
4535VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4536 tSetStaKeyParams *setStaKeyParams )
4537{
4538 WDI_Status status = WDI_STATUS_SUCCESS ;
4539 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4540 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4541 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4542 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004543 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004545 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 if(NULL == wdiSetStaKeyParam)
4547 {
4548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004550 VOS_ASSERT(0);
4551 return VOS_STATUS_E_NOMEM;
4552 }
4553 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4554 if(NULL == pWdaParams)
4555 {
4556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 VOS_ASSERT(0);
4559 vos_mem_free(wdiSetStaKeyParam);
4560 return VOS_STATUS_E_NOMEM;
4561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 /* copy set STA key params to WDI structure */
4565 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4566 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4567 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4568 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 if(setStaKeyParams->encType != eSIR_ED_NONE)
4570 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004571 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4572 keyIndex++)
4573 {
4574 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4575 setStaKeyParams->key[keyIndex].keyId;
4576 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4577 setStaKeyParams->key[keyIndex].unicast;
4578 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4579 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4581 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4582 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4583 setStaKeyParams->key[keyIndex].paeRole;
4584 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4585 setStaKeyParams->key[keyIndex].keyLength;
4586 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4587 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4590 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004591 }
4592 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004593 /* Store set key pointer, as this will be used for response */
4594 /* store Params pass it to WDI */
4595 pWdaParams->pWdaContext = pWDA;
4596 pWdaParams->wdaMsgParam = setStaKeyParams;
4597 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004598 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4599 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 if(IS_WDI_STATUS_FAILURE(status))
4601 {
4602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4603 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4605 vos_mem_free(pWdaParams) ;
4606 setStaKeyParams->status = eSIR_FAILURE ;
4607 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4608 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004609 return CONVERT_WDI2VOS_STATUS(status) ;
4610}
Jeff Johnson295189b2012-06-20 16:38:30 -07004611/*
4612 * FUNCTION: WDA_RemoveStaKeyReqCallback
4613 * send SET BSS key RSP back to PE
4614 */
4615void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4616{
4617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4618 tWDA_CbContext *pWDA;
4619 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004621 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004622 if(NULL == pWdaParams)
4623 {
4624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004625 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 VOS_ASSERT(0) ;
4627 return ;
4628 }
4629 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4630 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4632 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004633 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004635 return ;
4636}
4637
Jeff Johnson295189b2012-06-20 16:38:30 -07004638/*
4639 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4640 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4641 */
4642VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4643 tRemoveStaKeyParams *removeStaKeyParams )
4644{
4645 WDI_Status status = WDI_STATUS_SUCCESS ;
4646 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4647 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4648 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4649 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004651 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004652 if(NULL == wdiRemoveStaKeyParam)
4653 {
4654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 VOS_ASSERT(0);
4657 return VOS_STATUS_E_NOMEM;
4658 }
4659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4660 if(NULL == pWdaParams)
4661 {
4662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004664 VOS_ASSERT(0);
4665 vos_mem_free(wdiRemoveStaKeyParam);
4666 return VOS_STATUS_E_NOMEM;
4667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 /* copy remove STA key params to WDI structure*/
4669 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4670 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4671 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4672 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4673 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004674 /* Store remove key pointer, as this will be used for response */
4675 /* store Params pass it to WDI */
4676 pWdaParams->pWdaContext = pWDA;
4677 pWdaParams->wdaMsgParam = removeStaKeyParams;
4678 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004679 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4680 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004681 if(IS_WDI_STATUS_FAILURE(status))
4682 {
4683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4684 "Failure in remove STA Key Req WDI API, free all the memory " );
4685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4686 vos_mem_free(pWdaParams) ;
4687 removeStaKeyParams->status = eSIR_FAILURE ;
4688 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 return CONVERT_WDI2VOS_STATUS(status) ;
4691}
Jeff Johnson295189b2012-06-20 16:38:30 -07004692/*
4693 * FUNCTION: WDA_IsHandleSetLinkStateReq
4694 * Update the WDA state and return the status to handle this message or not
4695 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004696WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4697 tWDA_CbContext *pWDA,
4698 tLinkStateParams *linkStateParams)
4699{
4700 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 switch(linkStateParams->state)
4702 {
4703 case eSIR_LINK_PREASSOC_STATE:
4704 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4705 /*
4706 * set the WDA state to PRE ASSOC
4707 * copy the BSSID into pWDA to use it in join request and return,
4708 * No need to handle these messages.
4709 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004710 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4711 {
4712 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004714 }
4715 else
4716 {
4717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004718 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004719 VOS_ASSERT(0);
4720 }
4721
4722 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4723 {
4724 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004726 }
4727 else
4728 {
4729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004730 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004731 VOS_ASSERT(0);
4732 }
4733
Jeff Johnson295189b2012-06-20 16:38:30 -07004734 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4735 *channel and after ) so reset the WDA state to ready when the second
4736 * time UMAC issue the link state with PREASSOC
4737 */
4738 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4739 {
4740 /* RESET WDA state back to WDA_READY_STATE */
4741 pWDA->wdaState = WDA_READY_STATE;
4742 }
4743 else
4744 {
4745 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4746 }
4747 //populate linkState info in WDACbCtxt
4748 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004749 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 default:
4751 if(pWDA->wdaState != WDA_READY_STATE)
4752 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004753 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4754 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4755 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4756 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4757 *the ASSERT in WDA_Stop during module unload.*/
4758 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4759 {
4760 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004761 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004762 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004763 else
4764 {
4765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004766 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004767 status = WDA_IGNORE_SET_LINK_STATE;
4768 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004769 }
4770 break;
4771 }
4772
4773 return status;
4774}
Jeff Johnson295189b2012-06-20 16:38:30 -07004775/*
4776 * FUNCTION: WDA_SetLinkStateCallback
4777 * call back function for set link state from WDI
4778 */
4779void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4780{
4781 tWDA_CbContext *pWDA;
4782 tLinkStateParams *linkStateParams;
4783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004785 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 if(NULL == pWdaParams)
4787 {
4788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004789 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004790 VOS_ASSERT(0) ;
4791 return ;
4792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 /*
4796 * In STA mode start the BA activity check timer after association
4797 * and in AP mode start BA activity check timer after BSS start */
4798 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4799 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004800 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4801 ((status == WDI_STATUS_SUCCESS) &&
4802 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004803 {
4804 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4805 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004806 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 /*
4808 * No respone required for WDA_SET_LINK_STATE so free the request
4809 * param here
4810 */
4811 if( pWdaParams != NULL )
4812 {
4813 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4814 {
4815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4816 }
4817 vos_mem_free(pWdaParams);
4818 }
4819 return ;
4820}
Jeff Johnson295189b2012-06-20 16:38:30 -07004821/*
4822 * FUNCTION: WDA_ProcessSetLinkState
4823 * Request to WDI to set the link status.
4824 */
4825VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4826 tLinkStateParams *linkStateParams)
4827{
4828 WDI_Status status = WDI_STATUS_SUCCESS ;
4829 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4830 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4831 sizeof(WDI_SetLinkReqParamsType)) ;
4832 tWDA_ReqParams *pWdaParams ;
4833 tpAniSirGlobal pMac;
4834 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4835
4836 if(NULL == pMac)
4837 {
4838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004839 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004840 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004841 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 return VOS_STATUS_E_FAILURE;
4843 }
4844
4845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004846 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 if(NULL == wdiSetLinkStateParam)
4848 {
4849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004850 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 VOS_ASSERT(0);
4852 return VOS_STATUS_E_NOMEM;
4853 }
4854 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4855 if(NULL == pWdaParams)
4856 {
4857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 VOS_ASSERT(0);
4860 vos_mem_free(wdiSetLinkStateParam);
4861 return VOS_STATUS_E_NOMEM;
4862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 if(WDA_IGNORE_SET_LINK_STATE ==
4864 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4865 {
4866 status = WDI_STATUS_E_FAILURE;
4867 }
4868 else
4869 {
4870 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4871 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004872 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4873 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004874 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4875 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 pWdaParams->pWdaContext = pWDA;
4877 /* Store remove key pointer, as this will be used for response */
4878 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 /* store Params pass it to WDI */
4880 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4881 /* Stop Timer only other than GO role and concurrent session */
4882 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07004883 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4885 {
4886 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4887 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4889 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 if(IS_WDI_STATUS_FAILURE(status))
4891 {
4892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4893 "Failure in set link state Req WDI API, free all the memory " );
4894 }
4895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 if(IS_WDI_STATUS_FAILURE(status))
4897 {
4898 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004899 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 vos_mem_free(pWdaParams);
4901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004902 return CONVERT_WDI2VOS_STATUS(status) ;
4903}
Jeff Johnson295189b2012-06-20 16:38:30 -07004904/*
4905 * FUNCTION: WDA_GetStatsReqParamsCallback
4906 * send the response to PE with Stats received from WDI
4907 */
4908void WDA_GetStatsReqParamsCallback(
4909 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4910 void* pUserData)
4911{
4912 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4913 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4914
4915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004916 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004917 pGetPEStatsRspParams =
4918 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4919 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4920
4921 if(NULL == pGetPEStatsRspParams)
4922 {
4923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004924 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 VOS_ASSERT(0);
4926 return;
4927 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4929 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4930 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4931 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004932
4933 //Fill the Session Id Properly in PE
4934 pGetPEStatsRspParams->sessionId = 0;
4935 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004936 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004937 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4938 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 vos_mem_copy( pGetPEStatsRspParams + 1,
4940 wdiGetStatsRsp + 1,
4941 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 /* send response to UMAC*/
4943 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4944
4945 return;
4946}
4947
Jeff Johnson295189b2012-06-20 16:38:30 -07004948/*
4949 * FUNCTION: WDA_ProcessGetStatsReq
4950 * Request to WDI to get the statistics
4951 */
4952VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4953 tAniGetPEStatsReq *pGetStatsParams)
4954{
4955 WDI_Status status = WDI_STATUS_SUCCESS ;
4956 WDI_GetStatsReqParamsType wdiGetStatsParam;
4957 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004959 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004960 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4961 pGetStatsParams->staId;
4962 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4963 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 status = WDI_GetStatsReq(&wdiGetStatsParam,
4966 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 if(IS_WDI_STATUS_FAILURE(status))
4968 {
4969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4970 "Failure in Get Stats Req WDI API, free all the memory " );
4971 pGetPEStatsRspParams =
4972 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4973 if(NULL == pGetPEStatsRspParams)
4974 {
4975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004976 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004978 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 return VOS_STATUS_E_NOMEM;
4980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4982 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4983 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4984 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4985 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4986 (void *)pGetPEStatsRspParams, 0) ;
4987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 /* Free the request message */
4989 vos_mem_free(pGetStatsParams);
4990 return CONVERT_WDI2VOS_STATUS(status);
4991}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004992
4993#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
4994/*
4995 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
4996 * send the response to PE with roam Rssi received from WDI
4997 */
4998void WDA_GetRoamRssiReqParamsCallback(
4999 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5000 void* pUserData)
5001{
5002 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5003 tWDA_CbContext *pWDA = NULL;
5004 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5005 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5007 "<------ %s " ,__func__);
5008 if(NULL == pWdaParams)
5009 {
5010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5011 "%s: pWdaParams received NULL", __func__);
5012 VOS_ASSERT(0) ;
5013 return ;
5014 }
5015 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5016 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5017
5018 if(NULL == pGetRoamRssiReqParams)
5019 {
5020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5021 "%s: pGetRoamRssiReqParams received NULL", __func__);
5022 VOS_ASSERT(0);
5023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5024 vos_mem_free(pWdaParams);
5025 return ;
5026 }
5027 pGetRoamRssiRspParams =
5028 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5029
5030 if(NULL == pGetRoamRssiRspParams)
5031 {
5032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5033 "%s: VOS MEM Alloc Failure", __func__);
5034 VOS_ASSERT(0);
5035 return;
5036 }
5037 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5038 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005039 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005040 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5041 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5042
5043 /* Assign get roam rssi req (backup) in to the response */
5044 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5045
5046 /* free WDI command buffer */
5047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5048 vos_mem_free(pWdaParams) ;
5049
5050 /* send response to UMAC*/
5051 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5052
5053 return;
5054}
5055
5056
5057
5058/*
5059 * FUNCTION: WDA_ProcessGetRoamRssiReq
5060 * Request to WDI to get the statistics
5061 */
5062VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5063 tAniGetRssiReq *pGetRoamRssiParams)
5064{
5065 WDI_Status status = WDI_STATUS_SUCCESS ;
5066 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5067 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5068 tWDA_ReqParams *pWdaParams = NULL;
5069
5070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5071 "------> %s " ,__func__);
5072 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5073 pGetRoamRssiParams->staId;
5074 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5075
5076 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5077 if(NULL == pWdaParams)
5078 {
5079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5080 "%s: VOS MEM Alloc Failure", __func__);
5081 VOS_ASSERT(0);
5082 return VOS_STATUS_E_NOMEM;
5083 }
5084
5085 /* Store Init Req pointer, as this will be used for response */
5086 pWdaParams->pWdaContext = pWDA;
5087
5088 /* Take Get roam Rssi req backup as it stores the callback to be called after
5089 receiving the response */
5090 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5091 pWdaParams->wdaWdiApiMsgParam = NULL;
5092
5093 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5094 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5095 if(IS_WDI_STATUS_FAILURE(status))
5096 {
5097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5098 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5099 pGetRoamRssiRspParams =
5100 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5101 if(NULL == pGetRoamRssiRspParams)
5102 {
5103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5104 "%s: VOS MEM Alloc Failure", __func__);
5105 VOS_ASSERT(0);
5106 vos_mem_free(pGetRoamRssiParams);
5107 vos_mem_free(pWdaParams);
5108 return VOS_STATUS_E_NOMEM;
5109 }
5110 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5111 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5112 pGetRoamRssiRspParams->rssi = 0;
5113 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5114 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5115 (void *)pGetRoamRssiRspParams, 0) ;
5116 }
5117 return CONVERT_WDI2VOS_STATUS(status);
5118}
5119#endif
5120
5121
Jeff Johnson295189b2012-06-20 16:38:30 -07005122/*
5123 * FUNCTION: WDA_UpdateEDCAParamCallback
5124 * call back function for Update EDCA params from WDI
5125 */
5126void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5127{
5128 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5129 tEdcaParams *pEdcaParams;
5130
5131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005132 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 if(NULL == pWdaParams)
5134 {
5135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005136 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 VOS_ASSERT(0) ;
5138 return ;
5139 }
5140 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5142 vos_mem_free(pWdaParams);
5143 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005144 return ;
5145}
Jeff Johnson295189b2012-06-20 16:38:30 -07005146/*
5147 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5148 * Request to WDI to Update the EDCA params.
5149 */
5150VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5151 tEdcaParams *pEdcaParams)
5152{
5153 WDI_Status status = WDI_STATUS_SUCCESS ;
5154 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5155 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5156 sizeof(WDI_UpdateEDCAParamsType)) ;
5157 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005159 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 if(NULL == wdiEdcaParam)
5161 {
5162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005165 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 return VOS_STATUS_E_NOMEM;
5167 }
5168 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5169 if(NULL == pWdaParams)
5170 {
5171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005172 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005173 VOS_ASSERT(0);
5174 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005175 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005176 return VOS_STATUS_E_NOMEM;
5177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5179 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5180 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5181 &pEdcaParams->acbe);
5182 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5183 &pEdcaParams->acbk);
5184 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5185 &pEdcaParams->acvi);
5186 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5187 &pEdcaParams->acvo);
5188 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005189 pWdaParams->pWdaContext = pWDA;
5190 /* Store remove key pointer, as this will be used for response */
5191 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005192 /* store Params pass it to WDI */
5193 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005194 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5195 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 if(IS_WDI_STATUS_FAILURE(status))
5197 {
5198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5199 "Failure in Update EDCA Params WDI API, free all the memory " );
5200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5201 vos_mem_free(pWdaParams);
5202 vos_mem_free(pEdcaParams);
5203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005204 return CONVERT_WDI2VOS_STATUS(status) ;
5205}
Jeff Johnson295189b2012-06-20 16:38:30 -07005206/*
5207 * FUNCTION: WDA_AddBAReqCallback
5208 * send ADD BA RSP back to PE
5209 */
5210void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5211 void* pUserData)
5212{
5213 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5214 tWDA_CbContext *pWDA;
5215 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005217 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005218 if(NULL == pWdaParams)
5219 {
5220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005221 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 VOS_ASSERT(0) ;
5223 return ;
5224 }
5225 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5226 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5228 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005229 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005230 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005231 return ;
5232}
5233
Jeff Johnson295189b2012-06-20 16:38:30 -07005234/*
5235 * FUNCTION: WDA_ProcessAddBAReq
5236 * Request to WDI to Update the ADDBA REQ params.
5237 */
5238VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5239 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5240{
Jeff Johnson43971f52012-07-17 12:26:56 -07005241 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5243 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5244 sizeof(WDI_AddBAReqParamsType)) ;
5245 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 if(NULL == wdiAddBAReqParam)
5249 {
5250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005251 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 VOS_ASSERT(0);
5253 return VOS_STATUS_E_NOMEM;
5254 }
5255 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5256 if(NULL == pWdaParams)
5257 {
5258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005259 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 VOS_ASSERT(0);
5261 vos_mem_free(wdiAddBAReqParam);
5262 return VOS_STATUS_E_NOMEM;
5263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 do
5265 {
5266 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005267 wdiAddBaInfo->ucSTAIdx = staIdx ;
5268 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5269 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005270 } while(0) ;
5271 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 pWdaParams->pWdaContext = pWDA;
5273 /* store Params pass it to WDI */
5274 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5275 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005276 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5277 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005278
Jeff Johnson43971f52012-07-17 12:26:56 -07005279 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005280 {
5281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005282 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5283 status = CONVERT_WDI2VOS_STATUS(wstatus);
5284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005285 vos_mem_free(pWdaParams);
5286 pAddBAReqParams->status = eSIR_FAILURE;
5287 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5288 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005289 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005290}
Jeff Johnson295189b2012-06-20 16:38:30 -07005291/*
5292 * FUNCTION: WDA_AddBASessionReqCallback
5293 * send ADD BA SESSION RSP back to PE/(or TL)
5294 */
5295void WDA_AddBASessionReqCallback(
5296 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5297{
5298 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5299 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5300 tWDA_CbContext *pWDA;
5301 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005303 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 if(NULL == pWdaParams)
5305 {
5306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005307 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 VOS_ASSERT(0) ;
5309 return ;
5310 }
5311 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5312 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 if( NULL == pAddBAReqParams )
5314 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005316 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005317 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5319 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 return ;
5321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5323 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005324 /*
5325 * if WDA in update TL state, update TL with BA session parama and send
5326 * another request to HAL(/WDI) (ADD_BA_REQ)
5327 */
5328
5329 if((VOS_STATUS_SUCCESS ==
5330 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5331 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5332 {
5333 /* Update TL with BA info received from HAL/WDI */
5334 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5335 wdiAddBaSession->usBaSessionID,
5336 wdiAddBaSession->ucSTAIdx,
5337 wdiAddBaSession->ucBaTID,
5338 wdiAddBaSession->ucBaBufferSize,
5339 wdiAddBaSession->ucWinSize,
5340 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005341 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5342 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5343 }
5344 else
5345 {
5346 pAddBAReqParams->status =
5347 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5348
5349 /* Setting Flag to indicate that Set BA is success */
5350 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5351 {
5352 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5353 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5354 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 /*Reset the WDA state to READY */
5359 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 return ;
5361}
5362
Jeff Johnson295189b2012-06-20 16:38:30 -07005363/*
5364 * FUNCTION: WDA_ProcessAddBASessionReq
5365 * Request to WDI to Update the ADDBA REQ params.
5366 */
5367VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5368 tAddBAParams *pAddBAReqParams)
5369{
5370 WDI_Status status = WDI_STATUS_SUCCESS ;
5371 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5372 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5373 sizeof(WDI_AddBASessionReqParamsType)) ;
5374 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005375 WLANTL_STAStateType tlSTAState = 0;
5376
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005378 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 if(NULL == wdiAddBASessionReqParam)
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 VOS_ASSERT(0);
5384 return VOS_STATUS_E_NOMEM;
5385 }
5386 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5387 if(NULL == pWdaParams)
5388 {
5389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 VOS_ASSERT(0);
5392 vos_mem_free(wdiAddBASessionReqParam);
5393 return VOS_STATUS_E_NOMEM;
5394 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005395 /*
5396 * Populate ADD BA parameters and pass these paarmeters to WDI.
5397 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5398 * the state to track if these is BA recipient case or BA initiator
5399 * case.
5400 */
5401 do
5402 {
5403 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5404 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5405 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5406 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5407 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5408 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5409 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005410 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5412 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5413 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5414 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5415 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005416 /* check the BA direction and update state accordingly */
5417 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5418 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5419 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5420
5421 }while(0) ;
5422 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005423 pWdaParams->pWdaContext = pWDA;
5424 /* Store ADD BA pointer, as this will be used for response */
5425 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5426 /* store Params pass it to WDI */
5427 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005428
5429 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5430 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5431 */
5432 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5433 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5434 {
5435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5436 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5437 status = WDI_STATUS_E_NOT_ALLOWED;
5438 pAddBAReqParams->status =
5439 CONVERT_WDI2SIR_STATUS(status) ;
5440 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5441 /*Reset the WDA state to READY */
5442 pWDA->wdaState = WDA_READY_STATE;
5443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5444 vos_mem_free(pWdaParams);
5445
5446 return CONVERT_WDI2VOS_STATUS(status) ;
5447 }
5448
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5450 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005451 if(IS_WDI_STATUS_FAILURE(status))
5452 {
5453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005454 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5456 "Send ADD BA failure response to PE\n");
5457 pAddBAReqParams->status =
5458 CONVERT_WDI2SIR_STATUS(status) ;
5459 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005460 /*Reset the WDA state to READY */
5461 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 vos_mem_free(pWdaParams);
5464 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005466}
Jeff Johnson295189b2012-06-20 16:38:30 -07005467/*
5468 * FUNCTION: WDA_DelBANotifyTL
5469 * send DEL BA IND to TL
5470 */
5471void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5472 tDelBAParams *pDelBAReqParams)
5473{
5474 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5475 //tSirMsgQ msg;
5476 vos_msg_t vosMsg;
5477 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005478 if(NULL == pDelBAInd)
5479 {
5480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 VOS_ASSERT(0) ;
5483 return;
5484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5486 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5487 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5488 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005489
Jeff Johnson295189b2012-06-20 16:38:30 -07005490
5491 vosMsg.type = WDA_DELETEBA_IND;
5492 vosMsg.bodyptr = pDelBAInd;
5493 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5494 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5495 {
5496 vosStatus = VOS_STATUS_E_BADMSG;
5497 }
5498}
Jeff Johnson295189b2012-06-20 16:38:30 -07005499/*
5500 * FUNCTION: WDA_DelBAReqCallback
5501 * send DEL BA RSP back to PE
5502 */
5503void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5504{
5505 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5506 tWDA_CbContext *pWDA;
5507 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005509 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 if(NULL == pWdaParams)
5511 {
5512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005513 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 VOS_ASSERT(0) ;
5515 return ;
5516 }
5517 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5518 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 /* Notify TL about DEL BA in case of recipinet */
5520 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5521 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5522 {
5523 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 /*
5526 * No respone required for WDA_DELBA_IND so just free the request
5527 * param here
5528 */
5529 vos_mem_free(pDelBAReqParams);
5530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5531 vos_mem_free(pWdaParams);
5532 return ;
5533}
5534
Jeff Johnson295189b2012-06-20 16:38:30 -07005535/*
5536 * FUNCTION: WDA_ProcessDelBAReq
5537 * Request to WDI to Update the DELBA REQ params.
5538 */
5539VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5540 tDelBAParams *pDelBAReqParams)
5541{
5542 WDI_Status status = WDI_STATUS_SUCCESS ;
5543 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5544 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5545 sizeof(WDI_DelBAReqParamsType)) ;
5546 tWDA_ReqParams *pWdaParams ;
5547 tANI_U16 staIdx = 0;
5548 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005550 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005551 if(NULL == wdiDelBAReqParam)
5552 {
5553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005555 VOS_ASSERT(0);
5556 return VOS_STATUS_E_NOMEM;
5557 }
5558 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5559 if(NULL == pWdaParams)
5560 {
5561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 VOS_ASSERT(0);
5564 vos_mem_free(wdiDelBAReqParam);
5565 return VOS_STATUS_E_NOMEM;
5566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005567 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5568 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5569 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5570 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005571 pWdaParams->pWdaContext = pWDA;
5572 /* Store DEL BA pointer, as this will be used for response */
5573 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 /* store Params pass it to WDI */
5575 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5577 * maintained in WDA, so that WDA can retry for another BA session
5578 */
5579 staIdx = pDelBAReqParams->staIdx;
5580 tid = pDelBAReqParams->baTID;
5581 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 status = WDI_DelBAReq(wdiDelBAReqParam,
5583 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005584 if(IS_WDI_STATUS_FAILURE(status))
5585 {
5586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5587 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5589 vos_mem_free(pWdaParams->wdaMsgParam);
5590 vos_mem_free(pWdaParams);
5591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005592 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005593}
Jeff Johnson295189b2012-06-20 16:38:30 -07005594/*
5595 * FUNCTION: WDA_AddTSReqCallback
5596 * send ADD TS RSP back to PE
5597 */
5598void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5599{
5600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5601 tWDA_CbContext *pWDA;
5602 tAddTsParams *pAddTsReqParams;
5603
5604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005605 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 if(NULL == pWdaParams)
5607 {
5608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005609 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 VOS_ASSERT(0) ;
5611 return ;
5612 }
5613 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5614 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5616 vos_mem_free(pWdaParams);
5617
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005618 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005619 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 return ;
5621}
5622
Jeff Johnson295189b2012-06-20 16:38:30 -07005623/*
5624 * FUNCTION: WDA_ProcessAddTSReq
5625 * Request to WDI to Update the ADD TS REQ params.
5626 */
5627VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5628 tAddTsParams *pAddTsReqParams)
5629{
5630 WDI_Status status = WDI_STATUS_SUCCESS ;
5631 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5632 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5633 sizeof(WDI_AddTSReqParamsType)) ;
5634 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005636 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 if(NULL == wdiAddTSReqParam)
5638 {
5639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005640 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005641 VOS_ASSERT(0);
5642 return VOS_STATUS_E_NOMEM;
5643 }
5644 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5645 if(NULL == pWdaParams)
5646 {
5647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005649 VOS_ASSERT(0);
5650 vos_mem_free(wdiAddTSReqParam);
5651 return VOS_STATUS_E_NOMEM;
5652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5654 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 //TS IE
5656 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5657 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5658 pAddTsReqParams->tspec.length;
5659
5660 //TS IE : TS INFO : TRAFFIC
5661 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5662 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5663 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5664 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5665 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5666 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5667 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5668 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5669 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5670 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5671 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5672 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5673 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5674 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5675 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5676 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5677
5678 //TS IE : TS INFO : SCHEDULE
5679 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5680 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5681 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5682 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005683 //TS IE
5684 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5685 pAddTsReqParams->tspec.nomMsduSz;
5686 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5687 pAddTsReqParams->tspec.maxMsduSz;
5688 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5689 pAddTsReqParams->tspec.minSvcInterval;
5690 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5691 pAddTsReqParams->tspec.maxSvcInterval;
5692 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5693 pAddTsReqParams->tspec.inactInterval;
5694 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5695 pAddTsReqParams->tspec.suspendInterval;
5696 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5697 pAddTsReqParams->tspec.svcStartTime;
5698 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5699 pAddTsReqParams->tspec.minDataRate;
5700 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5701 pAddTsReqParams->tspec.meanDataRate;
5702 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5703 pAddTsReqParams->tspec.peakDataRate;
5704 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5705 pAddTsReqParams->tspec.maxBurstSz;
5706 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5707 pAddTsReqParams->tspec.delayBound;
5708 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5709 pAddTsReqParams->tspec.minPhyRate;
5710 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5711 pAddTsReqParams->tspec.surplusBw;
5712 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5713 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005714 /* TODO: tAddTsParams doesn't have the following fields */
5715#if 0
5716 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5717 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5718 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5719 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5720#endif
5721 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5722
5723 pWdaParams->pWdaContext = pWDA;
5724 /* Store ADD TS pointer, as this will be used for response */
5725 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 /* store Params pass it to WDI */
5727 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 status = WDI_AddTSReq(wdiAddTSReqParam,
5729 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 if(IS_WDI_STATUS_FAILURE(status))
5731 {
5732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5733 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5735 vos_mem_free(pWdaParams);
5736 pAddTsReqParams->status = eSIR_FAILURE ;
5737 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005739 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005740}
5741
Jeff Johnson295189b2012-06-20 16:38:30 -07005742/*
5743 * FUNCTION: WDA_DelTSReqCallback
5744 * send DEL TS RSP back to PE
5745 */
5746void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5747{
5748 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005750 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5752 vos_mem_free(pWdaParams->wdaMsgParam) ;
5753 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005754 /*
5755 * No respone required for WDA_DEL_TS_REQ so just free the request
5756 * param here
5757 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 return ;
5759}
5760
Jeff Johnson295189b2012-06-20 16:38:30 -07005761/*
5762 * FUNCTION: WDA_ProcessDelTSReq
5763 * Request to WDI to Update the DELTS REQ params.
5764 */
5765VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5766 tDelTsParams *pDelTSReqParams)
5767{
5768 WDI_Status status = WDI_STATUS_SUCCESS ;
5769 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5770 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5771 sizeof(WDI_DelTSReqParamsType)) ;
5772 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005774 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 if(NULL == wdiDelTSReqParam)
5776 {
5777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005779 VOS_ASSERT(0);
5780 return VOS_STATUS_E_NOMEM;
5781 }
5782 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5783 if(NULL == pWdaParams)
5784 {
5785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005787 VOS_ASSERT(0);
5788 vos_mem_free(wdiDelTSReqParam);
5789 return VOS_STATUS_E_NOMEM;
5790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5792 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5793 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5794 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5795 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005796 pWdaParams->pWdaContext = pWDA;
5797 /* Store DEL TS pointer, as this will be used for response */
5798 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005799 /* store Params pass it to WDI */
5800 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 status = WDI_DelTSReq(wdiDelTSReqParam,
5802 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005803 if(IS_WDI_STATUS_FAILURE(status))
5804 {
5805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5806 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5808 vos_mem_free(pWdaParams->wdaMsgParam);
5809 vos_mem_free(pWdaParams);
5810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005812}
Jeff Johnson295189b2012-06-20 16:38:30 -07005813/*
5814 * FUNCTION: WDA_UpdateBeaconParamsCallback
5815 * Free the memory. No need to send any response to PE in this case
5816 */
5817void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5818{
5819 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005821 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005822 if(NULL == pWdaParams)
5823 {
5824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005825 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005826 VOS_ASSERT(0) ;
5827 return ;
5828 }
5829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5830 vos_mem_free(pWdaParams->wdaMsgParam) ;
5831 vos_mem_free(pWdaParams);
5832 /*
5833 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5834 * param here
5835 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 return ;
5837}
Jeff Johnson295189b2012-06-20 16:38:30 -07005838/*
5839 * FUNCTION: WDA_ProcessUpdateBeaconParams
5840 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5841 */
5842VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5843 tUpdateBeaconParams *pUpdateBeaconParams)
5844{
5845 WDI_Status status = WDI_STATUS_SUCCESS ;
5846 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5847 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5848 sizeof(WDI_UpdateBeaconParamsType)) ;
5849 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005851 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005852 if(NULL == wdiUpdateBeaconParams)
5853 {
5854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 VOS_ASSERT(0);
5857 return VOS_STATUS_E_NOMEM;
5858 }
5859 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5860 if(NULL == pWdaParams)
5861 {
5862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005863 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 VOS_ASSERT(0);
5865 vos_mem_free(wdiUpdateBeaconParams);
5866 return VOS_STATUS_E_NOMEM;
5867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5869 pUpdateBeaconParams->bssIdx;
5870 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5871 pUpdateBeaconParams->fShortPreamble;
5872 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5873 pUpdateBeaconParams->fShortSlotTime;
5874 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5875 pUpdateBeaconParams->beaconInterval;
5876 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5877 pUpdateBeaconParams->llaCoexist;
5878 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5879 pUpdateBeaconParams->llbCoexist;
5880 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5881 pUpdateBeaconParams->llgCoexist;
5882 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5883 pUpdateBeaconParams->ht20MhzCoexist;
5884 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5885 pUpdateBeaconParams->llnNonGFCoexist;
5886 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5887 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5888 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5889 pUpdateBeaconParams->fRIFSMode;
5890 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5891 pUpdateBeaconParams->paramChangeBitmap;
5892 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5893
5894 pWdaParams->pWdaContext = pWDA;
5895 /* Store UpdateBeacon Req pointer, as this will be used for response */
5896 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005897 /* store Params pass it to WDI */
5898 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5900 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5901 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005902 if(IS_WDI_STATUS_FAILURE(status))
5903 {
5904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5905 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5907 vos_mem_free(pWdaParams->wdaMsgParam);
5908 vos_mem_free(pWdaParams);
5909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005910 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005911}
Jeff Johnson295189b2012-06-20 16:38:30 -07005912#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005913/*
5914 * FUNCTION: WDA_TSMStatsReqCallback
5915 * send TSM Stats RSP back to PE
5916 */
5917void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5918{
5919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5920 tWDA_CbContext *pWDA = NULL;
5921 tTSMStats *pTsmRspParams = NULL;
5922
5923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005924 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 if(NULL == pWdaParams)
5926 {
5927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005928 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 VOS_ASSERT(0) ;
5930 return ;
5931 }
5932 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5933 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 if( NULL == pTsmRspParams )
5935 {
5936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005937 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 VOS_ASSERT( 0 );
5939 return ;
5940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5942 vos_mem_free(pWdaParams);
5943
5944 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5945 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5946 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5947 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5948 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5949 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5950 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5951 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5952 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5953 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 return ;
5956}
5957
5958
Jeff Johnson295189b2012-06-20 16:38:30 -07005959/*
5960 * FUNCTION: WDA_ProcessTsmStatsReq
5961 * Request to WDI to get the TSM Stats params.
5962 */
5963VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5964 tTSMStats *pTsmStats)
5965{
5966 WDI_Status status = WDI_STATUS_SUCCESS ;
5967 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5968 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005970 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5972 sizeof(WDI_TSMStatsReqParamsType));
5973 if(NULL == wdiTSMReqParam)
5974 {
5975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005976 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005977 VOS_ASSERT(0);
5978 return VOS_STATUS_E_NOMEM;
5979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005980 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5981 if(NULL == pWdaParams)
5982 {
5983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005984 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 VOS_ASSERT(0);
5986 vos_mem_free(wdiTSMReqParam);
5987 return VOS_STATUS_E_NOMEM;
5988 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5990 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5991 pTsmStats->bssId,
5992 sizeof(wpt_macAddr));
5993 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5994
5995 pWdaParams->pWdaContext = pWDA;
5996 /* Store TSM Stats pointer, as this will be used for response */
5997 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 /* store Params pass it to WDI */
5999 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 status = WDI_TSMStatsReq(wdiTSMReqParam,
6001 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 if(IS_WDI_STATUS_FAILURE(status))
6003 {
6004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6005 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
6006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6007 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08006008 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006010 return CONVERT_WDI2VOS_STATUS(status) ;
6011}
6012#endif
6013/*
6014 * FUNCTION: WDA_SendBeaconParamsCallback
6015 * No need to send any response to PE in this case
6016 */
6017void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6018{
6019
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006021 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006022 return ;
6023}
Jeff Johnson295189b2012-06-20 16:38:30 -07006024/*
6025 * FUNCTION: WDA_ProcessSendBeacon
6026 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6027 * start beacon trasmission
6028 */
6029VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6030 tSendbeaconParams *pSendbeaconParams)
6031{
6032 WDI_Status status = WDI_STATUS_SUCCESS ;
6033 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006035 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6037 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6038 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6039 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006040 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6041 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306042 /* p2pIeOffset should be atleast greater than timIeOffset */
6043 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6044 (pSendbeaconParams->p2pIeOffset <
6045 pSendbeaconParams->timIeOffset))
6046 {
6047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6048 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6049 VOS_ASSERT( 0 );
6050 return WDI_STATUS_E_FAILURE;
6051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6053 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 /* Copy the beacon template to local buffer */
6055 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6056 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6057 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6058
Jeff Johnson295189b2012-06-20 16:38:30 -07006059 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6060 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006061 if(IS_WDI_STATUS_FAILURE(status))
6062 {
6063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6064 "Failure in SEND BEACON REQ Params WDI API" );
6065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 vos_mem_free(pSendbeaconParams);
6067 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006068}
Jeff Johnson295189b2012-06-20 16:38:30 -07006069/*
6070 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6071 * No need to send any response to PE in this case
6072 */
6073void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6074{
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006076 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006077 return ;
6078}
6079
Jeff Johnson295189b2012-06-20 16:38:30 -07006080/*
6081 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6082 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6083 * send probe response
6084 */
6085VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6086 tSendProbeRespParams *pSendProbeRspParams)
6087{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006088 WDI_Status status = WDI_STATUS_SUCCESS;
6089 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6090 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
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__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006093
6094 if (!wdiSendProbeRspParam)
6095 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6096
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006098 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006099 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006100 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006102 /* Copy the Probe Response template to local buffer */
6103 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006104 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006105 pSendProbeRspParams->pProbeRespTemplate,
6106 pSendProbeRspParams->probeRespTemplateLen);
6107 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006108 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006109 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6110 WDI_PROBE_REQ_BITMAP_IE_LEN);
6111
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006112 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006113
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006114 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006116 if(IS_WDI_STATUS_FAILURE(status))
6117 {
6118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6119 "Failure in SEND Probe RSP Params WDI API" );
6120 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006121 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006122 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006123 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006124}
Jeff Johnson295189b2012-06-20 16:38:30 -07006125#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6126/*
6127 * FUNCTION: WDA_SetMaxTxPowerCallBack
6128 * send the response to PE with power value received from WDI
6129 */
6130void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6131 void* pUserData)
6132{
6133 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6134 tWDA_CbContext *pWDA = NULL;
6135 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6136
6137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006138 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 if(NULL == pWdaParams)
6140 {
6141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006142 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 VOS_ASSERT(0) ;
6144 return ;
6145 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6147 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006148 if( NULL == pMaxTxPowerParams )
6149 {
6150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006151 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006152 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6154 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 return ;
6156 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006157
Jeff Johnson295189b2012-06-20 16:38:30 -07006158
6159 /*need to free memory for the pointers used in the
6160 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6162 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006164
Jeff Johnson295189b2012-06-20 16:38:30 -07006165
6166 /* send response to UMAC*/
6167 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6168
6169 return;
6170}
Jeff Johnson295189b2012-06-20 16:38:30 -07006171/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006172 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006173 * Request to WDI to send set Max Tx Power Request
6174 */
6175 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6176 tMaxTxPowerParams *MaxTxPowerParams)
6177{
6178 WDI_Status status = WDI_STATUS_SUCCESS;
6179 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6180 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006181
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006183 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006184
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6186 sizeof(WDI_SetMaxTxPowerParamsType));
6187 if(NULL == wdiSetMaxTxPowerParams)
6188 {
6189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 VOS_ASSERT(0);
6192 return VOS_STATUS_E_NOMEM;
6193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6195 if(NULL == pWdaParams)
6196 {
6197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006198 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 vos_mem_free(wdiSetMaxTxPowerParams);
6200 VOS_ASSERT(0);
6201 return VOS_STATUS_E_NOMEM;
6202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 /* Copy.Max.Tx.Power Params to WDI structure */
6204 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6205 MaxTxPowerParams->bssId,
6206 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006207 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6208 MaxTxPowerParams->selfStaMacAddr,
6209 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006210 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6211 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006212 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 pWdaParams->pWdaContext = pWDA;
6214 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006215 /* store Params pass it to WDI */
6216 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6218 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 if(IS_WDI_STATUS_FAILURE(status))
6220 {
6221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6222 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6224 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006225 /* send response to UMAC*/
6226 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 }
6228 return CONVERT_WDI2VOS_STATUS(status);
6229
6230}
Jeff Johnson295189b2012-06-20 16:38:30 -07006231#endif
schang86c22c42013-03-13 18:41:24 -07006232
6233/*
6234 * FUNCTION: WDA_SetTxPowerCallBack
6235 * send the response to PE with power value received from WDI
6236 */
6237void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6238 void* pUserData)
6239{
6240 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6241 tWDA_CbContext *pWDA = NULL;
6242 tSirSetTxPowerReq *pTxPowerParams = NULL;
6243
6244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6245 "<------ %s ", __func__);
6246 if(NULL == pWdaParams)
6247 {
6248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6249 "%s: pWdaParams received NULL", __func__);
6250 VOS_ASSERT(0) ;
6251 return ;
6252 }
6253 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6254 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6255 if(NULL == pTxPowerParams)
6256 {
6257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6258 "%s: pTxPowerParams received NULL " ,__func__);
6259 VOS_ASSERT(0);
6260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6261 vos_mem_free(pWdaParams);
6262 return ;
6263 }
6264
6265 /*need to free memory for the pointers used in the
6266 WDA Process.Set Max Tx Power Req function*/
6267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6268 vos_mem_free(pWdaParams);
6269
6270 /* send response to UMAC*/
6271 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6272 return;
6273}
6274
6275/*
6276 * FUNCTION: WDA_ProcessSetTxPowerReq
6277 * Request to WDI to send set Tx Power Request
6278 */
6279 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6280 tSirSetTxPowerReq *txPowerParams)
6281{
6282 WDI_Status status = WDI_STATUS_SUCCESS;
6283 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6284 tWDA_ReqParams *pWdaParams = NULL;
6285
6286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6287 "------> %s ", __func__);
6288
6289 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6290 sizeof(WDI_SetTxPowerParamsType));
6291 if(NULL == wdiSetTxPowerParams)
6292 {
6293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6294 "%s: VOS MEM Alloc Failure", __func__);
6295 VOS_ASSERT(0);
6296 return VOS_STATUS_E_NOMEM;
6297 }
6298 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6299 if(NULL == pWdaParams)
6300 {
6301 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6302 "%s: VOS MEM Alloc Failure", __func__);
6303 vos_mem_free(wdiSetTxPowerParams);
6304 VOS_ASSERT(0);
6305 return VOS_STATUS_E_NOMEM;
6306 }
6307 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6308 txPowerParams->bssIdx;
6309 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6310 txPowerParams->mwPower;
6311 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6312 pWdaParams->pWdaContext = pWDA;
6313 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6314 /* store Params pass it to WDI */
6315 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6316 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6317 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6318 if(IS_WDI_STATUS_FAILURE(status))
6319 {
6320 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6321 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6323 vos_mem_free(pWdaParams);
6324 /* send response to UMAC*/
6325 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6326 }
6327 return CONVERT_WDI2VOS_STATUS(status);
6328}
6329
Jeff Johnson295189b2012-06-20 16:38:30 -07006330/*
6331 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6332 * Free the memory. No need to send any response to PE in this case
6333 */
6334void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6335{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006336 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6337
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006339 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006340
6341 if(NULL == pWdaParams)
6342 {
6343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006344 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006345 VOS_ASSERT(0) ;
6346 return ;
6347 }
6348
6349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6350 vos_mem_free(pWdaParams->wdaMsgParam) ;
6351 vos_mem_free(pWdaParams);
6352
Jeff Johnson295189b2012-06-20 16:38:30 -07006353 /*
6354 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6355 * so just free the request param here
6356 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 return ;
6358}
6359
Jeff Johnson295189b2012-06-20 16:38:30 -07006360/*
6361 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6362 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6363 */
6364VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6365 tP2pPsParams *pP2pPsConfigParams)
6366{
6367 WDI_Status status = WDI_STATUS_SUCCESS ;
6368 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6369 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6370 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006371 tWDA_ReqParams *pWdaParams = NULL;
6372
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006374 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006375 if(NULL == wdiSetP2PGONOAReqParam)
6376 {
6377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006378 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006379 VOS_ASSERT(0);
6380 return VOS_STATUS_E_NOMEM;
6381 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006382
6383 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6384 if(NULL == pWdaParams)
6385 {
6386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006387 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006388 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006389 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006390 VOS_ASSERT(0);
6391 return VOS_STATUS_E_NOMEM;
6392 }
6393
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6395 pP2pPsConfigParams->opp_ps;
6396 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6397 pP2pPsConfigParams->ctWindow;
6398 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6399 pP2pPsConfigParams->count;
6400 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6401 pP2pPsConfigParams->duration;
6402 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6403 pP2pPsConfigParams->interval;
6404 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6405 pP2pPsConfigParams->single_noa_duration;
6406 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6407 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006408
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6410 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006411 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6412
Jeff Johnson295189b2012-06-20 16:38:30 -07006413 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006414 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6415 pWdaParams->pWdaContext = pWDA;
6416
Jeff Johnson295189b2012-06-20 16:38:30 -07006417 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006418 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6419
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 if(IS_WDI_STATUS_FAILURE(status))
6421 {
6422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6423 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6425 vos_mem_free(pWdaParams->wdaMsgParam);
6426 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006428 return CONVERT_WDI2VOS_STATUS(status);
6429
Jeff Johnson295189b2012-06-20 16:38:30 -07006430}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306431
6432#ifdef FEATURE_WLAN_TDLS
6433/*
6434 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6435 * Free the memory. No need to send any response to PE in this case
6436 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306437void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6438 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306439{
6440 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6441 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306442 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306443
6444
6445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6446 "<------ %s " ,__func__);
6447 if(NULL == pWdaParams)
6448 {
6449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6450 "%s: pWdaParams received NULL", __func__);
6451 VOS_ASSERT(0) ;
6452 return ;
6453 }
6454 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6455
6456 if(NULL == pWdaParams)
6457 {
6458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6459 "%s: pWdaParams received NULL", __func__);
6460 VOS_ASSERT(0) ;
6461 return ;
6462 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306463 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6464 if( NULL == pTdlsLinkEstablishParams )
6465 {
6466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6467 "%s: pTdlsLinkEstablishParams "
6468 "received NULL " ,__func__);
6469 VOS_ASSERT(0);
6470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6471 vos_mem_free(pWdaParams);
6472 return ;
6473 }
6474 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6475 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306477 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306478 /* send response to UMAC*/
6479 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6480
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306481 return ;
6482}
6483
6484VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6485 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6486{
6487 WDI_Status status = WDI_STATUS_SUCCESS ;
6488 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6489 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6490 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6491 tWDA_ReqParams *pWdaParams = NULL;
6492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6493 "------> %s " ,__func__);
6494 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6495 {
6496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6497 "%s: VOS MEM Alloc Failure", __func__);
6498 VOS_ASSERT(0);
6499 return VOS_STATUS_E_NOMEM;
6500 }
6501 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6502 if(NULL == pWdaParams)
6503 {
6504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6505 "%s: VOS MEM Alloc Failure", __func__);
6506 vos_mem_free(pTdlsLinkEstablishParams);
6507 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6508 VOS_ASSERT(0);
6509 return VOS_STATUS_E_NOMEM;
6510 }
6511 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306512 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306513 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306514 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306515 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306516 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306517 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306518 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306519 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306520 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306521
6522 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6523 /* Store msg pointer from PE, as this will be used for response */
6524 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6525 /* store Params pass it to WDI */
6526 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6527 pWdaParams->pWdaContext = pWDA;
6528
6529 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6530 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6531 WDA_SetTDLSLinkEstablishReqParamsCallback,
6532 pWdaParams);
6533 if(IS_WDI_STATUS_FAILURE(status))
6534 {
6535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6536 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6538 vos_mem_free(pWdaParams->wdaMsgParam);
6539 vos_mem_free(pWdaParams);
6540 }
6541 return CONVERT_WDI2VOS_STATUS(status);
6542}
6543#endif
6544
6545
Jeff Johnson295189b2012-06-20 16:38:30 -07006546#ifdef WLAN_FEATURE_VOWIFI_11R
6547/*
6548 * FUNCTION: WDA_AggrAddTSReqCallback
6549 * send ADD AGGREGATED TS RSP back to PE
6550 */
6551void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6552{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006553 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6554 tWDA_CbContext *pWDA;
6555 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006556 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006558 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006559 if(NULL == pWdaParams)
6560 {
6561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006562 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006563 VOS_ASSERT(0) ;
6564 return ;
6565 }
6566
6567 pWDA = pWdaParams->pWdaContext;
6568 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006569
6570 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6571 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006572 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006573 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006574 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006575
6576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6577 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006578 return ;
6579}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006580/*
6581 * FUNCTION: WDA_ProcessAddTSReq
6582 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6583 */
6584VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6585 tAggrAddTsParams *pAggrAddTsReqParams)
6586{
6587 WDI_Status status = WDI_STATUS_SUCCESS ;
6588 int i;
6589 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006590 tWDA_ReqParams *pWdaParams = NULL;
6591
6592
Jeff Johnson295189b2012-06-20 16:38:30 -07006593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006594 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6596 sizeof(WDI_AggrAddTSReqParamsType)) ;
6597 if(NULL == wdiAggrAddTSReqParam)
6598 {
6599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006601 VOS_ASSERT(0);
6602 return VOS_STATUS_E_NOMEM;
6603 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006604
6605
6606 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6607 if(NULL == pWdaParams)
6608 {
6609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006610 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006611 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006612 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006613 VOS_ASSERT(0);
6614 return VOS_STATUS_E_NOMEM;
6615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006616 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6617 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6618 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006619 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6620 {
6621 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6622 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6623 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006624 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6625 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6626 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6627 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6628 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6629 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6630 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6631 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6632 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6633 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6634 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6635 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6636 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6637 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6638 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6639 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006640 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6641 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006642 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6643 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6644 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6645 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6646 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6647 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6648 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6649 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6650 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6651 pAggrAddTsReqParams->tspec[i].inactInterval;
6652 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6653 pAggrAddTsReqParams->tspec[i].suspendInterval;
6654 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6655 pAggrAddTsReqParams->tspec[i].svcStartTime;
6656 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6657 pAggrAddTsReqParams->tspec[i].minDataRate;
6658 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6659 pAggrAddTsReqParams->tspec[i].meanDataRate;
6660 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6661 pAggrAddTsReqParams->tspec[i].peakDataRate;
6662 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6663 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6664 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6665 pAggrAddTsReqParams->tspec[i].delayBound;
6666 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6667 pAggrAddTsReqParams->tspec[i].minPhyRate;
6668 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6669 pAggrAddTsReqParams->tspec[i].surplusBw;
6670 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6671 pAggrAddTsReqParams->tspec[i].mediumTime;
6672 }
6673
6674 /* TODO: tAggrAddTsParams doesn't have the following fields */
6675#if 0
6676 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6677 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6678 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6679 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6680#endif
6681 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6682
6683 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006684 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006685 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006686 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6687
6688 pWdaParams->pWdaContext = pWDA;
6689
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006691 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6692
Jeff Johnson295189b2012-06-20 16:38:30 -07006693 if(IS_WDI_STATUS_FAILURE(status))
6694 {
6695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6696 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6698 vos_mem_free(pWdaParams);
6699
6700 /* send the failure response back to PE*/
6701 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6702 {
6703 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6704 }
6705
6706 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6707 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006708 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006709 return CONVERT_WDI2VOS_STATUS(status) ;
6710}
6711#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006712/*
6713 * FUNCTION: WDA_EnterImpsReqCallback
6714 * send Enter IMPS RSP back to PE
6715 */
6716void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6717{
6718 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006720 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006721 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 return ;
6723}
Jeff Johnson295189b2012-06-20 16:38:30 -07006724/*
6725 * FUNCTION: WDA_ProcessEnterImpsReq
6726 * Request to WDI to Enter IMPS power state.
6727 */
6728VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6729{
6730 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006732 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006733 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006734 if(IS_WDI_STATUS_FAILURE(status))
6735 {
6736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6737 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006738 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 return CONVERT_WDI2VOS_STATUS(status) ;
6741}
Jeff Johnson295189b2012-06-20 16:38:30 -07006742/*
6743 * FUNCTION: WDA_ExitImpsReqCallback
6744 * send Exit IMPS RSP back to PE
6745 */
6746void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6747{
6748 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006750 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006751 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 return ;
6753}
Jeff Johnson295189b2012-06-20 16:38:30 -07006754/*
6755 * FUNCTION: WDA_ProcessExitImpsReq
6756 * Request to WDI to Exit IMPS power state.
6757 */
6758VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6759{
6760 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006762 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006764 if(IS_WDI_STATUS_FAILURE(status))
6765 {
6766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6767 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006768 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006770 return CONVERT_WDI2VOS_STATUS(status) ;
6771}
Jeff Johnson295189b2012-06-20 16:38:30 -07006772/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006773 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 * send Enter BMPS RSP back to PE
6775 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006776void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006777{
6778 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6779 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006780 tEnterBmpsParams *pEnterBmpsRspParams;
6781
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 if(NULL == pWdaParams)
6785 {
6786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006787 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 VOS_ASSERT(0) ;
6789 return ;
6790 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006791
6792 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6793 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6794
6795 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006796 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006797
6798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006799 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006800 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6801
Jeff Johnson295189b2012-06-20 16:38:30 -07006802 return ;
6803}
Jeff Johnson295189b2012-06-20 16:38:30 -07006804/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006805 * FUNCTION: WDA_EnterBmpsReqCallback
6806 * Free memory and send Enter BMPS RSP back to PE.
6807 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
6808 */
6809void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6810{
6811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6812 tWDA_CbContext *pWDA;
6813 tEnterBmpsParams *pEnterBmpsRspParams;
6814
6815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6816 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6817
6818 if(NULL == pWdaParams)
6819 {
6820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6821 "%s: pWdaParams received NULL", __func__);
6822 VOS_ASSERT(0);
6823 return;
6824 }
6825
6826 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6827 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6828 pEnterBmpsRspParams->status = wdiStatus;
6829
6830 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6831 {
6832 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6833 vos_mem_free(pWdaParams);
6834 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
6835 }
6836
6837 return;
6838}
6839/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 * FUNCTION: WDA_ProcessEnterBmpsReq
6841 * Request to WDI to Enter BMPS power state.
6842 */
6843VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6844 tEnterBmpsParams *pEnterBmpsReqParams)
6845{
6846 WDI_Status status = WDI_STATUS_SUCCESS;
6847 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6848 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006850 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006851 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6852 {
6853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006854 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 VOS_ASSERT(0);
6856 return VOS_STATUS_E_FAILURE;
6857 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6859 if (NULL == wdiEnterBmpsReqParams)
6860 {
6861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006862 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006864 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6865 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 return VOS_STATUS_E_NOMEM;
6867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6869 if (NULL == pWdaParams)
6870 {
6871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006872 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 VOS_ASSERT(0);
6874 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006875 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6876 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 return VOS_STATUS_E_NOMEM;
6878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006879 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6880 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6881 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6882 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 // For CCX and 11R Roaming
6884 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6885 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6886 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07006887 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
6888 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006889
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 /* Store param pointer as passed in by caller */
6891 /* store Params pass it to WDI */
6892 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006893 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006894 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006896 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 if (IS_WDI_STATUS_FAILURE(status))
6898 {
6899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6900 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006902 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006904 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 return CONVERT_WDI2VOS_STATUS(status);
6907}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006908
6909
6910static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6911 WDI_Status wdiStatus,
6912 tExitBmpsParams *pExitBmpsReqParams)
6913{
6914 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6915
6916 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6917}
6918
6919
Jeff Johnson295189b2012-06-20 16:38:30 -07006920/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006921 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006922 * send Exit BMPS RSP back to PE
6923 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006924void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006925{
6926 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6927 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006928 tExitBmpsParams *pExitBmpsRspParams;
6929
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006931 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 if(NULL == pWdaParams)
6933 {
6934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006935 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 VOS_ASSERT(0) ;
6937 return ;
6938 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006939
6940 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6941 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6942
6943 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006944 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006945
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6947 vos_mem_free(pWdaParams) ;
6948
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006949 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006950 return ;
6951}
Jeff Johnson295189b2012-06-20 16:38:30 -07006952/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006953 * FUNCTION: WDA_ExitBmpsReqCallback
6954 * Free memory and send Exit BMPS RSP back to PE.
6955 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
6956 */
6957void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6958{
6959 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6960 tWDA_CbContext *pWDA;
6961 tExitBmpsParams *pExitBmpsRspParams;
6962
6963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6964 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6965
6966 if(NULL == pWdaParams)
6967 {
6968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6969 "%s: pWdaParams received NULL", __func__);
6970 VOS_ASSERT(0);
6971 return;
6972 }
6973
6974 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6975 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6976 pExitBmpsRspParams->status = wdiStatus;
6977
6978 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6979 {
6980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6981 vos_mem_free(pWdaParams);
6982 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
6983 }
6984
6985 return;
6986}
6987/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006988 * FUNCTION: WDA_ProcessExitBmpsReq
6989 * Request to WDI to Exit BMPS power state.
6990 */
6991VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6992 tExitBmpsParams *pExitBmpsReqParams)
6993{
6994 WDI_Status status = WDI_STATUS_SUCCESS ;
6995 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6996 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6997 sizeof(WDI_ExitBmpsReqParamsType)) ;
6998 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007000 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 if(NULL == wdiExitBmpsReqParams)
7002 {
7003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007004 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007005 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007006 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 return VOS_STATUS_E_NOMEM;
7008 }
7009 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7010 if(NULL == pWdaParams)
7011 {
7012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007013 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 VOS_ASSERT(0);
7015 vos_mem_free(wdiExitBmpsReqParams);
7016 return VOS_STATUS_E_NOMEM;
7017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007019
7020 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7021
Yue Ma7f44bbe2013-04-12 11:47:39 -07007022 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7023 wdiExitBmpsReqParams->pUserData = pWdaParams;
7024
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 /* Store param pointer as passed in by caller */
7026 /* store Params pass it to WDI */
7027 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7028 pWdaParams->pWdaContext = pWDA;
7029 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007031 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 if(IS_WDI_STATUS_FAILURE(status))
7033 {
7034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7035 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7037 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007038 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 return CONVERT_WDI2VOS_STATUS(status) ;
7041}
Jeff Johnson295189b2012-06-20 16:38:30 -07007042/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007043 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 * send Enter UAPSD RSP back to PE
7045 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007046void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007047{
7048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7049 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007050 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007052 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 if(NULL == pWdaParams)
7054 {
7055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007056 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 VOS_ASSERT(0) ;
7058 return ;
7059 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007060
7061 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7062 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7063
7064 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007065 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007066
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7068 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007069 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007070 return ;
7071}
Jeff Johnson295189b2012-06-20 16:38:30 -07007072/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007073 * FUNCTION: WDA_EnterUapsdReqCallback
7074 * Free memory and send Enter UAPSD RSP back to PE.
7075 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7076 */
7077void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7078{
7079 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7080 tWDA_CbContext *pWDA;
7081 tUapsdParams *pEnterUapsdRsqParams;
7082
7083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7084 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7085
7086 if(NULL == pWdaParams)
7087 {
7088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7089 "%s: pWdaParams received NULL", __func__);
7090 VOS_ASSERT(0);
7091 return;
7092 }
7093
7094 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7095 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7096 pEnterUapsdRsqParams->status = wdiStatus;
7097
7098 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7099 {
7100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7101 vos_mem_free(pWdaParams);
7102 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7103 }
7104
7105 return;
7106}
7107/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 * FUNCTION: WDA_ProcessEnterUapsdReq
7109 * Request to WDI to Enter UAPSD power state.
7110 */
7111VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7112 tUapsdParams *pEnterUapsdReqParams)
7113{
7114 WDI_Status status = WDI_STATUS_SUCCESS ;
7115 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7116 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7117 sizeof(WDI_EnterUapsdReqParamsType)) ;
7118 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007120 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 if(NULL == wdiEnterUapsdReqParams)
7122 {
7123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 VOS_ASSERT(0);
7126 return VOS_STATUS_E_NOMEM;
7127 }
7128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7129 if(NULL == pWdaParams)
7130 {
7131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 VOS_ASSERT(0);
7134 vos_mem_free(wdiEnterUapsdReqParams);
7135 return VOS_STATUS_E_NOMEM;
7136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7138 pEnterUapsdReqParams->beDeliveryEnabled;
7139 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7140 pEnterUapsdReqParams->beTriggerEnabled;
7141 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7142 pEnterUapsdReqParams->bkDeliveryEnabled;
7143 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7144 pEnterUapsdReqParams->bkTriggerEnabled;
7145 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7146 pEnterUapsdReqParams->viDeliveryEnabled;
7147 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7148 pEnterUapsdReqParams->viTriggerEnabled;
7149 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7150 pEnterUapsdReqParams->voDeliveryEnabled;
7151 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7152 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007153 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007154
Yue Ma7f44bbe2013-04-12 11:47:39 -07007155 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7156 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007157
Jeff Johnson295189b2012-06-20 16:38:30 -07007158 /* Store param pointer as passed in by caller */
7159 /* store Params pass it to WDI */
7160 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7161 pWdaParams->pWdaContext = pWDA;
7162 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007164 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 if(IS_WDI_STATUS_FAILURE(status))
7166 {
7167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7168 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7169 vos_mem_free(pWdaParams->wdaMsgParam) ;
7170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7171 vos_mem_free(pWdaParams) ;
7172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 return CONVERT_WDI2VOS_STATUS(status) ;
7174}
Jeff Johnson295189b2012-06-20 16:38:30 -07007175/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007176 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 * send Exit UAPSD RSP back to PE
7178 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007179void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007180{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007181
7182 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7183 tWDA_CbContext *pWDA;
7184 tExitUapsdParams *pExitUapsdRspParams;
7185
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007187 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007188 if(NULL == pWdaParams)
7189 {
7190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007191 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007192 VOS_ASSERT(0);
7193 return;
7194 }
7195
7196 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7197 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7198
7199 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007200 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007201
7202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7203 vos_mem_free(pWdaParams) ;
7204
7205 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 return ;
7207}
Jeff Johnson295189b2012-06-20 16:38:30 -07007208/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007209 * FUNCTION: WDA_ExitUapsdReqCallback
7210 * Free memory and send Exit UAPSD RSP back to PE.
7211 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7212 */
7213void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7214{
7215 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7216 tWDA_CbContext *pWDA;
7217 tExitUapsdParams *pExitUapsdRspParams;
7218
7219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7220 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7221
7222 if(NULL == pWdaParams)
7223 {
7224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7225 "%s: pWdaParams received NULL", __func__);
7226 VOS_ASSERT(0);
7227 return;
7228 }
7229
7230 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7231 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7232 pExitUapsdRspParams->status = wdiStatus;
7233
7234 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7235 {
7236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7237 vos_mem_free(pWdaParams);
7238 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7239 }
7240
7241 return;
7242}
7243/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 * FUNCTION: WDA_ProcessExitUapsdReq
7245 * Request to WDI to Exit UAPSD power state.
7246 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007247VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7248 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007249{
7250 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007251 tWDA_ReqParams *pWdaParams ;
7252 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7253 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7254 sizeof(WDI_ExitUapsdReqParamsType)) ;
7255
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007257 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007258
7259 if(NULL == wdiExitUapsdReqParams)
7260 {
7261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007262 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007263 VOS_ASSERT(0);
7264 return VOS_STATUS_E_NOMEM;
7265 }
7266 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7267 if(NULL == pWdaParams)
7268 {
7269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007270 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007271 VOS_ASSERT(0);
7272 vos_mem_free(wdiExitUapsdReqParams);
7273 return VOS_STATUS_E_NOMEM;
7274 }
7275
7276 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007277 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7278 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007279
7280 /* Store param pointer as passed in by caller */
7281 /* store Params pass it to WDI */
7282 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7283 pWdaParams->pWdaContext = pWDA;
7284 pWdaParams->wdaMsgParam = pExitUapsdParams;
7285
Yue Ma7f44bbe2013-04-12 11:47:39 -07007286 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 if(IS_WDI_STATUS_FAILURE(status))
7288 {
7289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7290 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007291 vos_mem_free(pWdaParams->wdaMsgParam) ;
7292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7293 vos_mem_free(pWdaParams) ;
7294
Jeff Johnson295189b2012-06-20 16:38:30 -07007295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007296 return CONVERT_WDI2VOS_STATUS(status) ;
7297}
7298
Jeff Johnson295189b2012-06-20 16:38:30 -07007299/*
7300 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7301 *
7302 */
7303void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7304{
7305 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007307 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007308 if(NULL == pWdaParams)
7309 {
7310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007311 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007312 VOS_ASSERT(0) ;
7313 return ;
7314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007315 if( pWdaParams != NULL )
7316 {
7317 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7318 {
7319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7320 }
7321 if( pWdaParams->wdaMsgParam != NULL )
7322 {
7323 vos_mem_free(pWdaParams->wdaMsgParam) ;
7324 }
7325 vos_mem_free(pWdaParams) ;
7326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007327 return ;
7328}
Jeff Johnson295189b2012-06-20 16:38:30 -07007329/*
7330 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7331 * Request to WDI to set the power save params at start.
7332 */
7333VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7334 tSirPowerSaveCfg *pPowerSaveCfg)
7335{
7336 WDI_Status status = WDI_STATUS_SUCCESS ;
7337 tHalCfg *tlvStruct = NULL ;
7338 tANI_U8 *tlvStructStart = NULL ;
7339 v_PVOID_t *configParam;
7340 tANI_U32 configParamSize;
7341 tANI_U32 *configDataValue;
7342 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7343 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007345 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007346 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7347 {
7348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007349 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007350 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007351 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007352 return VOS_STATUS_E_FAILURE;
7353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007354 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7355 if (NULL == wdiPowerSaveCfg)
7356 {
7357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007358 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007359 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007360 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 return VOS_STATUS_E_NOMEM;
7362 }
7363 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7364 if(NULL == pWdaParams)
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 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007370 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 return VOS_STATUS_E_NOMEM;
7372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7374 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007375 if(NULL == configParam)
7376 {
7377 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007378 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007379 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 vos_mem_free(pWdaParams);
7381 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007382 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007383 return VOS_STATUS_E_NOMEM;
7384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 vos_mem_set(configParam, configParamSize, 0);
7386 wdiPowerSaveCfg->pConfigBuffer = configParam;
7387 tlvStruct = (tHalCfg *)configParam;
7388 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007389 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7390 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7391 tlvStruct->length = sizeof(tANI_U32);
7392 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7393 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007394 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7395 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007396 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7397 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7398 tlvStruct->length = sizeof(tANI_U32);
7399 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7400 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7402 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7404 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7405 tlvStruct->length = sizeof(tANI_U32);
7406 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7407 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7409 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7411 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7412 tlvStruct->length = sizeof(tANI_U32);
7413 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7414 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7416 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7418 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7419 tlvStruct->length = sizeof(tANI_U32);
7420 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7421 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007422 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7423 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7425 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7426 tlvStruct->length = sizeof(tANI_U32);
7427 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7428 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7430 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007431 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7432 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7433 tlvStruct->length = sizeof(tANI_U32);
7434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7435 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7437 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7439 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7440 tlvStruct->length = sizeof(tANI_U32);
7441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7442 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7443 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7444 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7446 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7447 tlvStruct->length = sizeof(tANI_U32);
7448 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7449 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7450 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7451 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007452 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7453 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7454 tlvStruct->length = sizeof(tANI_U32);
7455 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7456 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7458 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7460 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7461 tlvStruct->length = sizeof(tANI_U32);
7462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7463 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7465 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007468 /* store Params pass it to WDI */
7469 pWdaParams->wdaMsgParam = configParam;
7470 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7471 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7473 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 if(IS_WDI_STATUS_FAILURE(status))
7475 {
7476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7477 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7478 vos_mem_free(pWdaParams->wdaMsgParam);
7479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7480 vos_mem_free(pWdaParams);
7481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 return CONVERT_WDI2VOS_STATUS(status);
7484}
Jeff Johnson295189b2012-06-20 16:38:30 -07007485/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007486 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 *
7488 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007489void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007490{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7492
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007494 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007495
7496 if(NULL == pWdaParams)
7497 {
7498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7499 "%s: pWdaParams received NULL", __func__);
7500 VOS_ASSERT(0);
7501 return ;
7502 }
7503
7504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007505 vos_mem_free(pWdaParams);
7506
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 return ;
7508}
Jeff Johnson295189b2012-06-20 16:38:30 -07007509/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007510 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7511 * Free memory.
7512 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7513 */
7514void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7515{
7516 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7517
7518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7519 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7520
7521 if(NULL == pWdaParams)
7522 {
7523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7524 "%s: pWdaParams received NULL", __func__);
7525 VOS_ASSERT(0);
7526 return;
7527 }
7528
7529 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7530 {
7531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7532 vos_mem_free(pWdaParams);
7533 }
7534
7535 return;
7536}
7537/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 * FUNCTION: WDA_SetUapsdAcParamsReq
7539 * Request to WDI to set the UAPSD params for an ac (sta mode).
7540 */
7541VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7542 tUapsdInfo *pUapsdInfo)
7543{
7544 WDI_Status status = WDI_STATUS_SUCCESS;
7545 tWDA_CbContext *pWDA = NULL ;
7546 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7547 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7548 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7549 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007551 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007552 if(NULL == wdiUapsdParams)
7553 {
7554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007555 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 VOS_ASSERT(0);
7557 return VOS_STATUS_E_NOMEM;
7558 }
7559 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7560 if(NULL == pWdaParams)
7561 {
7562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 VOS_ASSERT(0);
7565 vos_mem_free(wdiUapsdParams);
7566 return VOS_STATUS_E_NOMEM;
7567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7569 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7570 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7571 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7572 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7573 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007574 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7575 wdiUapsdParams->pUserData = pWdaParams;
7576
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 pWdaParams->pWdaContext = pWDA;
7579 /* Store param pointer as passed in by caller */
7580 pWdaParams->wdaMsgParam = pUapsdInfo;
7581 /* store Params pass it to WDI */
7582 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007583 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007584 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007585 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 if(IS_WDI_STATUS_FAILURE(status))
7587 {
7588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7589 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7591 vos_mem_free(pWdaParams);
7592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007593 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7594 return VOS_STATUS_SUCCESS;
7595 else
7596 return VOS_STATUS_E_FAILURE;
7597
Jeff Johnson295189b2012-06-20 16:38:30 -07007598}
7599/*
7600 * FUNCTION: WDA_ClearUapsdAcParamsReq
7601 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7602 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7603 * and again enter the UPASD with the modified params. Hence the disable
7604 * function was kept empty.
7605 *
7606 */
7607VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7608{
7609 /* do nothing */
7610 return VOS_STATUS_SUCCESS;
7611}
Jeff Johnson295189b2012-06-20 16:38:30 -07007612/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007613 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007614 *
7615 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007616void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007617{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007618 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7619
Jeff Johnson295189b2012-06-20 16:38:30 -07007620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007621 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007622
7623 if(NULL == pWdaParams)
7624 {
7625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007626 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007627 VOS_ASSERT(0) ;
7628 return ;
7629 }
7630
7631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7632 vos_mem_free(pWdaParams->wdaMsgParam);
7633 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007634
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 //print a msg, nothing else to do
7636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007637 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007638 return ;
7639}
Jeff Johnson295189b2012-06-20 16:38:30 -07007640/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007641 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7642 * Free memory.
7643 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7644 */
7645void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7646{
7647 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7648
7649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7650 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7651
7652 if(NULL == pWdaParams)
7653 {
7654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7655 "%s: pWdaParams received NULL", __func__);
7656 VOS_ASSERT(0);
7657 return;
7658 }
7659
7660 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7661 {
7662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7663 vos_mem_free(pWdaParams->wdaMsgParam);
7664 vos_mem_free(pWdaParams);
7665 }
7666
7667 return;
7668}
7669/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 * FUNCTION: WDA_UpdateUapsdParamsReq
7671 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7672 */
7673VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7674 tUpdateUapsdParams* pUpdateUapsdInfo)
7675{
7676 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007677 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7679 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7680 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007681 tWDA_ReqParams *pWdaParams = NULL;
7682
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007684 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007685 if(NULL == wdiUpdateUapsdParams)
7686 {
7687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 VOS_ASSERT(0);
7690 return VOS_STATUS_E_NOMEM;
7691 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007692 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7693 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7694 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007695 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7696 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007697
7698 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7699 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007700 {
7701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007702 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007703 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007704 vos_mem_free(pUpdateUapsdInfo);
7705 vos_mem_free(wdiUpdateUapsdParams);
7706 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007707 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007708 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007709 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007710 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007711 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7712 pWdaParams->pWdaContext = pWDA;
7713
Jeff Johnson43971f52012-07-17 12:26:56 -07007714 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007715 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007716 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007717
Jeff Johnson43971f52012-07-17 12:26:56 -07007718 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007719 {
7720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7721 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007722 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7724 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007725 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007726 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007727 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007728}
Jeff Johnson295189b2012-06-20 16:38:30 -07007729/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007730 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007731 *
7732 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007733void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007734{
7735 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007737 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007738 if(WDI_STATUS_SUCCESS != wdiStatus)
7739 {
7740 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007741 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 if(NULL == pWdaParams)
7744 {
7745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007746 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007747 VOS_ASSERT(0) ;
7748 return ;
7749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7751 vos_mem_free(pWdaParams->wdaMsgParam);
7752 vos_mem_free(pWdaParams);
7753 return ;
7754}
Jeff Johnson295189b2012-06-20 16:38:30 -07007755/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007756 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7757 * Free memory.
7758 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7759 */
7760void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7761{
7762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7763
7764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7765 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7766
7767 if(NULL == pWdaParams)
7768 {
7769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7770 "%s: pWdaParams received NULL", __func__);
7771 VOS_ASSERT(0);
7772 return;
7773 }
7774
7775 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7776 {
7777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7778 vos_mem_free(pWdaParams->wdaMsgParam);
7779 vos_mem_free(pWdaParams);
7780 }
7781
7782 return;
7783}
7784/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7786 *
7787 */
7788VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7789 tSirWlanSetRxpFilters *pWlanSuspendParam)
7790{
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007792 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7794 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7795 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7796 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007798 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 if(NULL == wdiRxpFilterParams)
7800 {
7801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 VOS_ASSERT(0);
7804 vos_mem_free(pWlanSuspendParam);
7805 return VOS_STATUS_E_NOMEM;
7806 }
7807 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7808 if(NULL == pWdaParams)
7809 {
7810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007811 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 VOS_ASSERT(0);
7813 vos_mem_free(wdiRxpFilterParams);
7814 vos_mem_free(pWlanSuspendParam);
7815 return VOS_STATUS_E_NOMEM;
7816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7818 pWlanSuspendParam->setMcstBcstFilter;
7819 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7820 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7821
Yue Ma7f44bbe2013-04-12 11:47:39 -07007822 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
7823 wdiRxpFilterParams->pUserData = pWdaParams;
7824
Jeff Johnson295189b2012-06-20 16:38:30 -07007825 pWdaParams->pWdaContext = pWDA;
7826 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7827 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007828 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007829 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007830 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007831 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007832 {
7833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7834 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007835 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7837 vos_mem_free(pWdaParams->wdaMsgParam);
7838 vos_mem_free(pWdaParams);
7839 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007840 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007841}
Jeff Johnson295189b2012-06-20 16:38:30 -07007842/*
7843 * FUNCTION: WDA_WdiIndicationCallback
7844 *
7845 */
7846void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7847 void* pUserData)
7848{
7849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007850 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007851}
Jeff Johnson295189b2012-06-20 16:38:30 -07007852/*
7853 * FUNCTION: WDA_ProcessWlanSuspendInd
7854 *
7855 */
7856VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7857 tSirWlanSuspendParam *pWlanSuspendParam)
7858{
7859 WDI_Status wdiStatus;
7860 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007862 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007863 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7864 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7865 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7866 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007868 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7869 if(WDI_STATUS_PENDING == wdiStatus)
7870 {
7871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007872 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 }
7874 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7875 {
7876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007877 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 vos_mem_free(pWlanSuspendParam);
7880 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7881}
7882
Chet Lanctot186b5732013-03-18 10:26:30 -07007883#ifdef WLAN_FEATURE_11W
7884/*
7885 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7886 *
7887 */
7888VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7889 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7890{
7891 WDI_Status wdiStatus;
7892 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7894 "------> %s ", __func__);
7895
7896 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7897 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7898 sizeof(tSirMacAddr));
7899
7900 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7901 wdiExclUnencryptParams.pUserData = pWDA;
7902
7903 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7904 if(WDI_STATUS_PENDING == wdiStatus)
7905 {
7906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7907 "Pending received for %s:%d ", __func__, __LINE__ );
7908 }
7909 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7910 {
7911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7912 "Failure in %s:%d ", __func__, __LINE__ );
7913 }
7914 vos_mem_free(pExclUnencryptParam);
7915 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7916}
7917#endif
7918
Jeff Johnson295189b2012-06-20 16:38:30 -07007919/*
7920 * FUNCTION: WDA_ProcessWlanResumeCallback
7921 *
7922 */
7923void WDA_ProcessWlanResumeCallback(
7924 WDI_SuspendResumeRspParamsType *resumeRspParams,
7925 void* pUserData)
7926{
7927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007929 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007930 if(NULL == pWdaParams)
7931 {
7932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007933 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007934 VOS_ASSERT(0) ;
7935 return ;
7936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007937 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7938 {
7939 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007940 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7943 vos_mem_free(pWdaParams->wdaMsgParam);
7944 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 return ;
7946}
Jeff Johnson295189b2012-06-20 16:38:30 -07007947/*
7948 * FUNCTION: WDA_ProcessWlanResumeReq
7949 *
7950 */
7951VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7952 tSirWlanResumeParam *pWlanResumeParam)
7953{
7954 WDI_Status wdiStatus;
7955 WDI_ResumeParamsType *wdiResumeParams =
7956 (WDI_ResumeParamsType *)vos_mem_malloc(
7957 sizeof(WDI_ResumeParamsType) ) ;
7958 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007960 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007961 if(NULL == wdiResumeParams)
7962 {
7963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007964 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 VOS_ASSERT(0);
7966 return VOS_STATUS_E_NOMEM;
7967 }
7968 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7969 if(NULL == pWdaParams)
7970 {
7971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007972 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 VOS_ASSERT(0);
7974 vos_mem_free(wdiResumeParams);
7975 return VOS_STATUS_E_NOMEM;
7976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007977 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7978 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007980 wdiResumeParams->wdiReqStatusCB = NULL;
7981 pWdaParams->wdaMsgParam = pWlanResumeParam;
7982 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7983 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7985 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7986 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007987 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7988 {
7989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7990 "Failure in Host Resume REQ WDI API, free all the memory " );
7991 VOS_ASSERT(0);
7992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7993 vos_mem_free(pWdaParams->wdaMsgParam);
7994 vos_mem_free(pWdaParams);
7995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7997}
7998
Jeff Johnson295189b2012-06-20 16:38:30 -07007999/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008000 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008001 *
8002 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008003void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008004{
8005 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 if(NULL == pWdaParams)
8009 {
8010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008011 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 VOS_ASSERT(0) ;
8013 return ;
8014 }
8015
8016 vos_mem_free(pWdaParams->wdaMsgParam) ;
8017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8018 vos_mem_free(pWdaParams) ;
8019 /*
8020 * No respone required for SetBeaconFilter req so just free the request
8021 * param here
8022 */
8023
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 return ;
8025}
Jeff Johnson295189b2012-06-20 16:38:30 -07008026/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008027 * FUNCTION: WDA_SetBeaconFilterReqCallback
8028 * Free memory.
8029 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8030 */
8031void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8032{
8033 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8034
8035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8036 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8037
8038 if(NULL == pWdaParams)
8039 {
8040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8041 "%s: pWdaParams received NULL", __func__);
8042 VOS_ASSERT(0);
8043 return;
8044 }
8045
8046 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8047 {
8048 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8049 vos_mem_free(pWdaParams->wdaMsgParam);
8050 vos_mem_free(pWdaParams);
8051 }
8052
8053 return;
8054}
8055/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008056 * FUNCTION: WDA_SetBeaconFilterReq
8057 * Request to WDI to send the beacon filtering related information.
8058 */
8059VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8060 tBeaconFilterMsg* pBeaconFilterInfo)
8061{
8062 WDI_Status status = WDI_STATUS_SUCCESS;
8063 tANI_U8 *dstPtr, *srcPtr;
8064 tANI_U8 filterLength;
8065 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8066 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8067 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8068 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008070 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008071 if(NULL == wdiBeaconFilterInfo)
8072 {
8073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008074 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 VOS_ASSERT(0);
8076 return VOS_STATUS_E_NOMEM;
8077 }
8078 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8079 if(NULL == pWdaParams)
8080 {
8081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008082 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 VOS_ASSERT(0);
8084 vos_mem_free(wdiBeaconFilterInfo);
8085 return VOS_STATUS_E_NOMEM;
8086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8088 pBeaconFilterInfo->beaconInterval;
8089 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8090 pBeaconFilterInfo->capabilityInfo;
8091 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8092 pBeaconFilterInfo->capabilityMask;
8093 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008094
8095 //Fill the BssIdx
8096 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8097
Jeff Johnson295189b2012-06-20 16:38:30 -07008098 //Fill structure with info contained in the beaconFilterTable
8099 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8100 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8101 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8102 if(WDI_BEACON_FILTER_LEN < filterLength)
8103 {
8104 filterLength = WDI_BEACON_FILTER_LEN;
8105 }
8106 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008107 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8108 wdiBeaconFilterInfo->pUserData = pWdaParams;
8109
Jeff Johnson295189b2012-06-20 16:38:30 -07008110 /* Store param pointer as passed in by caller */
8111 /* store Params pass it to WDI */
8112 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8113 pWdaParams->pWdaContext = pWDA;
8114 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8115
Jeff Johnson295189b2012-06-20 16:38:30 -07008116 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008117 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 if(IS_WDI_STATUS_FAILURE(status))
8119 {
8120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8121 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8122 vos_mem_free(pWdaParams->wdaMsgParam) ;
8123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8124 vos_mem_free(pWdaParams) ;
8125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 return CONVERT_WDI2VOS_STATUS(status) ;
8127}
Jeff Johnson295189b2012-06-20 16:38:30 -07008128/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008129 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008130 *
8131 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008132void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008133{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008134 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8135
Jeff Johnson295189b2012-06-20 16:38:30 -07008136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008137 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008138
8139 if(NULL == pWdaParams)
8140 {
8141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008142 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008143 VOS_ASSERT(0) ;
8144 return ;
8145 }
8146
8147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8148 vos_mem_free(pWdaParams->wdaMsgParam);
8149 vos_mem_free(pWdaParams);
8150
Jeff Johnson295189b2012-06-20 16:38:30 -07008151 //print a msg, nothing else to do
8152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008153 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008154 return ;
8155}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008156/*
8157 * FUNCTION: WDA_RemBeaconFilterReqCallback
8158 * Free memory.
8159 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8160 */
8161void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8162{
8163 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8164
8165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8166 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8167
8168 if(NULL == pWdaParams)
8169 {
8170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8171 "%s: pWdaParams received NULL", __func__);
8172 VOS_ASSERT(0);
8173 return;
8174 }
8175
8176 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8177 {
8178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8179 vos_mem_free(pWdaParams->wdaMsgParam);
8180 vos_mem_free(pWdaParams);
8181 }
8182
8183 return;
8184}
Jeff Johnson295189b2012-06-20 16:38:30 -07008185 // TODO: PE does not have this feature for now implemented,
8186 // but the support for removing beacon filter exists between
8187 // HAL and FW. This function can be called whenever PE defines
8188 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008189/*
8190 * FUNCTION: WDA_RemBeaconFilterReq
8191 * Request to WDI to send the removal of beacon filtering related information.
8192 */
8193VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8194 tRemBeaconFilterMsg* pBeaconFilterInfo)
8195{
8196 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008197 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008198 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8199 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8200 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008201 tWDA_ReqParams *pWdaParams ;
8202
Jeff Johnson295189b2012-06-20 16:38:30 -07008203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008204 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008205 if(NULL == wdiBeaconFilterInfo)
8206 {
8207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008208 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 VOS_ASSERT(0);
8210 return VOS_STATUS_E_NOMEM;
8211 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008212 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8213 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008214 {
8215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008216 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008217 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008218 vos_mem_free(wdiBeaconFilterInfo);
8219 vos_mem_free(pBeaconFilterInfo);
8220 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008221 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008222
8223 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8224 pBeaconFilterInfo->ucIeCount;
8225 //Fill structure with info contained in the ucRemIeId
8226 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8227 pBeaconFilterInfo->ucRemIeId,
8228 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8229 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8230 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008231
8232 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008233 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008234 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008235 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8236
8237 pWdaParams->pWdaContext = pWDA;
8238
Jeff Johnson43971f52012-07-17 12:26:56 -07008239 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008240 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008241 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008242 {
8243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8244 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008245 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8247 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008248 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008249 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008250 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008251}
Jeff Johnson295189b2012-06-20 16:38:30 -07008252/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008253 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008254 *
8255 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008256void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008257{
8258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008260 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 if(NULL == pWdaParams)
8262 {
8263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008264 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008265 VOS_ASSERT(0) ;
8266 return ;
8267 }
8268
8269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8270 vos_mem_free(pWdaParams) ;
8271
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 return ;
8273}
Jeff Johnson295189b2012-06-20 16:38:30 -07008274/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008275 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8276 * Free memory.
8277 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8278 */
8279void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8280{
8281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8282
8283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8284 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8285
8286 if(NULL == pWdaParams)
8287 {
8288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8289 "%s: pWdaParams received NULL", __func__);
8290 VOS_ASSERT(0);
8291 return;
8292 }
8293
8294 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8295 {
8296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8297 vos_mem_free(pWdaParams);
8298 }
8299
8300 return;
8301}
8302/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 * FUNCTION: WDA_SetRSSIThresholdsReq
8304 * Request to WDI to set the RSSI thresholds (sta mode).
8305 */
8306VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8307{
8308 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008309 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 tWDA_CbContext *pWDA = NULL ;
8311 v_PVOID_t pVosContext = NULL;
8312 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8313 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8314 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8315 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008317 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 if(NULL == wdiRSSIThresholdsInfo)
8319 {
8320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 VOS_ASSERT(0);
8323 return VOS_STATUS_E_NOMEM;
8324 }
8325 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8326 if(NULL == pWdaParams)
8327 {
8328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008329 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 VOS_ASSERT(0);
8331 vos_mem_free(wdiRSSIThresholdsInfo);
8332 return VOS_STATUS_E_NOMEM;
8333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008334 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8336 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8337 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008338 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8339 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8340 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008341 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8342 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8343 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008344 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8345 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8347 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8348
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 /* Store param pointer as passed in by caller */
8350 /* store Params pass it to WDI */
8351 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8352 pWdaParams->pWdaContext = pWDA;
8353 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008354 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008355 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008356 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008357 {
8358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8359 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008360 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8362 vos_mem_free(pWdaParams) ;
8363 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008364 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008365
8366}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008367/*
Yue Madb90ac12013-04-04 13:39:13 -07008368 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 *
8370 */
Yue Madb90ac12013-04-04 13:39:13 -07008371void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008372{
8373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8374
8375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008376 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 if(NULL == pWdaParams)
8378 {
8379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008380 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 VOS_ASSERT(0) ;
8382 return ;
8383 }
8384
8385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8386 vos_mem_free(pWdaParams->wdaMsgParam);
8387 vos_mem_free(pWdaParams) ;
8388
8389 //print a msg, nothing else to do
8390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008391 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 return ;
8393}
Jeff Johnson295189b2012-06-20 16:38:30 -07008394/*
Yue Madb90ac12013-04-04 13:39:13 -07008395 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008396 * Free memory.
8397 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008398 */
8399void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8400{
8401 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8402
8403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8404 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8405
8406 if(NULL == pWdaParams)
8407 {
8408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8409 "%s: Invalid pWdaParams pointer", __func__);
8410 VOS_ASSERT(0);
8411 return;
8412 }
8413
8414 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8415 {
8416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8417 vos_mem_free(pWdaParams->wdaMsgParam);
8418 vos_mem_free(pWdaParams);
8419 }
8420
8421 return;
8422}
8423/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008424 * FUNCTION: WDA_ProcessHostOffloadReq
8425 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8426 * to broadcast traffic (sta mode).
8427 */
8428VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8429 tSirHostOffloadReq *pHostOffloadParams)
8430{
8431 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008432 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8434 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8435 sizeof(WDI_HostOffloadReqParamsType)) ;
8436 tWDA_ReqParams *pWdaParams ;
8437
8438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008439 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008440
8441 if(NULL == wdiHostOffloadInfo)
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);
8446 return VOS_STATUS_E_NOMEM;
8447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008448 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8449 if(NULL == pWdaParams)
8450 {
8451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008453 VOS_ASSERT(0);
8454 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008455 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008456 return VOS_STATUS_E_NOMEM;
8457 }
8458
8459 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8460 pHostOffloadParams->offloadType;
8461 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8462 pHostOffloadParams->enableOrDisable;
8463
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008464 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8465 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8466
Jeff Johnson295189b2012-06-20 16:38:30 -07008467 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8468 {
8469 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8470 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8471 pHostOffloadParams->params.hostIpv4Addr,
8472 4);
8473 break;
8474 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8475 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8476 pHostOffloadParams->params.hostIpv6Addr,
8477 16);
8478 break;
8479 case SIR_IPV6_NS_OFFLOAD:
8480 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8481 pHostOffloadParams->params.hostIpv6Addr,
8482 16);
8483
8484#ifdef WLAN_NS_OFFLOAD
8485 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8486 {
8487 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8488 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8489 16);
8490 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8491 }
8492 else
8493 {
8494 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8495 }
8496
8497 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8498 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8499 16);
8500 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8501 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8502 6);
8503
8504 //Only two are supported so let's go through them without a loop
8505 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8506 {
8507 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8508 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8509 16);
8510 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8511 }
8512 else
8513 {
8514 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8515 }
8516
8517 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8518 {
8519 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8520 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8521 16);
8522 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8523 }
8524 else
8525 {
8526 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8527 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308528 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8529 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008530 break;
8531#endif //WLAN_NS_OFFLOAD
8532 default:
8533 {
8534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8535 "No Handling for Offload Type %x in WDA "
8536 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8537 //WDA_VOS_ASSERT(0) ;
8538 }
8539 }
Yue Madb90ac12013-04-04 13:39:13 -07008540 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8541 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008542
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008544 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008545 /* store Params pass it to WDI */
8546 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8547 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008548
Jeff Johnson295189b2012-06-20 16:38:30 -07008549
Jeff Johnson43971f52012-07-17 12:26:56 -07008550 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008551 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008552
Jeff Johnson43971f52012-07-17 12:26:56 -07008553 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008554 {
8555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8556 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008557 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8559 vos_mem_free(pWdaParams->wdaMsgParam);
8560 vos_mem_free(pWdaParams) ;
8561 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008562 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008563
8564}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008565/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008566 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 *
8568 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008569void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008570{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008571 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8572
Jeff Johnson295189b2012-06-20 16:38:30 -07008573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008574 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008575
8576 if(NULL == pWdaParams)
8577 {
8578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008579 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008580 VOS_ASSERT(0) ;
8581 return ;
8582 }
8583
8584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8585 vos_mem_free(pWdaParams->wdaMsgParam);
8586 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008587
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 //print a msg, nothing else to do
8589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008590 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 return ;
8592}
Jeff Johnson295189b2012-06-20 16:38:30 -07008593/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008594 * FUNCTION: WDA_KeepAliveReqCallback
8595 * Free memory.
8596 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8597 */
8598void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8599{
8600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8601
8602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8603 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8604
8605 if(NULL == pWdaParams)
8606 {
8607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8608 "%s: pWdaParams received NULL", __func__);
8609 VOS_ASSERT(0);
8610 return;
8611 }
8612
8613 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8614 {
8615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8616 vos_mem_free(pWdaParams->wdaMsgParam);
8617 vos_mem_free(pWdaParams);
8618 }
8619
8620 return;
8621}
8622/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008623 * FUNCTION: WDA_ProcessKeepAliveReq
8624 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8625 * wakeup due to broadcast traffic (sta mode).
8626 */
8627VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8628 tSirKeepAliveReq *pKeepAliveParams)
8629{
8630 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008631 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8633 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8634 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008635 tWDA_ReqParams *pWdaParams;
8636
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008638 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008639 if(NULL == wdiKeepAliveInfo)
8640 {
8641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008642 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008643 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008644 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008645 return VOS_STATUS_E_NOMEM;
8646 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008647
8648 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8649 if(NULL == pWdaParams)
8650 {
8651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008652 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008653 VOS_ASSERT(0);
8654 vos_mem_free(wdiKeepAliveInfo);
8655 vos_mem_free(pKeepAliveParams);
8656 return VOS_STATUS_E_NOMEM;
8657 }
8658
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8660 pKeepAliveParams->packetType;
8661 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8662 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008663
8664 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8665 pKeepAliveParams->bssId,
8666 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008667
8668 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8669 {
8670 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8671 pKeepAliveParams->hostIpv4Addr,
8672 SIR_IPV4_ADDR_LEN);
8673 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8674 pKeepAliveParams->destIpv4Addr,
8675 SIR_IPV4_ADDR_LEN);
8676 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8677 pKeepAliveParams->destMacAddr,
8678 SIR_MAC_ADDR_LEN);
8679 }
8680 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8681 {
8682 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8683 SIR_IPV4_ADDR_LEN,
8684 0);
8685 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8686 SIR_IPV4_ADDR_LEN,
8687 0);
8688 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8689 SIR_MAC_ADDR_LEN,
8690 0);
8691 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008692 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8693 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008694
Jeff Johnson295189b2012-06-20 16:38:30 -07008695 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008696 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008697 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008698 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8699 pWdaParams->pWdaContext = pWDA;
8700
Jeff Johnson295189b2012-06-20 16:38:30 -07008701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8702 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8703 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8704 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8705 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8707 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8708 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8709 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8710 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8712 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8713 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8714 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8715 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8716 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8717 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8718 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8720 "TimePeriod %d PacketType %d",
8721 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8722 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008723 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008724 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008725
Jeff Johnson43971f52012-07-17 12:26:56 -07008726 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008727 {
8728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8729 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008730 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8732 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008733 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008735 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008736
8737}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008738/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008739 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 *
8741 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008742void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008743 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8744 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008745{
8746 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008748 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008749 if(NULL == pWdaParams)
8750 {
8751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008752 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 VOS_ASSERT(0) ;
8754 return ;
8755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8757 vos_mem_free(pWdaParams->wdaMsgParam);
8758 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 return ;
8760}
Jeff Johnson295189b2012-06-20 16:38:30 -07008761/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008762 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8763 * Free memory.
8764 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8765 */
8766void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8767{
8768 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8769
8770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8771 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8772
8773 if(NULL == pWdaParams)
8774 {
8775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8776 "%s: pWdaParams received NULL", __func__);
8777 VOS_ASSERT(0);
8778 return;
8779 }
8780
8781 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8782 {
8783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8784 vos_mem_free(pWdaParams->wdaMsgParam);
8785 vos_mem_free(pWdaParams);
8786 }
8787
8788 return;
8789}
8790
8791/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8793 * Request to WDI to add WOWL Bcast pattern
8794 */
8795VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8796 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8797{
8798 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008799 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8801 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8802 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8803 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008805 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008806 if(NULL == wdiWowlAddBcPtrnInfo)
8807 {
8808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008809 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008810 VOS_ASSERT(0);
8811 return VOS_STATUS_E_NOMEM;
8812 }
8813 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8814 if(NULL == pWdaParams)
8815 {
8816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008817 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 VOS_ASSERT(0);
8819 vos_mem_free(wdiWowlAddBcPtrnInfo);
8820 return VOS_STATUS_E_NOMEM;
8821 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008822 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8823 pWowlAddBcPtrnParams->ucPatternId;
8824 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8825 pWowlAddBcPtrnParams->ucPatternByteOffset;
8826 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8827 pWowlAddBcPtrnParams->ucPatternMaskSize;
8828 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8829 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008830 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8831 {
8832 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8833 pWowlAddBcPtrnParams->ucPattern,
8834 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8835 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8836 pWowlAddBcPtrnParams->ucPatternMask,
8837 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8838 }
8839 else
8840 {
8841 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8842 pWowlAddBcPtrnParams->ucPattern,
8843 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8844 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8845 pWowlAddBcPtrnParams->ucPatternMask,
8846 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8847
8848 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8849 pWowlAddBcPtrnParams->ucPatternExt,
8850 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8851 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8852 pWowlAddBcPtrnParams->ucPatternMaskExt,
8853 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8854 }
8855
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008856 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8857 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8858
Yue Ma7f44bbe2013-04-12 11:47:39 -07008859 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
8860 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008861 /* Store param pointer as passed in by caller */
8862 /* store Params pass it to WDI */
8863 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8864 pWdaParams->pWdaContext = pWDA;
8865 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008866 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008867 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008868 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008869 {
8870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8871 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008872 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008873 vos_mem_free(pWdaParams->wdaMsgParam) ;
8874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8875 vos_mem_free(pWdaParams) ;
8876 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008877 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008878
8879}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008880/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008881 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 *
8883 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008884void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008885 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8886 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008887{
8888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008890 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008891 if(NULL == pWdaParams)
8892 {
8893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008894 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008895 VOS_ASSERT(0) ;
8896 return ;
8897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8899 vos_mem_free(pWdaParams->wdaMsgParam);
8900 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008901 return ;
8902}
Jeff Johnson295189b2012-06-20 16:38:30 -07008903/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008904 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8905 * Free memory.
8906 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
8907 */
8908void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8909{
8910 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8911
8912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8913 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8914
8915 if(NULL == pWdaParams)
8916 {
8917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8918 "%s: pWdaParams received NULL", __func__);
8919 VOS_ASSERT(0);
8920 return;
8921 }
8922
8923 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8924 {
8925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8926 vos_mem_free(pWdaParams->wdaMsgParam);
8927 vos_mem_free(pWdaParams);
8928 }
8929
8930 return;
8931}
8932/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8934 * Request to WDI to delete WOWL Bcast pattern
8935 */
8936VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8937 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8938{
8939 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008940 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008941 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8942 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8943 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8944 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008946 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008947 if(NULL == wdiWowlDelBcPtrnInfo)
8948 {
8949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008951 VOS_ASSERT(0);
8952 return VOS_STATUS_E_NOMEM;
8953 }
8954 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8955 if(NULL == pWdaParams)
8956 {
8957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 VOS_ASSERT(0);
8960 vos_mem_free(wdiWowlDelBcPtrnInfo);
8961 return VOS_STATUS_E_NOMEM;
8962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008963 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8964 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008965
8966 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8967 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8968
Yue Ma7f44bbe2013-04-12 11:47:39 -07008969 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
8970 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008971 /* Store param pointer as passed in by caller */
8972 /* store Params pass it to WDI */
8973 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8974 pWdaParams->pWdaContext = pWDA;
8975 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008976 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008977 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008978 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008979 {
8980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8981 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008982 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 vos_mem_free(pWdaParams->wdaMsgParam) ;
8984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8985 vos_mem_free(pWdaParams) ;
8986 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008987 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008988
8989}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008990/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008991 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 *
8993 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008994void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008995{
8996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8997 tWDA_CbContext *pWDA;
8998 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009000 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009001 if(NULL == pWdaParams)
9002 {
9003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009004 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009005 VOS_ASSERT(0) ;
9006 return ;
9007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009008 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9009 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9010
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009011 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9012
Jeff Johnson295189b2012-06-20 16:38:30 -07009013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9014 vos_mem_free(pWdaParams) ;
9015
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009016 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009017 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009019 return ;
9020}
Jeff Johnson295189b2012-06-20 16:38:30 -07009021/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009022 * FUNCTION: WDA_WowlEnterReqCallback
9023 * Free memory and send WOWL Enter RSP back to PE.
9024 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9025 */
9026void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9027{
9028 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9029 tWDA_CbContext *pWDA;
9030 tSirHalWowlEnterParams *pWowlEnterParams;
9031
9032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9033 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9034
9035 if(NULL == pWdaParams)
9036 {
9037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9038 "%s: pWdaParams received NULL", __func__);
9039 VOS_ASSERT(0);
9040 return;
9041 }
9042
9043 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9044 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9045 pWowlEnterParams->status = wdiStatus;
9046
9047 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9048 {
9049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9050 vos_mem_free(pWdaParams);
9051 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9052 }
9053
9054 return;
9055}
9056/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009057 * FUNCTION: WDA_ProcessWowlEnterReq
9058 * Request to WDI to enter WOWL
9059 */
9060VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9061 tSirHalWowlEnterParams *pWowlEnterParams)
9062{
9063 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009064 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009065 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9066 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9067 sizeof(WDI_WowlEnterReqParamsType)) ;
9068 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009070 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 if(NULL == wdiWowlEnterInfo)
9072 {
9073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009074 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 VOS_ASSERT(0);
9076 return VOS_STATUS_E_NOMEM;
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 VOS_ASSERT(0);
9084 vos_mem_free(wdiWowlEnterInfo);
9085 return VOS_STATUS_E_NOMEM;
9086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009087 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9088 pWowlEnterParams->magicPtrn,
9089 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009090 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9091 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009092 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9093 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9095 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9097 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009098 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9099 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009100 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9101 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9103 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009104 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9105 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009106#ifdef WLAN_WAKEUP_EVENTS
9107 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9108 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9109
9110 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9111 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9112
9113 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9114 pWowlEnterParams->ucWowNetScanOffloadMatch;
9115
9116 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9117 pWowlEnterParams->ucWowGTKRekeyError;
9118
9119 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9120 pWowlEnterParams->ucWoWBSSConnLoss;
9121#endif // WLAN_WAKEUP_EVENTS
9122
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009123 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9124 pWowlEnterParams->bssIdx;
9125
Yue Ma7f44bbe2013-04-12 11:47:39 -07009126 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9127 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009128 /* Store param pointer as passed in by caller */
9129 /* store Params pass it to WDI */
9130 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9131 pWdaParams->pWdaContext = pWDA;
9132 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009133 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009134 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009135 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009136 {
9137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9138 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009139 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009140 vos_mem_free(pWdaParams->wdaMsgParam) ;
9141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9142 vos_mem_free(pWdaParams) ;
9143 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009144 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009145
9146}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009147/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009148 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009149 *
9150 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009151void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009152{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009153 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9154 tWDA_CbContext *pWDA;
9155 tSirHalWowlExitParams *pWowlExitParams;
9156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009157 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009158 if(NULL == pWdaParams)
9159 {
9160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009161 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009162 VOS_ASSERT(0) ;
9163 return ;
9164 }
9165 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9166 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9167
9168 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009169 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009170
9171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9172 vos_mem_free(pWdaParams) ;
9173
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009175 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009176 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009177 return ;
9178}
Jeff Johnson295189b2012-06-20 16:38:30 -07009179/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009180 * FUNCTION: WDA_WowlExitReqCallback
9181 * Free memory and send WOWL Exit RSP back to PE.
9182 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9183 */
9184void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9185{
9186 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9187 tWDA_CbContext *pWDA;
9188 tSirHalWowlExitParams *pWowlExitParams;
9189
9190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9191 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9192
9193 if(NULL == pWdaParams)
9194 {
9195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9196 "%s: pWdaParams received NULL", __func__);
9197 VOS_ASSERT(0);
9198 return;
9199 }
9200
9201 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9202 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9203 pWowlExitParams->status = wdiStatus;
9204
9205 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9206 {
9207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9208 vos_mem_free(pWdaParams);
9209 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9210 }
9211
9212 return;
9213}
9214/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009215 * FUNCTION: WDA_ProcessWowlExitReq
9216 * Request to WDI to add WOWL Bcast pattern
9217 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009218VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9219 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009220{
9221 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009222 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009223 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9224 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9225 sizeof(WDI_WowlExitReqParamsType)) ;
9226 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009228 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009229 if(NULL == wdiWowlExitInfo)
9230 {
9231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009232 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009233 VOS_ASSERT(0);
9234 return VOS_STATUS_E_NOMEM;
9235 }
9236 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9237 if(NULL == pWdaParams)
9238 {
9239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009240 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009241 VOS_ASSERT(0);
9242 vos_mem_free(wdiWowlExitInfo);
9243 return VOS_STATUS_E_NOMEM;
9244 }
9245
9246 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9247 pWowlExitParams->bssIdx;
9248
Yue Ma7f44bbe2013-04-12 11:47:39 -07009249 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9250 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009251
9252 /* Store param pointer as passed in by caller */
9253 /* store Params pass it to WDI */
9254 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9255 pWdaParams->pWdaContext = pWDA;
9256 pWdaParams->wdaMsgParam = pWowlExitParams;
9257
9258 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009259 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009260
Jeff Johnson43971f52012-07-17 12:26:56 -07009261 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 {
9263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9264 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009265 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9267 vos_mem_free(pWdaParams->wdaMsgParam);
9268 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009270 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009271}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009272/*
9273 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9274 * Request to WDI to determine whether a given station is capable of
9275 * using HW-based frame translation
9276 */
9277v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9278 tANI_U8 staIdx)
9279{
9280 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9281}
Jeff Johnson295189b2012-06-20 16:38:30 -07009282/*
9283 * FUNCTION: WDA_NvDownloadReqCallback
9284 * send NV Download RSP back to PE
9285 */
9286void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9287 void* pUserData)
9288{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009289
9290 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9291 tWDA_CbContext *pWDA;
9292
Jeff Johnson295189b2012-06-20 16:38:30 -07009293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009294 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009295
9296 if(NULL == pWdaParams)
9297 {
9298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009299 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009300 VOS_ASSERT(0) ;
9301 return ;
9302 }
9303
9304 pWDA = pWdaParams->pWdaContext;
9305
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9308 vos_mem_free(pWdaParams);
9309
Jeff Johnson295189b2012-06-20 16:38:30 -07009310 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009311 return ;
9312}
Jeff Johnson295189b2012-06-20 16:38:30 -07009313/*
9314 * FUNCTION: WDA_ProcessNvDownloadReq
9315 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9316 */
9317VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9318{
9319 /* Initialize the local Variables*/
9320 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9321 v_VOID_t *pNvBuffer=NULL;
9322 v_SIZE_t bufferSize = 0;
9323 WDI_Status status = WDI_STATUS_E_FAILURE;
9324 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009325 tWDA_ReqParams *pWdaParams ;
9326
Jeff Johnson295189b2012-06-20 16:38:30 -07009327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009328 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009329 if(NULL == pWDA)
9330 {
9331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009332 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009333 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009334 return VOS_STATUS_E_FAILURE;
9335 }
9336
9337 /* Get the NV structure base address and size from VOS */
9338 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009339 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9340 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 if(NULL == wdiNvDownloadReqParam)
9342 {
9343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 VOS_ASSERT(0);
9346 return VOS_STATUS_E_NOMEM;
9347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 /* Copy Params to wdiNvDownloadReqParam*/
9349 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9350 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009351
9352 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9353 if(NULL == pWdaParams)
9354 {
9355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009356 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009357 VOS_ASSERT(0);
9358 vos_mem_free(wdiNvDownloadReqParam);
9359 return VOS_STATUS_E_NOMEM;
9360 }
9361
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009363 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9364 pWdaParams->wdaMsgParam = NULL;
9365 pWdaParams->pWdaContext = pWDA;
9366
9367
Jeff Johnson295189b2012-06-20 16:38:30 -07009368 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009369
Jeff Johnson295189b2012-06-20 16:38:30 -07009370 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009371 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9372
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 if(IS_WDI_STATUS_FAILURE(status))
9374 {
9375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9376 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9378 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009381}
9382/*
9383 * FUNCTION: WDA_FlushAcReqCallback
9384 * send Flush AC RSP back to TL
9385 */
9386void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9387{
9388 vos_msg_t wdaMsg = {0} ;
9389 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9390 tFlushACReq *pFlushACReqParams;
9391 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009393 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009394 if(NULL == pWdaParams)
9395 {
9396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009397 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009398 VOS_ASSERT(0) ;
9399 return ;
9400 }
9401
9402 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9403 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9404 if(NULL == pFlushACRspParams)
9405 {
9406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009407 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009409 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 return ;
9411 }
9412 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9413 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9414 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9415 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9416 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009417 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009418 vos_mem_free(pWdaParams->wdaMsgParam) ;
9419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9420 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009421 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9422 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9423 // POST message to TL
9424 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9425
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 return ;
9427}
Jeff Johnson295189b2012-06-20 16:38:30 -07009428/*
9429 * FUNCTION: WDA_ProcessFlushAcReq
9430 * Request to WDI to Update the DELBA REQ params.
9431 */
9432VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9433 tFlushACReq *pFlushAcReqParams)
9434{
9435 WDI_Status status = WDI_STATUS_SUCCESS ;
9436 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9437 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9438 sizeof(WDI_FlushAcReqParamsType)) ;
9439 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 if(NULL == wdiFlushAcReqParam)
9441 {
9442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009443 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 VOS_ASSERT(0);
9445 return VOS_STATUS_E_NOMEM;
9446 }
9447 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9448 if(NULL == pWdaParams)
9449 {
9450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009452 VOS_ASSERT(0);
9453 vos_mem_free(wdiFlushAcReqParam);
9454 return VOS_STATUS_E_NOMEM;
9455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009458 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9459 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9460 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9461 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009462 /* Store Flush AC pointer, as this will be used for response */
9463 /* store Params pass it to WDI */
9464 pWdaParams->pWdaContext = pWDA;
9465 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9466 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009467 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9468 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009469 if(IS_WDI_STATUS_FAILURE(status))
9470 {
9471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9472 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9473 vos_mem_free(pWdaParams->wdaMsgParam) ;
9474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9475 vos_mem_free(pWdaParams) ;
9476 //TODO: respond to TL with failure
9477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009478 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009479}
Jeff Johnson295189b2012-06-20 16:38:30 -07009480/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009481 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 *
9483 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009484void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009485{
9486 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9487 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009488 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009489
9490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009491 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 if(NULL == pWdaParams)
9493 {
9494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009495 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 VOS_ASSERT(0) ;
9497 return ;
9498 }
9499 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9500 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9501 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9502 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9503 {
9504 pWDA->wdaAmpSessionOn = VOS_FALSE;
9505 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009506 vos_mem_free(pWdaParams->wdaMsgParam) ;
9507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9508 vos_mem_free(pWdaParams) ;
9509 /*
9510 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9511 * param here
9512 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009513 return ;
9514}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009515/*
9516 * FUNCTION: WDA_BtAmpEventReqCallback
9517 * Free memory.
9518 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9519 */
9520void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9521{
9522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9523 tWDA_CbContext *pWDA;
9524 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009525
Yue Ma7f44bbe2013-04-12 11:47:39 -07009526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9527 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9528
9529 if(NULL == pWdaParams)
9530 {
9531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9532 "%s: pWdaParams received NULL", __func__);
9533 VOS_ASSERT(0);
9534 return;
9535 }
9536
9537 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9538 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9539
9540 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9541 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9542 {
9543 pWDA->wdaAmpSessionOn = VOS_FALSE;
9544 }
9545
9546 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9547 {
9548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9549 vos_mem_free(pWdaParams->wdaMsgParam);
9550 vos_mem_free(pWdaParams);
9551 }
9552
9553 return;
9554}
Jeff Johnson295189b2012-06-20 16:38:30 -07009555/*
9556 * FUNCTION: WDA_ProcessBtAmpEventReq
9557 * Request to WDI to Update with BT AMP events.
9558 */
9559VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9560 tSmeBtAmpEvent *pBtAmpEventParams)
9561{
9562 WDI_Status status = WDI_STATUS_SUCCESS ;
9563 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9564 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9565 sizeof(WDI_BtAmpEventParamsType)) ;
9566 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009568 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009569 if(NULL == wdiBtAmpEventParam)
9570 {
9571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009572 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009573 VOS_ASSERT(0);
9574 return VOS_STATUS_E_NOMEM;
9575 }
9576 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9577 if(NULL == pWdaParams)
9578 {
9579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 VOS_ASSERT(0);
9582 vos_mem_free(wdiBtAmpEventParam);
9583 return VOS_STATUS_E_NOMEM;
9584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009585 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9586 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009587 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9588 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009589 /* Store BT AMP event pointer, as this will be used for response */
9590 /* store Params pass it to WDI */
9591 pWdaParams->pWdaContext = pWDA;
9592 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9593 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009594 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009595 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009596 if(IS_WDI_STATUS_FAILURE(status))
9597 {
9598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9599 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9600 vos_mem_free(pWdaParams->wdaMsgParam) ;
9601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9602 vos_mem_free(pWdaParams) ;
9603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9605 {
9606 pWDA->wdaAmpSessionOn = VOS_TRUE;
9607 }
9608 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009609}
9610
Jeff Johnson295189b2012-06-20 16:38:30 -07009611/*
9612 * FUNCTION: WDA_FTMCommandReqCallback
9613 * Handle FTM CMD response came from HAL
9614 * Route responce to HDD FTM
9615 */
9616void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9617 void *usrData)
9618{
9619 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9621 {
9622 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309623 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009624 return;
9625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009626 /* Release Current FTM Command Request */
9627 vos_mem_free(pWDA->wdaFTMCmdReq);
9628 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009629 /* Post FTM Responce to HDD FTM */
9630 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009631 return;
9632}
Jeff Johnson295189b2012-06-20 16:38:30 -07009633/*
9634 * FUNCTION: WDA_ProcessFTMCommand
9635 * Send FTM command to WDI
9636 */
9637VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9638 tPttMsgbuffer *pPTTFtmCmd)
9639{
9640 WDI_Status status = WDI_STATUS_SUCCESS;
9641 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009642 ftmCMDReq = (WDI_FTMCommandReqType *)
9643 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9644 if(NULL == ftmCMDReq)
9645 {
9646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9647 "WDA FTM Command buffer alloc fail");
9648 return VOS_STATUS_E_NOMEM;
9649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9651 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009652 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009653 /* Send command to WDI */
9654 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009655 return status;
9656}
Jeff Johnsone7245742012-09-05 17:12:55 -07009657#ifdef FEATURE_OEM_DATA_SUPPORT
9658/*
9659 * FUNCTION: WDA_StartOemDataReqCallback
9660 *
9661 */
9662void WDA_StartOemDataReqCallback(
9663 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9664 void* pUserData)
9665{
9666 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9668 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009669 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009670
Jeff Johnsone7245742012-09-05 17:12:55 -07009671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009672 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009673
9674 if(NULL == pWdaParams)
9675 {
9676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009677 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009678 VOS_ASSERT(0) ;
9679 return ;
9680 }
9681 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9682
Jeff Johnsone7245742012-09-05 17:12:55 -07009683 if(NULL == pWDA)
9684 {
9685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009686 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009687 VOS_ASSERT(0);
9688 return ;
9689 }
9690
9691 /*
9692 * Allocate memory for response params sent to PE
9693 */
9694 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9695
9696 // Check if memory is allocated for OemdataMeasRsp Params.
9697 if(NULL == pOemDataRspParams)
9698 {
9699 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9700 "OEM DATA WDA callback alloc fail");
9701 VOS_ASSERT(0) ;
9702 return;
9703 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009704
Jeff Johnsone7245742012-09-05 17:12:55 -07009705 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9707 vos_mem_free(pWdaParams->wdaMsgParam);
9708 vos_mem_free(pWdaParams) ;
9709
Jeff Johnsone7245742012-09-05 17:12:55 -07009710 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009711 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009712 * Also, here success always means that we have atleast one BSSID.
9713 */
9714 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9715
9716 //enable Tx
9717 status = WDA_ResumeDataTx(pWDA);
9718 if(status != VOS_STATUS_SUCCESS)
9719 {
9720 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9721 }
9722 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9723 return ;
9724}
9725/*
9726 * FUNCTION: WDA_ProcessStartOemDataReq
9727 * Send Start Oem Data Req to WDI
9728 */
9729VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9730 tStartOemDataReq *pOemDataReqParams)
9731{
9732 WDI_Status status = WDI_STATUS_SUCCESS;
9733 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009734 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009735
9736 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9737
9738 if(NULL == wdiOemDataReqParams)
9739 {
9740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009741 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009742 VOS_ASSERT(0);
9743 return VOS_STATUS_E_NOMEM;
9744 }
9745
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009746 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9747 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9748 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9749 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009750
9751 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9752
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009753 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9754 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009755 {
9756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009758 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009759 vos_mem_free(pOemDataReqParams);
9760 VOS_ASSERT(0);
9761 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009762 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009763
Bernald44a1ae2013-01-09 08:30:39 -08009764 pWdaParams->pWdaContext = (void*)pWDA;
9765 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9766 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009767
9768 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9769 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009770
9771 if(IS_WDI_STATUS_FAILURE(status))
9772 {
9773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9774 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9776 vos_mem_free(pWdaParams->wdaMsgParam);
9777 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009778 }
9779 return CONVERT_WDI2VOS_STATUS(status) ;
9780}
9781#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009782/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009783 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009784 *
9785 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009786void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009787{
9788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009790 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009791 if(NULL == pWdaParams)
9792 {
9793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009794 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009795 VOS_ASSERT(0) ;
9796 return ;
9797 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009798
9799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9800 vos_mem_free(pWdaParams->wdaMsgParam);
9801 vos_mem_free(pWdaParams);
9802
9803 return ;
9804}
9805/*
9806 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9807 * Free memory.
9808 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
9809 */
9810void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
9811{
9812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9813
9814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9815 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9816
9817 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 {
Yue Ma7f44bbe2013-04-12 11:47:39 -07009819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9820 "%s: pWdaParams received NULL", __func__);
9821 VOS_ASSERT(0);
9822 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009823 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009824
9825 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009826 {
9827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009828 vos_mem_free(pWdaParams->wdaMsgParam);
9829 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009830 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009831
9832 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009833}
Jeff Johnson295189b2012-06-20 16:38:30 -07009834#ifdef WLAN_FEATURE_GTK_OFFLOAD
9835/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009836 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009837 *
9838 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009839void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009840 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009841{
9842 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9843
9844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009845 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009846
9847 VOS_ASSERT(NULL != pWdaParams);
9848
9849 vos_mem_free(pWdaParams->wdaMsgParam) ;
9850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9851 vos_mem_free(pWdaParams) ;
9852
9853 //print a msg, nothing else to do
9854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009855 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009856
9857 return ;
9858}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009859/*
9860 * FUNCTION: WDA_GTKOffloadReqCallback
9861 * Free memory.
9862 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
9863 */
9864void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9865{
9866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009867
Yue Ma7f44bbe2013-04-12 11:47:39 -07009868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9869 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9870
9871 if(NULL == pWdaParams)
9872 {
9873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9874 "%s: pWdaParams received NULL", __func__);
9875 VOS_ASSERT(0);
9876 return;
9877 }
9878
9879 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9880 {
9881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9882 vos_mem_free(pWdaParams->wdaMsgParam);
9883 vos_mem_free(pWdaParams);
9884 }
9885
9886 return;
9887}
Jeff Johnson295189b2012-06-20 16:38:30 -07009888/*
9889 * FUNCTION: WDA_ProcessGTKOffloadReq
9890 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9891 * to broadcast traffic (sta mode).
9892 */
9893VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9894 tpSirGtkOffloadParams pGtkOffloadParams)
9895{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309896 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009897 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9898 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9899 sizeof(WDI_GtkOffloadReqMsg)) ;
9900 tWDA_ReqParams *pWdaParams ;
9901
9902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009903 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009904
9905 if(NULL == wdiGtkOffloadReqMsg)
9906 {
9907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009908 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009909 VOS_ASSERT(0);
9910 return VOS_STATUS_E_NOMEM;
9911 }
9912
9913 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9914 if(NULL == pWdaParams)
9915 {
9916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009917 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009918 VOS_ASSERT(0);
9919 vos_mem_free(wdiGtkOffloadReqMsg);
9920 return VOS_STATUS_E_NOMEM;
9921 }
9922
9923 //
9924 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9925 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009926
9927 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309928 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009929
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9931 // Copy KCK
9932 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9933 // Copy KEK
9934 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9935 // Copy KeyReplayCounter
9936 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9937 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9938
Yue Ma7f44bbe2013-04-12 11:47:39 -07009939 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
9940 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009941
Jeff Johnson295189b2012-06-20 16:38:30 -07009942
9943 /* Store Params pass it to WDI */
9944 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
9945 pWdaParams->pWdaContext = pWDA;
9946 /* Store param pointer as passed in by caller */
9947 pWdaParams->wdaMsgParam = pGtkOffloadParams;
9948
Yue Ma7f44bbe2013-04-12 11:47:39 -07009949 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009950
9951 if(IS_WDI_STATUS_FAILURE(status))
9952 {
9953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9954 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
9955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9956 vos_mem_free(pWdaParams->wdaMsgParam);
9957 vos_mem_free(pWdaParams);
9958 }
9959
9960 return CONVERT_WDI2VOS_STATUS(status) ;
9961}
9962
9963/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009964 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009965 *
9966 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009967void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009968 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009969{
9970 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9971 tWDA_CbContext *pWDA;
9972 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -07009973 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009974 vos_msg_t vosMsg;
9975
9976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009977 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009978
9979 VOS_ASSERT(NULL != pWdaParams);
9980
9981 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9982 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
9983
9984 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
9985 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
9986
9987 /* Message Header */
9988 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9989 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
9990
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009991 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
9992 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
9993 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
9994 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
9995 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009996
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309997 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
9998 pwdiGtkOffloadGetInfoRsparams->bssId,
9999 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010000 /* VOS message wrapper */
10001 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10002 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10003 vosMsg.bodyval = 0;
10004
10005 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10006 {
10007 /* free the mem and return */
10008 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10009 }
10010
10011 vos_mem_free(pWdaParams->wdaMsgParam) ;
10012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10013 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010014
10015 return;
10016}
10017/*
10018 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10019 * Free memory and send RSP back to SME.
10020 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10021 */
10022void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10023{
10024 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10025 vos_msg_t vosMsg;
10026
10027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10028 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10029
10030 if(NULL == pWdaParams)
10031 {
10032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10033 "%s: pWdaParams received NULL", __func__);
10034 VOS_ASSERT(0);
10035 return;
10036 }
10037
10038 /* VOS message wrapper */
10039 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10040 vosMsg.bodyptr = NULL;
10041 vosMsg.bodyval = 0;
10042
10043 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10044 {
10045 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10046 vos_mem_free(pWdaParams->wdaMsgParam);
10047 vos_mem_free(pWdaParams);
10048 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10049 }
10050
10051 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010052}
10053#endif
10054
10055/*
10056 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10057 * Request to WDI to set Tx Per Tracking configurations
10058 */
10059VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10060{
10061 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010062 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010063 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10064 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10065 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10066 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010068 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010069 if(NULL == pwdiSetTxPerTrackingReqParams)
10070 {
10071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010072 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010073 vos_mem_free(pTxPerTrackingParams);
10074 VOS_ASSERT(0);
10075 return VOS_STATUS_E_NOMEM;
10076 }
10077 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10078 if(NULL == pWdaParams)
10079 {
10080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010082 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10083 vos_mem_free(pTxPerTrackingParams);
10084 VOS_ASSERT(0);
10085 return VOS_STATUS_E_NOMEM;
10086 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10088 pTxPerTrackingParams->ucTxPerTrackingEnable;
10089 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10090 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10091 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10092 pTxPerTrackingParams->ucTxPerTrackingRatio;
10093 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10094 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010095 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10096 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010097 /* Store param pointer as passed in by caller */
10098 /* store Params pass it to WDI
10099 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10100 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10101 pWdaParams->pWdaContext = pWDA;
10102 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010103 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010104 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010105 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010106 {
10107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10108 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010109 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010110 vos_mem_free(pWdaParams->wdaMsgParam) ;
10111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10112 vos_mem_free(pWdaParams) ;
10113 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010114 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010115
10116}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010117/*
10118 * FUNCTION: WDA_HALDumpCmdCallback
10119 * Send the VOS complete .
10120 */
10121void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10122 void* pUserData)
10123{
10124 tANI_U8 *buffer = NULL;
10125 tWDA_CbContext *pWDA = NULL;
10126 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010127 if(NULL == pWdaParams)
10128 {
10129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010130 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010131 VOS_ASSERT(0) ;
10132 return ;
10133 }
10134
10135 pWDA = pWdaParams->pWdaContext;
10136 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010137 if(wdiRspParams->usBufferLen > 0)
10138 {
10139 /*Copy the Resp data to UMAC supplied buffer*/
10140 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10141 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10143 vos_mem_free(pWdaParams);
10144
10145 /* Indicate VOSS about the start complete */
10146 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010147 return ;
10148}
10149
Jeff Johnson295189b2012-06-20 16:38:30 -070010150/*
10151 * FUNCTION: WDA_ProcessHALDumpCmdReq
10152 * Send Dump command to WDI
10153 */
10154VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10155 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10156 tANI_U32 arg4, tANI_U8 *pBuffer)
10157{
10158 WDI_Status status = WDI_STATUS_SUCCESS;
10159 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10160 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10161 tWDA_ReqParams *pWdaParams ;
10162 pVosContextType pVosContext = NULL;
10163 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010164 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10165 (void *)pMac);
10166
10167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10168 if(NULL == pWdaParams)
10169 {
10170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010171 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010172 return VOS_STATUS_E_NOMEM;
10173 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010174 /* Allocate memory WDI request structure*/
10175 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10176 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10177 if(NULL == wdiHALDumpCmdReqParam)
10178 {
10179 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10180 "WDA HAL DUMP Command buffer alloc fail");
10181 vos_mem_free(pWdaParams);
10182 return WDI_STATUS_E_FAILURE;
10183 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010184 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010185 /* Extract the arguments */
10186 wdiHalDumpCmdInfo->command = cmd;
10187 wdiHalDumpCmdInfo->argument1 = arg1;
10188 wdiHalDumpCmdInfo->argument2 = arg2;
10189 wdiHalDumpCmdInfo->argument3 = arg3;
10190 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010191 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10193
10194 /* Response message will be passed through the buffer */
10195 pWdaParams->wdaMsgParam = (void *)pBuffer;
10196
10197 /* store Params pass it to WDI */
10198 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010199 /* Send command to WDI */
10200 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010201 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010202 if ( vStatus != VOS_STATUS_SUCCESS )
10203 {
10204 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10205 {
10206 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010207 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 }
10209 else
10210 {
10211 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010212 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 }
10214 VOS_ASSERT(0);
10215 }
10216 return status;
10217}
Jeff Johnson295189b2012-06-20 16:38:30 -070010218#ifdef WLAN_FEATURE_GTK_OFFLOAD
10219/*
10220 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10221 * Request to WDI to get GTK Offload Information
10222 */
10223VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10224 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10225{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010226 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10228 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10229 tWDA_ReqParams *pWdaParams ;
10230
10231 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10232 {
10233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010234 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 VOS_ASSERT(0);
10236 return VOS_STATUS_E_NOMEM;
10237 }
10238
10239 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10240 if(NULL == pWdaParams)
10241 {
10242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010243 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010244 VOS_ASSERT(0);
10245 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10246 return VOS_STATUS_E_NOMEM;
10247 }
10248
Yue Ma7f44bbe2013-04-12 11:47:39 -070010249 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10250 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010251
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 /* Store Params pass it to WDI */
10253 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10254 pWdaParams->pWdaContext = pWDA;
10255 /* Store param pointer as passed in by caller */
10256 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10257
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010258 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010259 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010260
Yue Ma7f44bbe2013-04-12 11:47:39 -070010261 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010262
10263 if(IS_WDI_STATUS_FAILURE(status))
10264 {
10265 /* failure returned by WDI API */
10266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10267 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10269 vos_mem_free(pWdaParams) ;
10270 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10271 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10272 }
10273
10274 return CONVERT_WDI2VOS_STATUS(status) ;
10275}
10276#endif // WLAN_FEATURE_GTK_OFFLOAD
10277
10278/*
10279 * -------------------------------------------------------------------------
10280 * DATA interface with WDI for Mgmt Frames
10281 * -------------------------------------------------------------------------
10282 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010283/*
10284 * FUNCTION: WDA_TxComplete
10285 * Callback function for the WDA_TxPacket
10286 */
10287VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10288 VOS_STATUS status )
10289{
10290
10291 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10292 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010293 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010294
10295 if(NULL == wdaContext)
10296 {
10297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10298 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010299 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 VOS_ASSERT(0);
10301 return VOS_STATUS_E_FAILURE;
10302 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010303
10304 /*Check if frame was timed out or not*/
10305 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10306 (v_PVOID_t)&uUserData);
10307
10308 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10309 {
10310 /*Discard frame - no further processing is needed*/
10311 vos_pkt_return_packet(pData);
10312 return VOS_STATUS_SUCCESS;
10313 }
10314
Jeff Johnson295189b2012-06-20 16:38:30 -070010315 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10316 if( NULL!=wdaContext->pTxCbFunc)
10317 {
10318 /*check if packet is freed already*/
10319 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10320 {
10321 wdaContext->pTxCbFunc(pMac, pData);
10322 }
10323 else
10324 {
10325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010326 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010327 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 //Return from here since we reaching here because the packet already timeout
10329 return status;
10330 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010331 }
10332
10333 /*
10334 * Trigger the event to bring the HAL TL Tx complete function to come
10335 * out of wait
10336 * Let the coe above to complete the packet first. When this event is set,
10337 * the thread waiting for the event may run and set Vospacket_freed causing the original
10338 * packet not being freed.
10339 */
10340 status = vos_event_set(&wdaContext->txFrameEvent);
10341 if(!VOS_IS_STATUS_SUCCESS(status))
10342 {
10343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10344 "NEW VOS Event Set failed - status = %d \n", status);
10345 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010346 return status;
10347}
Jeff Johnson295189b2012-06-20 16:38:30 -070010348/*
10349 * FUNCTION: WDA_TxPacket
10350 * Forward TX management frame to WDI
10351 */
10352VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10353 void *pFrmBuf,
10354 tANI_U16 frmLen,
10355 eFrameType frmType,
10356 eFrameTxDir txDir,
10357 tANI_U8 tid,
10358 pWDATxRxCompFunc pCompFunc,
10359 void *pData,
10360 pWDAAckFnTxComp pAckTxComp,
10361 tANI_U8 txFlag)
10362{
10363 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10364 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10365 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10366 tANI_U8 eventIdx = 0;
10367 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10368 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 if((NULL == pWDA)||(NULL == pFrmBuf))
10370 {
10371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010372 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010373 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010374 VOS_ASSERT(0);
10375 return VOS_STATUS_E_FAILURE;
10376 }
10377
10378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010379 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010380 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10381 if(NULL == pMac)
10382 {
10383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010384 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 VOS_ASSERT(0);
10386 return VOS_STATUS_E_FAILURE;
10387 }
10388
10389
10390
10391 /* store the call back function in WDA context */
10392 pWDA->pTxCbFunc = pCompFunc;
10393 /* store the call back for the function of ackTxComplete */
10394 if( pAckTxComp )
10395 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010396 if( NULL != pWDA->pAckTxCbFunc )
10397 {
10398 /* Already TxComp is active no need to active again */
10399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10400 "There is already one request pending for tx complete\n");
10401 pWDA->pAckTxCbFunc( pMac, 0);
10402 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010403
Jeff Johnsone7245742012-09-05 17:12:55 -070010404 if( VOS_STATUS_SUCCESS !=
10405 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10406 {
10407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10408 "Tx Complete timeout Timer Stop Failed ");
10409 }
10410 else
10411 {
10412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010413 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010414 }
10415 }
10416
10417 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
10418 pWDA->pAckTxCbFunc = pAckTxComp;
10419 if( VOS_STATUS_SUCCESS !=
10420 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
10421 {
10422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10423 "Tx Complete Timer Start Failed ");
10424 pWDA->pAckTxCbFunc = NULL;
10425 return eHAL_STATUS_FAILURE;
10426 }
10427 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010428 /* Reset the event to be not signalled */
10429 status = vos_event_reset(&pWDA->txFrameEvent);
10430 if(!VOS_IS_STATUS_SUCCESS(status))
10431 {
10432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10433 "VOS Event reset failed - status = %d\n",status);
10434 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
10435 if( pAckTxComp )
10436 {
10437 pWDA->pAckTxCbFunc = NULL;
10438 if( VOS_STATUS_SUCCESS !=
10439 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10440 {
10441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10442 "Tx Complete timeout Timer Stop Failed ");
10443 }
10444 }
10445 return VOS_STATUS_E_FAILURE;
10446 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010447
10448 /* If Peer Sta mask is set don't overwrite to self sta */
10449 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070010450 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010451 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070010452 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010453 else
10454 {
Ganesh K08bce952012-12-13 15:04:41 -080010455 /* Get system role, use the self station if in unknown role or STA role */
10456 systemRole = wdaGetGlobalSystemRole(pMac);
10457 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
10458 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080010459#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080010460 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010461#endif
Ganesh K08bce952012-12-13 15:04:41 -080010462 ))
10463 {
10464 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
10465 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080010466 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010467
Jeff Johnsone7245742012-09-05 17:12:55 -070010468 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
10469 disassoc frame reaches the HW, HAL has already deleted the peer station */
10470 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070010471 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080010472 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070010473 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010474 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010475 /*Send Probe request frames on self sta idx*/
10476 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070010477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010478 /* Since we donot want probe responses to be retried, send probe responses
10479 through the NO_ACK queues */
10480 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
10481 {
10482 //probe response is sent out using self station and no retries options.
10483 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
10484 }
10485 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
10486 {
10487 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
10488 }
10489 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010490 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
10491
10492 /*Set frame tag to 0
10493 We will use the WDA user data in order to tag a frame as expired*/
10494 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10495 (v_PVOID_t)0);
10496
10497
10498 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
10499 frmLen, ucTypeSubType, tid,
10500 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
10501 {
10502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10503 "Sending Mgmt Frame failed - status = %d\n", status);
10504 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
10505 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
10506 if( pAckTxComp )
10507 {
10508 pWDA->pAckTxCbFunc = NULL;
10509 if( VOS_STATUS_SUCCESS !=
10510 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10511 {
10512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10513 "Tx Complete timeout Timer Stop Failed ");
10514 }
10515 }
10516 return VOS_STATUS_E_FAILURE;
10517 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010518 /*
10519 * Wait for the event to be set by the TL, to get the response of TX
10520 * complete, this event should be set by the Callback function called by TL
10521 */
10522 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
10523 &eventIdx);
10524 if(!VOS_IS_STATUS_SUCCESS(status))
10525 {
10526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10527 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010528 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010529 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
10530 after the packet gets completed(packet freed once)*/
10531
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010532 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070010533 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010534
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010535 /*Tag Frame as timed out for later deletion*/
10536 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10537 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
10538
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 /* check whether the packet was freed already,so need not free again when
10540 * TL calls the WDA_Txcomplete routine
10541 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010542 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
10543 /*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 -070010544 {
10545 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010546 } */
10547
Jeff Johnson295189b2012-06-20 16:38:30 -070010548 if( pAckTxComp )
10549 {
10550 pWDA->pAckTxCbFunc = NULL;
10551 if( VOS_STATUS_SUCCESS !=
10552 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10553 {
10554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10555 "Tx Complete timeout Timer Stop Failed ");
10556 }
10557 }
10558 status = VOS_STATUS_E_FAILURE;
10559 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010560 return status;
10561}
Jeff Johnson295189b2012-06-20 16:38:30 -070010562/*
10563 * FUNCTION: WDA_McProcessMsg
10564 * Trigger DAL-AL to start CFG download
10565 */
10566VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10567{
10568 VOS_STATUS status = VOS_STATUS_SUCCESS;
10569 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010570 if(NULL == pMsg)
10571 {
10572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010573 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010574 VOS_ASSERT(0);
10575 return VOS_STATUS_E_FAILURE;
10576 }
10577
10578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010579 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010580
10581 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10582 if(NULL == pWDA )
10583 {
10584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010585 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010586 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010587 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010588 return VOS_STATUS_E_FAILURE;
10589 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010590 /* Process all the WDA messages.. */
10591 switch( pMsg->type )
10592 {
10593 case WNI_CFG_DNLD_REQ:
10594 {
10595 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010596 /* call WDA complete event if config download success */
10597 if( VOS_IS_STATUS_SUCCESS(status) )
10598 {
10599 vos_WDAComplete_cback(pVosContext);
10600 }
10601 else
10602 {
10603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10604 "WDA Config Download failure" );
10605 }
10606 break ;
10607 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010608 /*
10609 * Init SCAN request from PE, convert it into DAL format
10610 * and send it to DAL
10611 */
10612 case WDA_INIT_SCAN_REQ:
10613 {
10614 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10615 break ;
10616 }
10617 /* start SCAN request from PE */
10618 case WDA_START_SCAN_REQ:
10619 {
10620 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10621 break ;
10622 }
10623 /* end SCAN request from PE */
10624 case WDA_END_SCAN_REQ:
10625 {
10626 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10627 break ;
10628 }
10629 /* end SCAN request from PE */
10630 case WDA_FINISH_SCAN_REQ:
10631 {
10632 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10633 break ;
10634 }
10635 /* join request from PE */
10636 case WDA_CHNL_SWITCH_REQ:
10637 {
10638 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10639 {
10640 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10641 }
10642 else
10643 {
10644 WDA_ProcessChannelSwitchReq(pWDA,
10645 (tSwitchChannelParams*)pMsg->bodyptr) ;
10646 }
10647 break ;
10648 }
10649 /* ADD BSS request from PE */
10650 case WDA_ADD_BSS_REQ:
10651 {
10652 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10653 break ;
10654 }
10655 case WDA_ADD_STA_REQ:
10656 {
10657 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10658 break ;
10659 }
10660 case WDA_DELETE_BSS_REQ:
10661 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010662 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10663 break ;
10664 }
10665 case WDA_DELETE_STA_REQ:
10666 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010667 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10668 break ;
10669 }
10670 case WDA_CONFIG_PARAM_UPDATE_REQ:
10671 {
10672 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10673 break ;
10674 }
10675 case WDA_SET_BSSKEY_REQ:
10676 {
10677 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10678 break ;
10679 }
10680 case WDA_SET_STAKEY_REQ:
10681 {
10682 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10683 break ;
10684 }
10685 case WDA_SET_STA_BCASTKEY_REQ:
10686 {
10687 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10688 break ;
10689 }
10690 case WDA_REMOVE_BSSKEY_REQ:
10691 {
10692 WDA_ProcessRemoveBssKeyReq(pWDA,
10693 (tRemoveBssKeyParams *)pMsg->bodyptr);
10694 break ;
10695 }
10696 case WDA_REMOVE_STAKEY_REQ:
10697 {
10698 WDA_ProcessRemoveStaKeyReq(pWDA,
10699 (tRemoveStaKeyParams *)pMsg->bodyptr);
10700 break ;
10701 }
10702 case WDA_REMOVE_STA_BCASTKEY_REQ:
10703 {
10704 /* TODO: currently UMAC is not sending this request, Add the code for
10705 handling this request when UMAC supports */
10706 break;
10707 }
10708#ifdef FEATURE_WLAN_CCX
10709 case WDA_TSM_STATS_REQ:
10710 {
10711 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10712 break;
10713 }
10714#endif
10715 case WDA_UPDATE_EDCA_PROFILE_IND:
10716 {
10717 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10718 break;
10719 }
10720 case WDA_ADD_TS_REQ:
10721 {
10722 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10723 break;
10724 }
10725 case WDA_DEL_TS_REQ:
10726 {
10727 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
10728 break;
10729 }
10730 case WDA_ADDBA_REQ:
10731 {
10732 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
10733 break;
10734 }
10735 case WDA_DELBA_IND:
10736 {
10737 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
10738 break;
10739 }
10740 case WDA_SET_LINK_STATE:
10741 {
10742 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
10743 break;
10744 }
10745 case WDA_GET_STATISTICS_REQ:
10746 {
10747 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
10748 break;
10749 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080010750#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
10751 case WDA_GET_ROAM_RSSI_REQ:
10752 {
10753 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
10754 break;
10755 }
10756#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010757 case WDA_PWR_SAVE_CFG:
10758 {
10759 if(pWDA->wdaState == WDA_READY_STATE)
10760 {
10761 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
10762 }
10763 else
10764 {
10765 if(NULL != pMsg->bodyptr)
10766 {
10767 vos_mem_free(pMsg->bodyptr);
10768 }
10769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10770 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
10771 }
10772 break;
10773 }
10774 case WDA_ENTER_IMPS_REQ:
10775 {
10776 if(pWDA->wdaState == WDA_READY_STATE)
10777 {
10778 WDA_ProcessEnterImpsReq(pWDA);
10779 }
10780 else
10781 {
10782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10783 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10784 }
10785 break;
10786 }
10787 case WDA_EXIT_IMPS_REQ:
10788 {
10789 if(pWDA->wdaState == WDA_READY_STATE)
10790 {
10791 WDA_ProcessExitImpsReq(pWDA);
10792 }
10793 else
10794 {
10795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10796 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10797 }
10798 break;
10799 }
10800 case WDA_ENTER_BMPS_REQ:
10801 {
10802 if(pWDA->wdaState == WDA_READY_STATE)
10803 {
10804 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
10805 }
10806 else
10807 {
10808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10809 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10810 }
10811 break;
10812 }
10813 case WDA_EXIT_BMPS_REQ:
10814 {
10815 if(pWDA->wdaState == WDA_READY_STATE)
10816 {
10817 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
10818 }
10819 else
10820 {
10821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10822 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10823 }
10824 break;
10825 }
10826 case WDA_ENTER_UAPSD_REQ:
10827 {
10828 if(pWDA->wdaState == WDA_READY_STATE)
10829 {
10830 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
10831 }
10832 else
10833 {
10834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10835 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10836 }
10837 break;
10838 }
10839 case WDA_EXIT_UAPSD_REQ:
10840 {
10841 if(pWDA->wdaState == WDA_READY_STATE)
10842 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010843 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 }
10845 else
10846 {
10847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10848 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10849 }
10850 break;
10851 }
10852 case WDA_UPDATE_UAPSD_IND:
10853 {
10854 if(pWDA->wdaState == WDA_READY_STATE)
10855 {
10856 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
10857 }
10858 else
10859 {
10860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10861 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
10862 }
10863 break;
10864 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010865 case WDA_REGISTER_PE_CALLBACK :
10866 {
10867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10868 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10869 /*TODO: store the PE callback */
10870 /* Do Nothing? MSG Body should be freed at here */
10871 if(NULL != pMsg->bodyptr)
10872 {
10873 vos_mem_free(pMsg->bodyptr);
10874 }
10875 break;
10876 }
10877 case WDA_SYS_READY_IND :
10878 {
10879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10880 "Handling msg type WDA_SYS_READY_IND " );
10881 pWDA->wdaState = WDA_READY_STATE;
10882 if(NULL != pMsg->bodyptr)
10883 {
10884 vos_mem_free(pMsg->bodyptr);
10885 }
10886 break;
10887 }
10888 case WDA_BEACON_FILTER_IND :
10889 {
10890 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
10891 break;
10892 }
10893 case WDA_BTC_SET_CFG:
10894 {
10895 /*TODO: handle this while dealing with BTC */
10896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10897 "Handling msg type WDA_BTC_SET_CFG " );
10898 /* Do Nothing? MSG Body should be freed at here */
10899 if(NULL != pMsg->bodyptr)
10900 {
10901 vos_mem_free(pMsg->bodyptr);
10902 }
10903 break;
10904 }
10905 case WDA_SIGNAL_BT_EVENT:
10906 {
10907 /*TODO: handle this while dealing with BTC */
10908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10909 "Handling msg type WDA_SIGNAL_BT_EVENT " );
10910 /* Do Nothing? MSG Body should be freed at here */
10911 if(NULL != pMsg->bodyptr)
10912 {
10913 vos_mem_free(pMsg->bodyptr);
10914 }
10915 break;
10916 }
10917 case WDA_CFG_RXP_FILTER_REQ:
10918 {
10919 WDA_ProcessConfigureRxpFilterReq(pWDA,
10920 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
10921 break;
10922 }
10923 case WDA_SET_HOST_OFFLOAD:
10924 {
10925 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10926 break;
10927 }
10928 case WDA_SET_KEEP_ALIVE:
10929 {
10930 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
10931 break;
10932 }
10933#ifdef WLAN_NS_OFFLOAD
10934 case WDA_SET_NS_OFFLOAD:
10935 {
10936 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10937 break;
10938 }
10939#endif //WLAN_NS_OFFLOAD
10940 case WDA_ADD_STA_SELF_REQ:
10941 {
10942 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
10943 break;
10944 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 case WDA_DEL_STA_SELF_REQ:
10946 {
10947 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
10948 break;
10949 }
10950 case WDA_WOWL_ADD_BCAST_PTRN:
10951 {
10952 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
10953 break;
10954 }
10955 case WDA_WOWL_DEL_BCAST_PTRN:
10956 {
10957 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
10958 break;
10959 }
10960 case WDA_WOWL_ENTER_REQ:
10961 {
10962 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
10963 break;
10964 }
10965 case WDA_WOWL_EXIT_REQ:
10966 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010967 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010968 break;
10969 }
10970 case WDA_TL_FLUSH_AC_REQ:
10971 {
10972 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
10973 break;
10974 }
10975 case WDA_SIGNAL_BTAMP_EVENT:
10976 {
10977 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
10978 break;
10979 }
10980#ifdef WDA_UT
10981 case WDA_WDI_EVENT_MSG:
10982 {
10983 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
10984 break ;
10985 }
10986#endif
10987 case WDA_UPDATE_BEACON_IND:
10988 {
10989 WDA_ProcessUpdateBeaconParams(pWDA,
10990 (tUpdateBeaconParams *)pMsg->bodyptr);
10991 break;
10992 }
10993 case WDA_SEND_BEACON_REQ:
10994 {
10995 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
10996 break;
10997 }
10998 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
10999 {
11000 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11001 (tSendProbeRespParams *)pMsg->bodyptr);
11002 break;
11003 }
11004#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11005 case WDA_SET_MAX_TX_POWER_REQ:
11006 {
11007 WDA_ProcessSetMaxTxPowerReq(pWDA,
11008 (tMaxTxPowerParams *)pMsg->bodyptr);
11009 break;
11010 }
11011#endif
schang86c22c42013-03-13 18:41:24 -070011012 case WDA_SET_TX_POWER_REQ:
11013 {
11014 WDA_ProcessSetTxPowerReq(pWDA,
11015 (tSirSetTxPowerReq *)pMsg->bodyptr);
11016 break;
11017 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011018 case WDA_SET_P2P_GO_NOA_REQ:
11019 {
11020 WDA_ProcessSetP2PGONOAReq(pWDA,
11021 (tP2pPsParams *)pMsg->bodyptr);
11022 break;
11023 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011024 /* timer related messages */
11025 case WDA_TIMER_BA_ACTIVITY_REQ:
11026 {
11027 WDA_BaCheckActivity(pWDA) ;
11028 break ;
11029 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011030
11031 /* timer related messages */
11032 case WDA_TIMER_TRAFFIC_STATS_IND:
11033 {
11034 WDA_TimerTrafficStatsInd(pWDA);
11035 break;
11036 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011037#ifdef WLAN_FEATURE_VOWIFI_11R
11038 case WDA_AGGR_QOS_REQ:
11039 {
11040 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11041 break;
11042 }
11043#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011044 case WDA_FTM_CMD_REQ:
11045 {
11046 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11047 break ;
11048 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011049#ifdef FEATURE_OEM_DATA_SUPPORT
11050 case WDA_START_OEM_DATA_REQ:
11051 {
11052 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11053 break;
11054 }
11055#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011056 /* Tx Complete Time out Indication */
11057 case WDA_TX_COMPLETE_TIMEOUT_IND:
11058 {
11059 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11060 break;
11061 }
11062 case WDA_WLAN_SUSPEND_IND:
11063 {
11064 WDA_ProcessWlanSuspendInd(pWDA,
11065 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11066 break;
11067 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 case WDA_WLAN_RESUME_REQ:
11069 {
11070 WDA_ProcessWlanResumeReq(pWDA,
11071 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11072 break;
11073 }
11074
11075 case WDA_UPDATE_CF_IND:
11076 {
11077 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11078 pMsg->bodyptr = NULL;
11079 break;
11080 }
11081#ifdef FEATURE_WLAN_SCAN_PNO
11082 case WDA_SET_PNO_REQ:
11083 {
11084 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11085 break;
11086 }
11087 case WDA_UPDATE_SCAN_PARAMS_REQ:
11088 {
11089 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11090 break;
11091 }
11092 case WDA_SET_RSSI_FILTER_REQ:
11093 {
11094 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11095 break;
11096 }
11097#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011098#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011099 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011100 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011101 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011102 break;
11103 }
11104#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011105 case WDA_SET_TX_PER_TRACKING_REQ:
11106 {
11107 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11108 break;
11109 }
11110
11111#ifdef WLAN_FEATURE_PACKET_FILTERING
11112 case WDA_8023_MULTICAST_LIST_REQ:
11113 {
11114 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11115 break;
11116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011117 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11118 {
11119 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11120 break;
11121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011122 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11123 {
11124 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11125 break;
11126 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011127 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11128 {
11129 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11130 break;
11131 }
11132#endif // WLAN_FEATURE_PACKET_FILTERING
11133
11134
11135 case WDA_TRANSMISSION_CONTROL_IND:
11136 {
11137 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11138 break;
11139 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011140 case WDA_SET_POWER_PARAMS_REQ:
11141 {
11142 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11143 break;
11144 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011145#ifdef WLAN_FEATURE_GTK_OFFLOAD
11146 case WDA_GTK_OFFLOAD_REQ:
11147 {
11148 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11149 break;
11150 }
11151
11152 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11153 {
11154 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11155 break;
11156 }
11157#endif //WLAN_FEATURE_GTK_OFFLOAD
11158
11159 case WDA_SET_TM_LEVEL_REQ:
11160 {
11161 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11162 break;
11163 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011164#ifdef WLAN_FEATURE_11AC
11165 case WDA_UPDATE_OP_MODE:
11166 {
11167 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11168 {
11169 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11170 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11171 else
11172 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11173 " VHT OpMode Feature is Not Supported \n");
11174 }
11175 else
11176 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11177 " 11AC Feature is Not Supported \n");
11178 break;
11179 }
11180#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011181#ifdef WLAN_FEATURE_11W
11182 case WDA_EXCLUDE_UNENCRYPTED_IND:
11183 {
11184 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11185 break;
11186 }
11187#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011188#ifdef FEATURE_WLAN_TDLS
11189 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11190 {
11191 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11192 break;
11193 }
11194#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011195 default:
11196 {
11197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11198 "No Handling for msg type %x in WDA "
11199 ,pMsg->type);
11200 /* Do Nothing? MSG Body should be freed at here */
11201 if(NULL != pMsg->bodyptr)
11202 {
11203 vos_mem_free(pMsg->bodyptr);
11204 }
11205 //WDA_VOS_ASSERT(0) ;
11206 }
11207 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011208 return status ;
11209}
11210
Jeff Johnson295189b2012-06-20 16:38:30 -070011211/*
11212 * FUNCTION: WDA_LowLevelIndCallback
11213 * IND API callback from WDI, send Ind to PE
11214 */
11215void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11216 void* pUserData )
11217{
11218 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11219#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11220 tSirRSSINotification rssiNotification;
11221#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011222 if(NULL == pWDA)
11223 {
11224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011225 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011226 VOS_ASSERT(0);
11227 return ;
11228 }
11229
11230 switch(wdiLowLevelInd->wdiIndicationType)
11231 {
11232 case WDI_RSSI_NOTIFICATION_IND:
11233 {
11234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11235 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011236#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11237 rssiNotification.bReserved =
11238 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11239 rssiNotification.bRssiThres1NegCross =
11240 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11241 rssiNotification.bRssiThres1PosCross =
11242 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11243 rssiNotification.bRssiThres2NegCross =
11244 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11245 rssiNotification.bRssiThres2PosCross =
11246 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11247 rssiNotification.bRssiThres3NegCross =
11248 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11249 rssiNotification.bRssiThres3PosCross =
11250 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011251 rssiNotification.avgRssi = (v_S7_t)
11252 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011253 WLANTL_BMPSRSSIRegionChangedNotification(
11254 pWDA->pVosContext,
11255 &rssiNotification);
11256#endif
11257 break ;
11258 }
11259 case WDI_MISSED_BEACON_IND:
11260 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011261 tpSirSmeMissedBeaconInd pMissBeacInd =
11262 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11264 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011265 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011266 if(NULL == pMissBeacInd)
11267 {
11268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11269 "%s: VOS MEM Alloc Failure", __func__);
11270 break;
11271 }
11272 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11273 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11274 pMissBeacInd->bssIdx =
11275 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11276 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011277 break ;
11278 }
11279 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11280 {
11281 /* TODO: Decode Ind and send Ind to PE */
11282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11283 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11284 break ;
11285 }
11286
11287 case WDI_MIC_FAILURE_IND:
11288 {
11289 tpSirSmeMicFailureInd pMicInd =
11290 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11291
11292 if(NULL == pMicInd)
11293 {
11294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011296 break;
11297 }
11298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11299 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011300 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11301 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11302 vos_mem_copy(pMicInd->bssId,
11303 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11304 sizeof(tSirMacAddr));
11305 vos_mem_copy(pMicInd->info.srcMacAddr,
11306 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11307 sizeof(tSirMacAddr));
11308 vos_mem_copy(pMicInd->info.taMacAddr,
11309 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11310 sizeof(tSirMacAddr));
11311 vos_mem_copy(pMicInd->info.dstMacAddr,
11312 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11313 sizeof(tSirMacAddr));
11314 vos_mem_copy(pMicInd->info.rxMacAddr,
11315 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11316 sizeof(tSirMacAddr));
11317 pMicInd->info.multicast =
11318 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11319 pMicInd->info.keyId=
11320 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11321 pMicInd->info.IV1=
11322 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11323 vos_mem_copy(pMicInd->info.TSC,
11324 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011325 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11326 (void *)pMicInd , 0) ;
11327 break ;
11328 }
11329 case WDI_FATAL_ERROR_IND:
11330 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011331 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 /* TODO: Decode Ind and send Ind to PE */
11333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11334 "Received WDI_FATAL_ERROR_IND from WDI ");
11335 break ;
11336 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011337 case WDI_DEL_STA_IND:
11338 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011339 tpDeleteStaContext pDelSTACtx =
11340 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11341
11342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11343 "Received WDI_DEL_STA_IND from WDI ");
11344 if(NULL == pDelSTACtx)
11345 {
11346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011348 break;
11349 }
11350 vos_mem_copy(pDelSTACtx->addr2,
11351 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11352 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011353 vos_mem_copy(pDelSTACtx->bssId,
11354 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11355 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011356 pDelSTACtx->assocId =
11357 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11358 pDelSTACtx->reasonCode =
11359 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11360 pDelSTACtx->staId =
11361 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011362 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11363 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 break ;
11365 }
11366 case WDI_COEX_IND:
11367 {
11368 tANI_U32 index;
11369 vos_msg_t vosMsg;
11370 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11371 if(NULL == pSmeCoexInd)
11372 {
11373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011374 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011375 break;
11376 }
11377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11378 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011379 /* Message Header */
11380 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11381 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011382 /* Info from WDI Indication */
11383 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11384 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11385 {
11386 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 /* VOS message wrapper */
11389 vosMsg.type = eWNI_SME_COEX_IND;
11390 vosMsg.bodyptr = (void *)pSmeCoexInd;
11391 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011392 /* Send message to SME */
11393 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11394 {
11395 /* free the mem and return */
11396 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11397 }
11398 else
11399 {
11400 /* DEBUG */
11401 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11402 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11403 pSmeCoexInd->coexIndType,
11404 pSmeCoexInd->coexIndData[0],
11405 pSmeCoexInd->coexIndData[1],
11406 pSmeCoexInd->coexIndData[2],
11407 pSmeCoexInd->coexIndData[3]);
11408 }
11409 break;
11410 }
11411 case WDI_TX_COMPLETE_IND:
11412 {
11413 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11414 /* Calling TxCompleteAck Indication from wda context*/
11415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11416 "Complete Indication received from HAL");
11417 if( pWDA->pAckTxCbFunc )
11418 {
11419 if( VOS_STATUS_SUCCESS !=
11420 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11421 {
11422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11423 "Tx Complete timeout Timer Stop Failed ");
11424 }
11425 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11426 pWDA->pAckTxCbFunc = NULL;
11427 }
11428 else
11429 {
11430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11431 "Tx Complete Indication is received after timeout ");
11432 }
11433 break;
11434 }
Viral Modid86bde22012-12-10 13:09:21 -080011435 case WDI_P2P_NOA_START_IND :
11436 {
11437 tSirP2PNoaStart *pP2pNoaStart =
11438 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11439
11440 if (NULL == pP2pNoaStart)
11441 {
11442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11443 "Memory allocation failure, "
11444 "WDI_P2P_NOA_START_IND not forwarded");
11445 break;
11446 }
11447 pP2pNoaStart->status =
11448 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11449 pP2pNoaStart->bssIdx =
11450 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11451 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11452 (void *)pP2pNoaStart , 0) ;
11453 break;
11454 }
11455
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011456#ifdef FEATURE_WLAN_TDLS
11457 case WDI_TDLS_IND :
11458 {
11459 tSirTdlsInd *pTdlsInd =
11460 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
11461
11462 if (NULL == pTdlsInd)
11463 {
11464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11465 "Memory allocation failure, "
11466 "WDI_TDLS_IND not forwarded");
11467 break;
11468 }
11469 pTdlsInd->status =
11470 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
11471 pTdlsInd->assocId =
11472 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
11473 pTdlsInd->staIdx =
11474 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
11475 pTdlsInd->reasonCode =
11476 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
11477 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
11478 (void *)pTdlsInd , 0) ;
11479 break;
11480 }
11481#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011482 case WDI_P2P_NOA_ATTR_IND :
11483 {
11484 tSirP2PNoaAttr *pP2pNoaAttr =
11485 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11487 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011488 if (NULL == pP2pNoaAttr)
11489 {
11490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11491 "Memory allocation failure, "
11492 "WDI_P2P_NOA_ATTR_IND not forwarded");
11493 break;
11494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 pP2pNoaAttr->index =
11496 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11497 pP2pNoaAttr->oppPsFlag =
11498 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11499 pP2pNoaAttr->ctWin =
11500 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11501
11502 pP2pNoaAttr->uNoa1IntervalCnt =
11503 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11504 pP2pNoaAttr->uNoa1Duration =
11505 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11506 pP2pNoaAttr->uNoa1Interval =
11507 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11508 pP2pNoaAttr->uNoa1StartTime =
11509 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 pP2pNoaAttr->uNoa2IntervalCnt =
11511 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11512 pP2pNoaAttr->uNoa2Duration =
11513 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11514 pP2pNoaAttr->uNoa2Interval =
11515 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11516 pP2pNoaAttr->uNoa2StartTime =
11517 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011518 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11519 (void *)pP2pNoaAttr , 0) ;
11520 break;
11521 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011522#ifdef FEATURE_WLAN_SCAN_PNO
11523 case WDI_PREF_NETWORK_FOUND_IND:
11524 {
11525 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011526 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11527 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11528 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11529 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11530
Jeff Johnson295189b2012-06-20 16:38:30 -070011531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11532 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011533 if (NULL == pPrefNetworkFoundInd)
11534 {
11535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11536 "Memory allocation failure, "
11537 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11538 break;
11539 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011540 /* Message Header */
11541 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011542 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011543
11544 /* Info from WDI Indication */
11545 pPrefNetworkFoundInd->ssId.length =
11546 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011547 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011548 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11549 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11550 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011551 if (NULL !=
11552 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11553 {
11554 pPrefNetworkFoundInd->frameLength =
11555 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11556 vos_mem_copy( pPrefNetworkFoundInd->data,
11557 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11558 pPrefNetworkFoundInd->frameLength);
11559 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11560 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11561 }
11562 else
11563 {
11564 pPrefNetworkFoundInd->frameLength = 0;
11565 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011566 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011567 /* VOS message wrapper */
11568 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11569 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11570 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011571 /* Send message to SME */
11572 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11573 {
11574 /* free the mem and return */
11575 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11576 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011577 break;
11578 }
11579#endif // FEATURE_WLAN_SCAN_PNO
11580
11581#ifdef WLAN_WAKEUP_EVENTS
11582 case WDI_WAKE_REASON_IND:
11583 {
11584 vos_msg_t vosMsg;
11585 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11586 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11587 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11588
11589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11590 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11591 wdiLowLevelInd->wdiIndicationType,
11592 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11593 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11594 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11595
11596 if (NULL == pWakeReasonInd)
11597 {
11598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11599 "Memory allocation failure, "
11600 "WDI_WAKE_REASON_IND not forwarded");
11601 break;
11602 }
11603
11604 vos_mem_zero(pWakeReasonInd, allocSize);
11605
11606 /* Message Header */
11607 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11608 pWakeReasonInd->mesgLen = allocSize;
11609
11610 /* Info from WDI Indication */
11611 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11612 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11613 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11614 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11615 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11616 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11617 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11618 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11619
11620 /* VOS message wrapper */
11621 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11622 vosMsg.bodyptr = (void *) pWakeReasonInd;
11623 vosMsg.bodyval = 0;
11624
11625 /* Send message to SME */
11626 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11627 {
11628 /* free the mem and return */
11629 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11630 }
11631
11632 break;
11633 }
11634#endif // WLAN_WAKEUP_EVENTS
11635
11636 case WDI_TX_PER_HIT_IND:
11637 {
11638 vos_msg_t vosMsg;
11639 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11640 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11641 /* VOS message wrapper */
11642 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11643 vosMsg.bodyptr = NULL;
11644 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 /* Send message to SME */
11646 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11647 {
11648 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11649 }
11650 break;
11651 }
11652
11653 default:
11654 {
11655 /* TODO error */
11656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11657 "Received UNKNOWN Indication from WDI ");
11658 }
11659 }
11660 return ;
11661}
11662
Jeff Johnson295189b2012-06-20 16:38:30 -070011663/*
11664 * BA related processing in WDA.
11665 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011666void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
11667 void* pUserData)
11668{
11669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11670 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 if(NULL == pWdaParams)
11672 {
11673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011674 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 VOS_ASSERT(0) ;
11676 return ;
11677 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070011679 vos_mem_free(pWdaParams->wdaMsgParam) ;
11680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11681 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011683 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
11685 {
11686 tANI_U8 i = 0 ;
11687 tBaActivityInd *baActivityInd = NULL ;
11688 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
11689 tANI_U8 allocSize = sizeof(tBaActivityInd)
11690 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
11691 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
11692 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011693 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011694 if(NULL == baActivityInd)
11695 {
11696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011698 VOS_ASSERT(0) ;
11699 return;
11700 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011701 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
11702 sizeof(tSirMacAddr)) ;
11703 baActivityInd->baCandidateCnt = baCandidateCount ;
11704
11705 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
11706 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
11707
11708 for(i = 0 ; i < baCandidateCount ; i++)
11709 {
11710 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011711 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
11712 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011713 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
11714 {
11715 baCandidate->baInfo[tid].fBaEnable =
11716 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
11717 baCandidate->baInfo[tid].startingSeqNum =
11718 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
11719 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011720 wdiBaCandidate++ ;
11721 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011722 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011723 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
11724 }
11725 else
11726 {
11727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11728 "BA Trigger RSP with Failure received ");
11729 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011730 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011731}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011732
11733
11734/*
11735 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
11736 * during MCC
11737 */
11738void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
11739{
11740 wpt_uint32 enabled;
11741 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
11742 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
11743 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
11744
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011745 if (NULL == pMac )
11746 {
11747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11748 "%s: Invoked with invalid MAC context ", __func__ );
11749 VOS_ASSERT(0);
11750 return;
11751 }
11752
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011753 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11754 != eSIR_SUCCESS)
11755 {
11756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11757 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11758 return;
11759 }
11760
11761 if(!enabled)
11762 {
11763 return;
11764 }
11765
11766 if(NULL == pWDA)
11767 {
11768 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11769 "%s:WDA context is NULL", __func__);
11770 VOS_ASSERT(0);
11771 return;
11772 }
11773
11774 if(activate)
11775 {
11776 if( VOS_STATUS_SUCCESS !=
11777 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11778 {
11779 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11780 "Traffic Stats Timer Start Failed ");
11781 return;
11782 }
11783 WDI_DS_ActivateTrafficStats();
11784 }
11785 else
11786 {
11787 WDI_DS_DeactivateTrafficStats();
11788 WDI_DS_ClearTrafficStats();
11789
11790 if( VOS_STATUS_SUCCESS !=
11791 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11792 {
11793 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11794 "Traffic Stats Timer Stop Failed ");
11795 return;
11796 }
11797 }
11798}
11799
11800/*
11801 * Traffic Stats Timer handler
11802 */
11803void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
11804{
11805 WDI_Status wdiStatus;
11806 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
11807 WDI_TrafficStatsIndType trafficStatsIndParams;
11808 wpt_uint32 length, enabled;
11809 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11810
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011811 if (NULL == pMac )
11812 {
11813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11814 "%s: Invoked with invalid MAC context ", __func__ );
11815 VOS_ASSERT(0);
11816 return;
11817 }
11818
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011819 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11820 != eSIR_SUCCESS)
11821 {
11822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11823 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11824 return;
11825 }
11826
11827 if(!enabled)
11828 {
11829 WDI_DS_DeactivateTrafficStats();
11830 return;
11831 }
11832
11833 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
11834
11835 if(pWdiTrafficStats != NULL)
11836 {
11837 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
11838 trafficStatsIndParams.length = length;
11839 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080011840 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011841 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11842 trafficStatsIndParams.pUserData = pWDA;
11843
11844 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
11845
11846 if(WDI_STATUS_PENDING == wdiStatus)
11847 {
11848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11849 "Pending received for %s:%d ",__func__,__LINE__ );
11850 }
11851 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11852 {
11853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11854 "Failure in %s:%d ",__func__,__LINE__ );
11855 }
11856
11857 WDI_DS_ClearTrafficStats();
11858 }
11859 else
11860 {
11861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11862 "pWdiTrafficStats is Null");
11863 }
11864
11865 if( VOS_STATUS_SUCCESS !=
11866 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11867 {
11868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11869 "Traffic Stats Timer Start Failed ");
11870 return;
11871 }
11872}
11873
Jeff Johnson295189b2012-06-20 16:38:30 -070011874/*
11875 * BA Activity check timer handler
11876 */
11877void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
11878{
11879 tANI_U8 curSta = 0 ;
11880 tANI_U8 tid = 0 ;
11881 tANI_U8 size = 0 ;
11882 tANI_U8 baCandidateCount = 0 ;
11883 tANI_U8 newBaCandidate = 0 ;
11884 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
11885
11886 if(NULL == pWDA)
11887 {
11888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011889 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011890 VOS_ASSERT(0);
11891 return ;
11892 }
11893 if(WDA_MAX_STA < pWDA->wdaMaxSta)
11894 {
11895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11896 "Inconsistent STA entries in WDA");
11897 VOS_ASSERT(0) ;
11898 }
11899 /* walk through all STA entries and find out TX packet count */
11900 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
11901 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080011902#ifdef WLAN_SOFTAP_VSTA_FEATURE
11903 // We can only do BA on "hard" STAs.
11904 if (!(IS_HWSTA_IDX(curSta)))
11905 {
11906 continue;
11907 }
11908#endif //WLAN_SOFTAP_VSTA_FEATURE
11909 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
11910 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011911 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011912 tANI_U32 txPktCount = 0 ;
11913 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011914 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011915 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
11916 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070011917 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
11918 curSta, tid, &txPktCount)))
11919 {
11920#if 0
11921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11922 "************* %d:%d, %d ",curSta, txPktCount,
11923 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
11924#endif
11925 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011926 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070011927 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
11928 curSta, tid)))
11929 {
11930 /* get prepare for sending message to HAL */
11931 //baCandidate[baCandidateCount].staIdx = curSta ;
11932 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
11933 newBaCandidate = WDA_ENABLE_BA ;
11934 }
11935 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
11936 }
11937 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011938 /* fill the entry for all the sta with given TID's */
11939 if(WDA_ENABLE_BA == newBaCandidate)
11940 {
11941 /* move to next BA candidate */
11942 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
11943 size += sizeof(WDI_TriggerBAReqCandidateType) ;
11944 baCandidateCount++ ;
11945 newBaCandidate = WDA_DISABLE_BA ;
11946 }
11947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011948 /* prepare and send message to hal */
11949 if( 0 < baCandidateCount)
11950 {
11951 WDI_Status status = WDI_STATUS_SUCCESS ;
11952 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
11953 tWDA_ReqParams *pWdaParams =
11954 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011955 if(NULL == pWdaParams)
11956 {
11957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011959 VOS_ASSERT(0) ;
11960 return;
11961 }
11962 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
11963 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
11964 if(NULL == wdiTriggerBaReq)
11965 {
11966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011968 VOS_ASSERT(0) ;
11969 vos_mem_free(pWdaParams);
11970 return;
11971 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011972 do
11973 {
11974 WDI_TriggerBAReqinfoType *triggerBaInfo =
11975 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
11976 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
11977 /* TEMP_FIX: Need to see if WDI need check for assoc session for
11978 * for each request */
11979 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
11980 triggerBaInfo->ucBASessionID = 0;
11981 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
11982 } while(0) ;
11983 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
11984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011985 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 pWdaParams->pWdaContext = pWDA;
11987 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
11988 pWdaParams->wdaMsgParam = NULL;
11989 status = WDI_TriggerBAReq(wdiTriggerBaReq,
11990 WDA_TriggerBaReqCallback, pWdaParams) ;
11991 if(IS_WDI_STATUS_FAILURE(status))
11992 {
11993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11994 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
11995 vos_mem_free(pWdaParams->wdaMsgParam) ;
11996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11997 vos_mem_free(pWdaParams) ;
11998 }
11999 }
12000 else
12001 {
12002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12003 "There is no TID for initiating BA");
12004 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012005 if( VOS_STATUS_SUCCESS !=
12006 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12007 {
12008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12009 "BA Activity Timer Stop Failed ");
12010 return ;
12011 }
12012 if( VOS_STATUS_SUCCESS !=
12013 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12014 {
12015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12016 "BA Activity Timer Start Failed ");
12017 return;
12018 }
12019 return ;
12020}
Jeff Johnson295189b2012-06-20 16:38:30 -070012021/*
12022 * WDA common routine to create timer used by WDA.
12023 */
12024static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12025{
Jeff Johnson295189b2012-06-20 16:38:30 -070012026 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12027 tANI_U32 val = 0 ;
12028 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12029
12030 if(NULL == pMac)
12031 {
12032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012033 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 VOS_ASSERT(0);
12035 return VOS_STATUS_E_FAILURE;
12036 }
12037 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12038 != eSIR_SUCCESS)
12039 {
12040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12041 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12042 return VOS_STATUS_E_FAILURE;
12043 }
12044 val = SYS_MS_TO_TICKS(val) ;
12045
12046 /* BA activity check timer */
12047 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12048 "BA Activity Check timer", WDA_TimerHandler,
12049 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12050 if(status != TX_SUCCESS)
12051 {
12052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12053 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012054 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012055 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012056 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012057 /* Tx Complete Timeout timer */
12058 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12059 "Tx Complete Check timer", WDA_TimerHandler,
12060 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012061 if(status != TX_SUCCESS)
12062 {
12063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12064 "Unable to create Tx Complete Timeout timer");
12065 /* Destroy timer of BA activity check timer */
12066 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12067 if(status != TX_SUCCESS)
12068 {
12069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12070 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012071 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012072 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012073 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012074 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012075
12076 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12077
12078 /* Traffic Stats timer */
12079 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12080 "Traffic Stats timer", WDA_TimerHandler,
12081 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12082 if(status != TX_SUCCESS)
12083 {
12084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12085 "Unable to create traffic stats timer");
12086 /* Destroy timer of BA activity check timer */
12087 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12088 if(status != TX_SUCCESS)
12089 {
12090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12091 "Unable to Destroy BA activity timer");
12092 }
12093 /* Destroy timer of tx complete timer */
12094 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12095 if(status != TX_SUCCESS)
12096 {
12097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12098 "Unable to Tx complete timer");
12099 }
12100 return VOS_STATUS_E_FAILURE ;
12101 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012102 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012103}
Jeff Johnson295189b2012-06-20 16:38:30 -070012104/*
12105 * WDA common routine to destroy timer used by WDA.
12106 */
12107static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12108{
12109 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012110 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12111 if(status != TX_SUCCESS)
12112 {
12113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12114 "Unable to Destroy Tx Complete Timeout timer");
12115 return eSIR_FAILURE ;
12116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012117 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12118 if(status != TX_SUCCESS)
12119 {
12120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12121 "Unable to Destroy BA activity timer");
12122 return eSIR_FAILURE ;
12123 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012124 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12125 if(status != TX_SUCCESS)
12126 {
12127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12128 "Unable to Destroy traffic stats timer");
12129 return eSIR_FAILURE ;
12130 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012131 return eSIR_SUCCESS ;
12132}
Jeff Johnson295189b2012-06-20 16:38:30 -070012133/*
12134 * WDA timer handler.
12135 */
12136void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12137{
12138 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12139 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012140 /*
12141 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12142 */
12143 wdaMsg.type = timerInfo ;
12144 wdaMsg.bodyptr = NULL;
12145 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012146 /* post the message.. */
12147 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
12148 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
12149 {
12150 vosStatus = VOS_STATUS_E_BADMSG;
12151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012152}
Jeff Johnson295189b2012-06-20 16:38:30 -070012153/*
12154 * WDA Tx Complete timeout Indication.
12155 */
12156void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
12157{
12158 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012159 if( pWDA->pAckTxCbFunc )
12160 {
12161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12162 "TxComplete timer expired\n");
12163 pWDA->pAckTxCbFunc( pMac, 0);
12164 pWDA->pAckTxCbFunc = NULL;
12165 }
12166 else
12167 {
12168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12169 "There is no request pending for TxComplete and wait timer expired\n");
12170 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012171}
Jeff Johnson295189b2012-06-20 16:38:30 -070012172/*
12173 * WDA Set REG Domain to VOS NV
12174 */
12175eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
12176{
12177 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
12178 {
12179 return eHAL_STATUS_INVALID_PARAMETER;
12180 }
12181 return eHAL_STATUS_SUCCESS;
12182}
Jeff Johnson295189b2012-06-20 16:38:30 -070012183
Jeff Johnson295189b2012-06-20 16:38:30 -070012184#ifdef FEATURE_WLAN_SCAN_PNO
12185/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012186 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012187 *
12188 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012189void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012190{
12191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012193 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012194 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012195 {
12196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012197 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 VOS_ASSERT(0) ;
12199 return ;
12200 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012201
Yue Ma7f44bbe2013-04-12 11:47:39 -070012202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12203 vos_mem_free(pWdaParams->wdaMsgParam);
12204 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012205
12206 return ;
12207}
Jeff Johnson295189b2012-06-20 16:38:30 -070012208/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012209 * FUNCTION: WDA_PNOScanReqCallback
12210 * Free memory.
12211 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
12212 */
12213void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012214{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012215 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12216
12217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12218 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12219
12220 if(NULL == pWdaParams)
12221 {
12222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12223 "%s: pWdaParams received NULL", __func__);
12224 VOS_ASSERT(0);
12225 return;
12226 }
12227
12228 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12229 {
12230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12231 vos_mem_free(pWdaParams->wdaMsgParam);
12232 vos_mem_free(pWdaParams);
12233 }
12234
12235 return;
12236}
12237/*
12238 * FUNCTION: WDA_UpdateScanParamsRespCallback
12239 *
12240 */
12241void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12242{
12243 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012245 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012246 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012247 {
12248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012249 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012250 VOS_ASSERT(0) ;
12251 return ;
12252 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012253
12254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12255 vos_mem_free(pWdaParams->wdaMsgParam);
12256 vos_mem_free(pWdaParams);
12257
Jeff Johnson295189b2012-06-20 16:38:30 -070012258 return ;
12259}
Jeff Johnson295189b2012-06-20 16:38:30 -070012260/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012261 * FUNCTION: WDA_UpdateScanParamsReqCallback
12262 * Free memory.
12263 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12264 */
12265void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12266{
12267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12268
12269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12270 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12271
12272 if(NULL == pWdaParams)
12273 {
12274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12275 "%s: pWdaParams received NULL", __func__);
12276 VOS_ASSERT(0);
12277 return;
12278 }
12279
12280 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12281 {
12282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12283 vos_mem_free(pWdaParams->wdaMsgParam);
12284 vos_mem_free(pWdaParams);
12285 }
12286
12287 return;
12288}
12289/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12291 * Request to WDI to set Preferred Network List.Offload
12292 */
12293VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12294 tSirPNOScanReq *pPNOScanReqParams)
12295{
Jeff Johnson43971f52012-07-17 12:26:56 -070012296 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012297 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12298 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12299 tWDA_ReqParams *pWdaParams ;
12300 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012302 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012303 if(NULL == pwdiPNOScanReqInfo)
12304 {
12305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012306 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012307 VOS_ASSERT(0);
12308 return VOS_STATUS_E_NOMEM;
12309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012310 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12311 if(NULL == pWdaParams)
12312 {
12313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012314 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012315 VOS_ASSERT(0);
12316 vos_mem_free(pwdiPNOScanReqInfo);
12317 return VOS_STATUS_E_NOMEM;
12318 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012319 //
12320 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12321 //
12322 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12323 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012324 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12325 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12326 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012327 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12328 {
12329 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12330 &pPNOScanReqParams->aNetworks[i],
12331 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12332 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012333 /*Scan timer intervals*/
12334 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12335 &pPNOScanReqParams->scanTimers,
12336 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012337 /*Probe template for 2.4GHz band*/
12338 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12339 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12340 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012341 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12342 pPNOScanReqParams->p24GProbeTemplate,
12343 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012344 /*Probe template for 5GHz band*/
12345 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12346 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12347 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012348 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12349 pPNOScanReqParams->p5GProbeTemplate,
12350 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012351 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12352 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012353
Jeff Johnson295189b2012-06-20 16:38:30 -070012354 /* Store Params pass it to WDI */
12355 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12356 pWdaParams->pWdaContext = pWDA;
12357 /* Store param pointer as passed in by caller */
12358 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012359 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012360 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012361 if(IS_WDI_STATUS_FAILURE(status))
12362 {
12363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12364 "Failure in Set PNO REQ WDI API, free all the memory " );
12365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12366 vos_mem_free(pWdaParams->wdaMsgParam);
12367 pWdaParams->wdaWdiApiMsgParam = NULL;
12368 pWdaParams->wdaMsgParam = NULL;
12369 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012370 return CONVERT_WDI2VOS_STATUS(status) ;
12371}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012372
12373#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12374
12375void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12376{
12377 /*Convert the CSR Auth types to WDI Auth types */
12378 switch (csrAuthType)
12379 {
12380 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12381 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12382 break;
12383#ifdef FEATURE_WLAN_CCX
12384 case eCSR_AUTH_TYPE_CCKM_WPA:
12385 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12386 break;
12387#endif
12388 case eCSR_AUTH_TYPE_WPA:
12389 *AuthType = eWDA_AUTH_TYPE_WPA;
12390 break;
12391 case eCSR_AUTH_TYPE_WPA_PSK:
12392 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12393 break;
12394#ifdef FEATURE_WLAN_CCX
12395 case eCSR_AUTH_TYPE_CCKM_RSN:
12396 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12397 break;
12398#endif
12399 case eCSR_AUTH_TYPE_RSN:
12400 *AuthType = eWDA_AUTH_TYPE_RSN;
12401 break;
12402 case eCSR_AUTH_TYPE_RSN_PSK:
12403 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12404 break;
12405#if defined WLAN_FEATURE_VOWIFI_11R
12406 case eCSR_AUTH_TYPE_FT_RSN:
12407 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12408 break;
12409 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12410 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12411 break;
12412#endif
12413#ifdef FEATURE_WLAN_WAPI
12414 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12415 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12416 break;
12417 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12418 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12419 break;
12420#endif /* FEATURE_WLAN_WAPI */
12421 case eCSR_AUTH_TYPE_SHARED_KEY:
12422 case eCSR_AUTH_TYPE_AUTOSWITCH:
12423 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12424 break;
12425#if 0
12426 case eCSR_AUTH_TYPE_SHARED_KEY:
12427 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12428 break;
12429 case eCSR_AUTH_TYPE_AUTOSWITCH:
12430 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12431#endif
12432 default:
12433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12434 "%s: Unknown Auth Type", __func__);
12435 break;
12436 }
12437}
12438void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12439{
12440 switch (csrEncrType)
12441 {
12442 case eCSR_ENCRYPT_TYPE_NONE:
12443 *EncrType = WDI_ED_NONE;
12444 break;
12445 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12446 case eCSR_ENCRYPT_TYPE_WEP40:
12447 *EncrType = WDI_ED_WEP40;
12448 break;
12449 case eCSR_ENCRYPT_TYPE_WEP104:
12450 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12451 *EncrType = WDI_ED_WEP104;
12452 break;
12453 case eCSR_ENCRYPT_TYPE_TKIP:
12454 *EncrType = WDI_ED_TKIP;
12455 break;
12456 case eCSR_ENCRYPT_TYPE_AES:
12457 *EncrType = WDI_ED_CCMP;
12458 break;
12459#ifdef WLAN_FEATURE_11W
12460 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12461 *EncrType = WDI_ED_AES_128_CMAC;
12462 break;
12463#endif
12464#ifdef FEATURE_WLAN_WAPI
12465 case eCSR_ENCRYPT_TYPE_WPI:
12466 *EncrType = WDI_ED_WPI;
12467 break;
12468#endif
12469 case eCSR_ENCRYPT_TYPE_ANY:
12470 *EncrType = WDI_ED_ANY;
12471 break;
12472
12473 default:
12474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12475 "%s: Unknown Encryption Type", __func__);
12476 break;
12477 }
12478}
12479
12480/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012481 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012482 * Request to WDI to set Roam Offload Scan
12483 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012484VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012485 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12486{
12487 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012488 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
12489 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012490 tWDA_ReqParams *pWdaParams ;
12491 v_U8_t csrAuthType;
12492 WDI_RoamNetworkType *pwdiRoamNetworkType;
12493 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12495 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012496 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012497 {
12498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12499 "%s: VOS MEM Alloc Failure", __func__);
12500 VOS_ASSERT(0);
12501 return VOS_STATUS_E_NOMEM;
12502 }
12503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12504 if (NULL == pWdaParams)
12505 {
12506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12507 "%s: VOS MEM Alloc Failure", __func__);
12508 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012509 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012510 return VOS_STATUS_E_NOMEM;
12511 }
12512
12513 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012514 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012515 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012516 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
12517 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012518 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12519 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12520 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12521 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12522 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12523 sizeof(pwdiRoamNetworkType->currAPbssid));
12524 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12525 csrAuthType);
12526 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12527 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12528 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12529 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12530 pwdiRoamOffloadScanInfo->LookupThreshold =
12531 pRoamOffloadScanReqParams->LookupThreshold ;
12532 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12533 pRoamOffloadScanReqParams->RoamRssiDiff ;
12534 pwdiRoamOffloadScanInfo->Command =
12535 pRoamOffloadScanReqParams->Command ;
12536 pwdiRoamOffloadScanInfo->StartScanReason =
12537 pRoamOffloadScanReqParams->StartScanReason ;
12538 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12539 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12540 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12541 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12542 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12543 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12544 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12545 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12546 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12547 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12548 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12549 pRoamOffloadScanReqParams->IsCCXEnabled ;
12550 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12551 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12552 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12553 pwdiRoamNetworkType->ssId.ucLength =
12554 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12555 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12556 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12557 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12558 pwdiRoamNetworkType->ChannelCount =
12559 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12560 pwdiRoamOffloadScanInfo->ChannelCacheType =
12561 pRoamOffloadScanReqParams->ChannelCacheType;
12562 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12563 pRoamOffloadScanReqParams->ValidChannelList,
12564 pRoamOffloadScanReqParams->ValidChannelCount);
12565 pwdiRoamOffloadScanInfo->ValidChannelCount =
12566 pRoamOffloadScanReqParams->ValidChannelCount;
12567 pwdiRoamOffloadScanInfo->us24GProbeSize =
12568 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12569 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12570 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12571 pRoamOffloadScanReqParams->p24GProbeTemplate,
12572 pwdiRoamOffloadScanInfo->us24GProbeSize);
12573 pwdiRoamOffloadScanInfo->us5GProbeSize =
12574 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12575 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12576 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12577 pRoamOffloadScanReqParams->p5GProbeTemplate,
12578 pwdiRoamOffloadScanInfo->us5GProbeSize);
12579 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12580 pRoamOffloadScanReqParams->MDID.mdiePresent;
12581 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12582 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012583 pwdiRoamOffloadScanInfo->nProbes =
12584 pRoamOffloadScanReqParams->nProbes;
12585 pwdiRoamOffloadScanInfo->HomeAwayTime =
12586 pRoamOffloadScanReqParams->HomeAwayTime;
12587 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012588 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012589 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012590 pWdaParams->pWdaContext = pWDA;
12591 /* Store param pointer as passed in by caller */
12592 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012593 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012594 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12595 if(IS_WDI_STATUS_FAILURE(status))
12596 {
12597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12598 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12600 vos_mem_free(pWdaParams->wdaMsgParam);
12601 pWdaParams->wdaWdiApiMsgParam = NULL;
12602 pWdaParams->wdaMsgParam = NULL;
12603 }
12604 return CONVERT_WDI2VOS_STATUS(status) ;
12605}
12606#endif
12607
Jeff Johnson295189b2012-06-20 16:38:30 -070012608/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012609 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012610 *
12611 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012612void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012613{
12614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12615
12616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012617 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012618
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012619 if(NULL == pWdaParams)
12620 {
12621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012622 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012623 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012624 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012625 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012626
Jeff Johnson295189b2012-06-20 16:38:30 -070012627 vos_mem_free(pWdaParams->wdaMsgParam) ;
12628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12629 vos_mem_free(pWdaParams) ;
12630
12631 return ;
12632}
12633/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012634 * FUNCTION: WDA_RssiFilterReqCallback
12635 * Free memory.
12636 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
12637 */
12638void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
12639{
12640 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12641
12642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12643 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12644
12645 if(NULL == pWdaParams)
12646 {
12647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12648 "%s: pWdaParams received NULL", __func__);
12649 VOS_ASSERT(0);
12650 return;
12651 }
12652
12653 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12654 {
12655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12656 vos_mem_free(pWdaParams->wdaMsgParam);
12657 vos_mem_free(pWdaParams);
12658 }
12659
12660 return;
12661}
12662/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012663 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12664 * Request to WDI to set Preferred Network List.Offload
12665 */
12666VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
12667 tSirSetRSSIFilterReq* pRssiFilterParams)
12668{
Jeff Johnson43971f52012-07-17 12:26:56 -070012669 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012670 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
12671 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
12672 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012674 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012675 if(NULL == pwdiSetRssiFilterReqInfo)
12676 {
12677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012678 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012679 VOS_ASSERT(0);
12680 return VOS_STATUS_E_NOMEM;
12681 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012682 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12683 if(NULL == pWdaParams)
12684 {
12685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012686 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012687 VOS_ASSERT(0);
12688 vos_mem_free(pwdiSetRssiFilterReqInfo);
12689 return VOS_STATUS_E_NOMEM;
12690 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012691 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012692 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
12693 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012694
Jeff Johnson295189b2012-06-20 16:38:30 -070012695 /* Store Params pass it to WDI */
12696 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
12697 pWdaParams->pWdaContext = pWDA;
12698 /* Store param pointer as passed in by caller */
12699 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012700 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012701 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012702 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012703 if(IS_WDI_STATUS_FAILURE(status))
12704 {
12705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12706 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
12707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12708 vos_mem_free(pWdaParams->wdaMsgParam);
12709 pWdaParams->wdaWdiApiMsgParam = NULL;
12710 pWdaParams->wdaMsgParam = NULL;
12711 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012712 return CONVERT_WDI2VOS_STATUS(status) ;
12713}
12714
Jeff Johnson295189b2012-06-20 16:38:30 -070012715/*
12716 * FUNCTION: WDA_ProcessUpdateScanParams
12717 * Request to WDI to update Scan Parameters
12718 */
12719VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
12720 tSirUpdateScanParams *pUpdateScanParams)
12721{
Jeff Johnson43971f52012-07-17 12:26:56 -070012722 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012723 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
12724 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
12725 sizeof(WDI_UpdateScanParamsInfoType)) ;
12726 tWDA_ReqParams *pWdaParams ;
12727 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012729 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012730 if(NULL == wdiUpdateScanParamsInfoType)
12731 {
12732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012733 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012734 VOS_ASSERT(0);
12735 return VOS_STATUS_E_NOMEM;
12736 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012737 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12738 if ( NULL == pWdaParams )
12739 {
12740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012741 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012742 VOS_ASSERT(0);
12743 vos_mem_free(wdiUpdateScanParamsInfoType);
12744 return VOS_STATUS_E_NOMEM;
12745 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012746 //
12747 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
12748 //
Jeff Johnson295189b2012-06-20 16:38:30 -070012749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12750 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
12751 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
12752 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
12753 "sir struct %d wdi struct %d",
12754 pUpdateScanParams->b11dEnabled,
12755 pUpdateScanParams->b11dResolved,
12756 pUpdateScanParams->ucChannelCount,
12757 pUpdateScanParams->usPassiveMinChTime,
12758 pUpdateScanParams->usPassiveMaxChTime,
12759 pUpdateScanParams->usActiveMinChTime,
12760 pUpdateScanParams->usActiveMaxChTime,
12761 sizeof(tSirUpdateScanParams),
12762 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
12763
Jeff Johnson295189b2012-06-20 16:38:30 -070012764 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
12765 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070012766 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
12767 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070012768 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
12769 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070012770 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
12771 pUpdateScanParams->usActiveMaxChTime;
12772 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
12773 pUpdateScanParams->usActiveMinChTime;
12774 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
12775 pUpdateScanParams->usPassiveMaxChTime;
12776 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
12777 pUpdateScanParams->usPassiveMinChTime;
12778
Jeff Johnson295189b2012-06-20 16:38:30 -070012779 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053012780 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
12781 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070012782
Jeff Johnson295189b2012-06-20 16:38:30 -070012783 for ( i = 0; i <
12784 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
12785 i++)
12786 {
12787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12788 "Update Scan Parameters channel: %d",
12789 pUpdateScanParams->aChannels[i]);
12790
12791 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
12792 pUpdateScanParams->aChannels[i];
12793 }
12794
Yue Ma7f44bbe2013-04-12 11:47:39 -070012795 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
12796 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012797
Jeff Johnson295189b2012-06-20 16:38:30 -070012798 /* Store Params pass it to WDI */
12799 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
12800 pWdaParams->pWdaContext = pWDA;
12801 /* Store param pointer as passed in by caller */
12802 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070012803
Jeff Johnson295189b2012-06-20 16:38:30 -070012804
12805
12806 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012807 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012808 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012809 if(IS_WDI_STATUS_FAILURE(status))
12810 {
12811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12812 "Failure in Update Scan Params EQ WDI API, free all the memory " );
12813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12814 vos_mem_free(pWdaParams->wdaMsgParam);
12815 vos_mem_free(pWdaParams);
12816 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012817 return CONVERT_WDI2VOS_STATUS(status) ;
12818}
12819#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012820
12821#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12822/*
12823 * FUNCTION: WDA_RoamOffloadScanReqCallback
12824 *
12825 */
12826void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
12827{
12828 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012829 vos_msg_t vosMsg;
12830 wpt_uint8 reason = 0;
12831
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070012832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012833 "<------ %s " ,__func__);
12834 if (NULL == pWdaParams)
12835 {
12836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12837 "%s: pWdaParams received NULL", __func__);
12838 VOS_ASSERT(0) ;
12839 return ;
12840 }
12841 if ( pWdaParams != NULL )
12842 {
12843 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
12844 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012845 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12847 }
12848 if ( pWdaParams->wdaMsgParam != NULL)
12849 {
12850 vos_mem_free(pWdaParams->wdaMsgParam);
12851 }
12852
12853 vos_mem_free(pWdaParams) ;
12854 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012855 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
12856 vosMsg.bodyptr = NULL;
12857 if (WDI_STATUS_SUCCESS != status)
12858 {
12859 reason = 0;
12860 }
12861 vosMsg.bodyval = reason;
12862 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12863 {
12864 /* free the mem and return */
12865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12866 "Failed to post the rsp to UMAC" ,__func__);
12867 }
12868
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012869 return ;
12870}
12871#endif
12872
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012873/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012874 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012875 *
12876 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012877void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012878{
12879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12880
12881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12882 "<------ %s " ,__func__);
12883
12884 if(NULL == pWdaParams)
12885 {
12886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12887 "%s: pWdaParams received NULL", __func__);
12888 VOS_ASSERT(0);
12889 return;
12890 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012891
12892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12893 vos_mem_free(pWdaParams->wdaMsgParam);
12894 vos_mem_free(pWdaParams);
12895
12896 return;
12897}
12898/*
12899 * FUNCTION: WDA_SetPowerParamsReqCallback
12900 * Free memory.
12901 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
12902 */
12903void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12904{
12905 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12906
12907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12908 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12909
12910 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012911 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12913 "%s: pWdaParams received NULL", __func__);
12914 VOS_ASSERT(0);
12915 return;
12916 }
12917
12918 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12919 {
12920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12921 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012922 vos_mem_free(pWdaParams);
12923 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012924
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012925 return;
12926}
12927
Jeff Johnson295189b2012-06-20 16:38:30 -070012928#ifdef WLAN_FEATURE_PACKET_FILTERING
12929/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012930 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012931 *
12932 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012933void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012934 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
12935 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012936{
12937 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012939 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012940 if(NULL == pWdaParams)
12941 {
12942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012943 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012944 VOS_ASSERT(0) ;
12945 return ;
12946 }
12947
12948 vos_mem_free(pWdaParams->wdaMsgParam) ;
12949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12950 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012951 //print a msg, nothing else to do
12952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012953 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012954 return ;
12955}
Jeff Johnson295189b2012-06-20 16:38:30 -070012956/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012957 * FUNCTION: WDA_8023MulticastListReqCallback
12958 * Free memory.
12959 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
12960 */
12961void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
12962{
12963 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12964
12965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12966 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12967
12968 if(NULL == pWdaParams)
12969 {
12970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12971 "%s: pWdaParams received NULL", __func__);
12972 VOS_ASSERT(0);
12973 return;
12974 }
12975
12976 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12977 {
12978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12979 vos_mem_free(pWdaParams->wdaMsgParam);
12980 vos_mem_free(pWdaParams);
12981 }
12982
12983 return;
12984}
12985/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012986 * FUNCTION: WDA_Process8023MulticastListReq
12987 * Request to WDI to add 8023 Multicast List
12988 */
12989VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
12990 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
12991{
Jeff Johnson43971f52012-07-17 12:26:56 -070012992 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012993 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
12994 tWDA_ReqParams *pWdaParams ;
12995 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012997 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012998 pwdiFltPktSetMcListReqParamsType =
12999 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
13000 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
13001 ) ;
13002 if(NULL == pwdiFltPktSetMcListReqParamsType)
13003 {
13004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013006 return VOS_STATUS_E_NOMEM;
13007 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013008 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13009 if(NULL == pWdaParams)
13010 {
13011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013012 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013013 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
13014 return VOS_STATUS_E_NOMEM;
13015 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013016
Jeff Johnson295189b2012-06-20 16:38:30 -070013017 //
13018 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
13019 //
13020 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070013021 pRcvFltMcAddrList->ulMulticastAddrCnt;
13022
13023 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13024 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13025 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13026 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13027
Jeff Johnson295189b2012-06-20 16:38:30 -070013028 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13029 {
13030 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13031 &(pRcvFltMcAddrList->multicastAddr[i]),
13032 sizeof(tSirMacAddr));
13033 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013034 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13035 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013036
Jeff Johnson295189b2012-06-20 16:38:30 -070013037 /* Store Params pass it to WDI */
13038 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13039 pWdaParams->pWdaContext = pWDA;
13040 /* Store param pointer as passed in by caller */
13041 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013042 status = WDI_8023MulticastListReq(
13043 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013044 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013045 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013046 if(IS_WDI_STATUS_FAILURE(status))
13047 {
13048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13049 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13051 vos_mem_free(pWdaParams->wdaMsgParam);
13052 vos_mem_free(pWdaParams);
13053 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013054 return CONVERT_WDI2VOS_STATUS(status) ;
13055}
Jeff Johnson295189b2012-06-20 16:38:30 -070013056/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013057 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013058 *
13059 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013060void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013061 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13062 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013063{
13064 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013066 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013067 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013068 if(NULL == pWdaParams)
13069 {
13070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013071 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013072 VOS_ASSERT(0) ;
13073 return ;
13074 }
13075
13076 vos_mem_free(pWdaParams->wdaMsgParam) ;
13077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13078 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013079 //print a msg, nothing else to do
13080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013081 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013082 return ;
13083}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013084
13085/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013086 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13087 * Free memory.
13088 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013089 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013090void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013091 void* pUserData)
13092{
13093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13094
13095 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13096 "<------ %s, wdiStatus: %d",
13097 __func__, wdiStatus);
13098
13099 if (NULL == pWdaParams)
13100 {
13101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13102 "%s: Invalid pWdaParams pointer", __func__);
13103 VOS_ASSERT(0);
13104 return;
13105 }
13106
13107 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13108 {
13109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13110 vos_mem_free(pWdaParams->wdaMsgParam);
13111 vos_mem_free(pWdaParams);
13112 }
13113
13114 return;
13115}
13116
Jeff Johnson295189b2012-06-20 16:38:30 -070013117/*
13118 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13119 * Request to WDI to set Receive Filters
13120 */
13121VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13122 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13123{
Jeff Johnson43971f52012-07-17 12:26:56 -070013124 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013125 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13126 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13127 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13128 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13129 tWDA_ReqParams *pWdaParams ;
13130 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013132 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013133 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13134 {
13135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013137 VOS_ASSERT(0);
13138 return VOS_STATUS_E_NOMEM;
13139 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013140 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13141 if(NULL == pWdaParams)
13142 {
13143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013144 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013145 VOS_ASSERT(0);
13146 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
13147 return VOS_STATUS_E_NOMEM;
13148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013149 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
13150 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
13151 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
13152 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013153 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
13154 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
13155
13156 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
13157 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013158
13159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13160 "FID %d FT %d NParams %d CT %d",
13161 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
13162 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
13163 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
13164 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070013165 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
13166 {
13167 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
13168 &pRcvPktFilterCfg->paramsData[i],
13169 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070013170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13171 "Proto %d Comp Flag %d \n",
13172 pwdiSetRcvPktFilterReqParamsType->
13173 wdiPktFilterCfg.paramsData[i].protocolLayer,
13174 pwdiSetRcvPktFilterReqParamsType->
13175 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070013176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13177 "Data Offset %d Data Len %d\n",
13178 pwdiSetRcvPktFilterReqParamsType->
13179 wdiPktFilterCfg.paramsData[i].dataOffset,
13180 pwdiSetRcvPktFilterReqParamsType->
13181 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13183 "CData: %d:%d:%d:%d:%d:%d\n",
13184 pwdiSetRcvPktFilterReqParamsType->
13185 wdiPktFilterCfg.paramsData[i].compareData[0],
13186 pwdiSetRcvPktFilterReqParamsType->
13187 wdiPktFilterCfg.paramsData[i].compareData[1],
13188 pwdiSetRcvPktFilterReqParamsType->
13189 wdiPktFilterCfg.paramsData[i].compareData[2],
13190 pwdiSetRcvPktFilterReqParamsType->
13191 wdiPktFilterCfg.paramsData[i].compareData[3],
13192 pwdiSetRcvPktFilterReqParamsType->
13193 wdiPktFilterCfg.paramsData[i].compareData[4],
13194 pwdiSetRcvPktFilterReqParamsType->
13195 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13197 "MData: %d:%d:%d:%d:%d:%d\n",
13198 pwdiSetRcvPktFilterReqParamsType->
13199 wdiPktFilterCfg.paramsData[i].dataMask[0],
13200 pwdiSetRcvPktFilterReqParamsType->
13201 wdiPktFilterCfg.paramsData[i].dataMask[1],
13202 pwdiSetRcvPktFilterReqParamsType->
13203 wdiPktFilterCfg.paramsData[i].dataMask[2],
13204 pwdiSetRcvPktFilterReqParamsType->
13205 wdiPktFilterCfg.paramsData[i].dataMask[3],
13206 pwdiSetRcvPktFilterReqParamsType->
13207 wdiPktFilterCfg.paramsData[i].dataMask[4],
13208 pwdiSetRcvPktFilterReqParamsType->
13209 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013211 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013212 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013213 /* Store Params pass it to WDI */
13214 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
13215 pWdaParams->pWdaContext = pWDA;
13216 /* Store param pointer as passed in by caller */
13217 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013218 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013219 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013220 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013221 if(IS_WDI_STATUS_FAILURE(status))
13222 {
13223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13224 "Failure in SetFilter(),free all the memory,status %d ",status);
13225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13226 vos_mem_free(pWdaParams->wdaMsgParam);
13227 vos_mem_free(pWdaParams);
13228 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013229 return CONVERT_WDI2VOS_STATUS(status) ;
13230}
Jeff Johnson295189b2012-06-20 16:38:30 -070013231/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013232 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013233 *
13234 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013235void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013236 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13237 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013238{
13239 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13240 tWDA_CbContext *pWDA;
13241 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13242 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13243 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13244 tANI_U8 i;
13245 vos_msg_t vosMsg;
13246
13247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013248 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013249 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13250
Jeff Johnsone7245742012-09-05 17:12:55 -070013251 if(NULL == pRcvFltPktMatchCntRsp)
13252 {
13253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013254 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013255 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013256 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013257 return ;
13258 }
13259
Jeff Johnson295189b2012-06-20 16:38:30 -070013260 if(NULL == pWdaParams)
13261 {
13262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013263 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013264 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013265 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013266 return ;
13267 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013268 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13269 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013270 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13271 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13272
13273 /* Message Header */
13274 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13275 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13276
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013277 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013278
13279 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13280 {
13281 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13282 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13283 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013284 /* VOS message wrapper */
13285 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13286 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13287 vosMsg.bodyval = 0;
13288 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13289 {
13290 /* free the mem and return */
13291 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13292 }
13293
13294 vos_mem_free(pWdaParams->wdaMsgParam) ;
13295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13296 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013297
13298 return;
13299}
13300/*
13301 * FUNCTION: WDA_FilterMatchCountReqCallback
13302 * Free memory and send RSP back to SME.
13303 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13304 */
13305void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13306{
13307 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13308 vos_msg_t vosMsg;
13309
13310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13311 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13312
13313 if(NULL == pWdaParams)
13314 {
13315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13316 "%s: pWdaParams received NULL", __func__);
13317 VOS_ASSERT(0);
13318 return;
13319 }
13320
13321 /* VOS message wrapper */
13322 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13323 vosMsg.bodyptr = NULL;
13324 vosMsg.bodyval = 0;
13325
13326 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13327 {
13328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13329 vos_mem_free(pWdaParams->wdaMsgParam);
13330 vos_mem_free(pWdaParams);
13331 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13332 }
13333
13334 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013335}
Jeff Johnson295189b2012-06-20 16:38:30 -070013336/*
13337 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13338 * Request to WDI to get PC Filter Match Count
13339 */
13340VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13341{
Jeff Johnson43971f52012-07-17 12:26:56 -070013342 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013343 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13344 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13345 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013347 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013348 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13349 {
13350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013352 VOS_ASSERT(0);
13353 return VOS_STATUS_E_NOMEM;
13354 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013355 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13356 if(NULL == pWdaParams)
13357 {
13358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013360 VOS_ASSERT(0);
13361 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13362 return VOS_STATUS_E_NOMEM;
13363 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013364
Yue Ma7f44bbe2013-04-12 11:47:39 -070013365 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13366 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013367
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013368 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13369 pRcvFltPktMatchRsp->bssId,
13370 sizeof(wpt_macAddr));
13371
Jeff Johnson295189b2012-06-20 16:38:30 -070013372 /* Store Params pass it to WDI */
13373 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13374 pWdaParams->pWdaContext = pWDA;
13375 /* Store param pointer as passed in by caller */
13376 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013377 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013378 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013379 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013380 if(IS_WDI_STATUS_FAILURE(status))
13381 {
13382 /* failure returned by WDI API */
13383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13384 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13386 vos_mem_free(pWdaParams) ;
13387 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13388 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13389 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013390 return CONVERT_WDI2VOS_STATUS(status) ;
13391}
Jeff Johnson295189b2012-06-20 16:38:30 -070013392/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013393 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013394 *
13395 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013396void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013397 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13398 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013399{
13400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013402 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013403/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13404 if(NULL == pWdaParams)
13405 {
13406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013407 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013408 VOS_ASSERT(0) ;
13409 return ;
13410 }
13411
13412 vos_mem_free(pWdaParams->wdaMsgParam) ;
13413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13414 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013415 //print a msg, nothing else to do
13416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013417 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013418 return ;
13419}
Jeff Johnson295189b2012-06-20 16:38:30 -070013420/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013421 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13422 * Free memory.
13423 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13424 */
13425void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13426{
13427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13428
13429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13430 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13431
13432 if(NULL == pWdaParams)
13433 {
13434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13435 "%s: Invalid pWdaParams pointer", __func__);
13436 VOS_ASSERT(0);
13437 return;
13438 }
13439
13440 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13441 {
13442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13443 vos_mem_free(pWdaParams->wdaMsgParam);
13444 vos_mem_free(pWdaParams);
13445 }
13446
13447 return;
13448}
13449/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013450 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13451 * Request to WDI to clear Receive Filters
13452 */
13453VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13454 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13455{
Jeff Johnson43971f52012-07-17 12:26:56 -070013456 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013457 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13458 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13459 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013461 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013462 if(NULL == pwdiRcvFltPktClearReqParamsType)
13463 {
13464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013466 VOS_ASSERT(0);
13467 return VOS_STATUS_E_NOMEM;
13468 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013469 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13470 if(NULL == pWdaParams)
13471 {
13472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013473 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013474 VOS_ASSERT(0);
13475 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13476 return VOS_STATUS_E_NOMEM;
13477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013478 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13479 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013480 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13481 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13482 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13483 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013484
Yue Ma7f44bbe2013-04-12 11:47:39 -070013485 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013486 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013487 /* Store Params pass it to WDI */
13488 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13489 pWdaParams->pWdaContext = pWDA;
13490 /* Store param pointer as passed in by caller */
13491 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013492 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013493 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013494 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013495 if(IS_WDI_STATUS_FAILURE(status))
13496 {
13497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13498 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013500 vos_mem_free(pWdaParams->wdaMsgParam);
13501 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013502 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013503 return CONVERT_WDI2VOS_STATUS(status) ;
13504}
13505#endif // WLAN_FEATURE_PACKET_FILTERING
13506
Jeff Johnson295189b2012-06-20 16:38:30 -070013507/*
13508 * FUNCTION: WDA_ProcessSetPowerParamsReq
13509 * Request to WDI to set power params
13510 */
13511VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13512 tSirSetPowerParamsReq *pPowerParams)
13513{
Jeff Johnson43971f52012-07-17 12:26:56 -070013514 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013515 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13516 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013517 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013519 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013520 if(NULL == pwdiSetPowerParamsReqInfo)
13521 {
13522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013523 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013524 VOS_ASSERT(0);
13525 return VOS_STATUS_E_NOMEM;
13526 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013527 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13528 if(NULL == pWdaParams)
13529 {
13530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013531 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013532 VOS_ASSERT(0);
13533 vos_mem_free(pwdiSetPowerParamsReqInfo);
13534 return VOS_STATUS_E_NOMEM;
13535 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013536
Jeff Johnson295189b2012-06-20 16:38:30 -070013537
13538 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13539 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013540 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13541 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013542 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13543 pPowerParams->uListenInterval;
13544 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13545 pPowerParams->uBcastMcastFilter;
13546 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13547 pPowerParams->uEnableBET;
13548 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13549 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070013550 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
13551 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013552 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13553 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013554
Jeff Johnson295189b2012-06-20 16:38:30 -070013555 /* Store Params pass it to WDI */
13556 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13557 pWdaParams->pWdaContext = pWDA;
13558 /* Store param pointer as passed in by caller */
13559 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013560 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013561 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013562 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013563 if(IS_WDI_STATUS_FAILURE(status))
13564 {
13565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13566 "Failure in Set power params REQ WDI API, free all the memory " );
13567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13568 vos_mem_free(pWdaParams->wdaMsgParam);
13569 pWdaParams->wdaWdiApiMsgParam = NULL;
13570 pWdaParams->wdaMsgParam = NULL;
13571 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013572 return CONVERT_WDI2VOS_STATUS(status) ;
13573}
13574
13575/*
13576 * FUNCTION: WDA_SetTmLevelRspCallback
13577 * Set TM Level response
13578 */
13579void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13580{
13581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13582
13583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013584 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013585
13586 if(NULL == pWdaParams)
13587 {
13588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013589 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013590 VOS_ASSERT(0) ;
13591 return ;
13592 }
13593
13594 /* Dose not need to send notification to upper layer
13595 * Just free allocated resources */
13596 if( pWdaParams != NULL )
13597 {
13598 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13599 {
13600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13601 }
13602 vos_mem_free(pWdaParams->wdaMsgParam) ;
13603 vos_mem_free(pWdaParams) ;
13604 }
13605}
13606
13607/*
13608 * FUNCTION: WDA_ProcessSetTmLevelReq
13609 * Set TM Level request
13610 */
13611VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13612 tAniSetTmLevelReq *setTmLevelReq)
13613{
13614 WDI_Status status = WDI_STATUS_SUCCESS ;
13615 tWDA_ReqParams *pWdaParams ;
13616 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13617 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13618 sizeof(WDI_SetTmLevelReqType)) ;
13619 if(NULL == wdiSetTmLevelReq)
13620 {
13621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013622 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013623 VOS_ASSERT(0);
13624 return VOS_STATUS_E_NOMEM;
13625 }
13626
13627 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13628 if(NULL == pWdaParams)
13629 {
13630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013632 VOS_ASSERT(0);
13633 vos_mem_free(wdiSetTmLevelReq);
13634 return VOS_STATUS_E_NOMEM;
13635 }
13636
13637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013638 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013639
13640 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
13641 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
13642
13643 pWdaParams->pWdaContext = pWDA;
13644 pWdaParams->wdaMsgParam = setTmLevelReq;
13645 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
13646
13647 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
13648 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
13649
13650 if(IS_WDI_STATUS_FAILURE(status))
13651 {
13652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080013653 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070013654 vos_mem_free(pWdaParams->wdaMsgParam) ;
13655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13656 vos_mem_free(pWdaParams) ;
13657 }
13658
13659 return CONVERT_WDI2VOS_STATUS(status) ;
13660}
13661
13662VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
13663 tpTxControlParams pTxCtrlParam)
13664{
13665 VOS_STATUS wdaStatus;
13666
13667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013668 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013669 if( pTxCtrlParam == NULL )
13670 {
13671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013672 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013673 return VOS_STATUS_E_FAILURE;
13674 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013675 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
13676 {
13677 wdaStatus = WDA_SuspendDataTx(pWDA);
13678 }
13679 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
13680 {
13681 wdaStatus = WDA_ResumeDataTx(pWDA);
13682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013683 return wdaStatus;
13684}
13685
13686 /* FUNCTION WDA_featureCapsExchange
13687 * WDA API to invoke capability exchange between host and FW.
13688 */
13689void WDA_featureCapsExchange(v_PVOID_t pVosContext)
13690{
13691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013692 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013693 WDI_featureCapsExchangeReq( NULL, pVosContext);
13694}
13695
Yathish9f22e662012-12-10 14:21:35 -080013696/* FUNCTION WDA_disableCapablityFeature
13697 * WDA API to diable Active mode offload in host.
13698 */
13699void WDA_disableCapablityFeature(tANI_U8 feature_index)
13700{
13701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13702 "%s:enter", __func__ );
13703 WDI_disableCapablityFeature(feature_index);
13704}
13705
Jeff Johnson295189b2012-06-20 16:38:30 -070013706 /* FUNCTION WDA_getHostWlanFeatCaps
13707 * Wrapper for WDI API, that will return if the feature (enum value).passed
13708 * to this API is supported or not in Host
13709 * return value
13710 * 0 - implies feature is NOT Supported
13711 * any non zero value - implies feature is SUPPORTED
13712 */
13713tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
13714{
13715 return WDI_getHostWlanFeatCaps(featEnumValue);
13716}
13717
13718 /* FUNCTION WDA_getFwWlanFeatCaps
13719 * Wrapper for WDI API, that will return if the feature (enum value).passed
13720 * to this API is supported or not in FW
13721 * return value
13722 * 0 - implies feature is NOT Supported
13723 * any non zero value - implies feature is SUPPORTED
13724 */
13725tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
13726{
13727 return WDI_getFwWlanFeatCaps(featEnumValue);
13728}
13729
13730/*
13731 * FUNCTION: WDA_shutdown
13732 * Shutdown WDA/WDI without handshaking with Riva.
13733 * Synchronous function.
13734 */
13735VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
13736{
13737 WDI_Status wdiStatus;
13738 //tANI_U8 eventIdx = 0;
13739 VOS_STATUS status = VOS_STATUS_SUCCESS;
13740 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013741 if (NULL == pWDA)
13742 {
13743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013744 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013745 VOS_ASSERT(0);
13746 return VOS_STATUS_E_FAILURE;
13747 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013748 /* FTM mode stay START_STATE */
13749 if( (WDA_READY_STATE != pWDA->wdaState) &&
13750 (WDA_INIT_STATE != pWDA->wdaState) &&
13751 (WDA_START_STATE != pWDA->wdaState) )
13752 {
13753 VOS_ASSERT(0);
13754 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013755
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013756 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
13757 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070013758 {
13759 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013760 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013761 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013762
Jeff Johnson295189b2012-06-20 16:38:30 -070013763 /* call WDI shutdown */
13764 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070013765 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
13766 {
13767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13768 "error in WDA Stop" );
13769 status = VOS_STATUS_E_FAILURE;
13770 }
13771 /* WDI stop is synchrnous, shutdown is complete when it returns */
13772 pWDA->wdaState = WDA_STOP_STATE;
13773
Jeff Johnson295189b2012-06-20 16:38:30 -070013774 /* shutdown should perform the stop & close actions. */
13775 /* Destroy the event */
13776 status = vos_event_destroy(&pWDA->txFrameEvent);
13777 if(!VOS_IS_STATUS_SUCCESS(status))
13778 {
13779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13780 "VOS Event destroy failed - status = %d\n", status);
13781 status = VOS_STATUS_E_FAILURE;
13782 }
13783 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
13784 if(!VOS_IS_STATUS_SUCCESS(status))
13785 {
13786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13787 "VOS Event destroy failed - status = %d\n", status);
13788 status = VOS_STATUS_E_FAILURE;
13789 }
13790 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
13791 if(!VOS_IS_STATUS_SUCCESS(status))
13792 {
13793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13794 "VOS Event destroy failed - status = %d\n", status);
13795 status = VOS_STATUS_E_FAILURE;
13796 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013797 /* free WDA context */
13798 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
13799 if ( !VOS_IS_STATUS_SUCCESS(status) )
13800 {
13801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13802 "error in WDA close " );
13803 status = VOS_STATUS_E_FAILURE;
13804 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013805 return status;
13806}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013807
Jeff Johnsone7245742012-09-05 17:12:55 -070013808/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013809 * FUNCTION: WDA_setNeedShutdown
13810 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070013811 */
13812
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013813void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070013814{
13815 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013816 if(pWDA == NULL)
13817 {
13818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13819 "Could not get the WDA Context pointer" );
13820 return;
13821 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013822 pWDA->needShutdown = TRUE;
13823}
13824/*
13825 * FUNCTION: WDA_needShutdown
13826 * WDA needs a shutdown
13827 */
13828
13829v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
13830{
13831 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013832 if(pWDA == NULL)
13833 {
13834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13835 "Could not get the WDA Context pointer" );
13836 return 0;
13837 }
13838 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070013839}
13840
Mohit Khanna4a70d262012-09-11 16:30:12 -070013841#ifdef WLAN_FEATURE_11AC
13842/*
13843 * FUNCTION: WDA_SetBeaconFilterReqCallback
13844 *
13845 */
13846void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
13847{
13848 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013850 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013851 if(NULL == pWdaParams)
13852 {
13853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013854 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013855 VOS_ASSERT(0) ;
13856 return ;
13857 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013858
Mohit Khanna4a70d262012-09-11 16:30:12 -070013859 vos_mem_free(pWdaParams->wdaMsgParam) ;
13860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13861 vos_mem_free(pWdaParams) ;
13862 /*
13863 * No respone required for SetBeaconFilter req so just free the request
13864 * param here
13865 */
13866
13867 return ;
13868}
13869
13870VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
13871 tUpdateVHTOpMode *pData)
13872{
13873 WDI_Status status = WDI_STATUS_SUCCESS ;
13874 tWDA_ReqParams *pWdaParams ;
13875 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
13876 sizeof(WDI_UpdateVHTOpMode)) ;
13877 if(NULL == wdiTemp)
13878 {
13879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013880 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013881 VOS_ASSERT(0);
13882 return VOS_STATUS_E_NOMEM;
13883 }
13884 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13885 if(NULL == pWdaParams)
13886 {
13887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013888 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013889 VOS_ASSERT(0);
13890 vos_mem_free(wdiTemp);
13891 return VOS_STATUS_E_NOMEM;
13892 }
13893
13894 wdiTemp->opMode = pData->opMode;
13895 wdiTemp->staId = pData->staId;
13896
13897 pWdaParams->pWdaContext = pWDA;
13898 /* Store Req pointer, as this will be used for response */
13899 pWdaParams->wdaMsgParam = (void *)pData;
13900 /* store Params pass it to WDI */
13901 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
13902
13903 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
13904
13905 if(IS_WDI_STATUS_FAILURE(status))
13906 {
13907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13908 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
13909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13910 vos_mem_free(pWdaParams->wdaMsgParam);
13911 vos_mem_free(pWdaParams);
13912 }
13913 return CONVERT_WDI2VOS_STATUS(status) ;
13914}
13915#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013916
13917/*==========================================================================
13918 FUNCTION WDA_TransportChannelDebug
13919
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070013920 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013921 Display Transport Channel debugging information
13922 User may request to display DXE channel snapshot
13923 Or if host driver detects any abnormal stcuk may display
13924
13925 PARAMETERS
schang6295e542013-03-12 15:31:23 -070013926 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080013927 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013928 enableStallDetect : Enable stall detect feature
13929 This feature will take effect to data performance
13930 Not integrate till fully verification
13931
13932 RETURN VALUE
13933 NONE
13934
13935===========================================================================*/
13936void WDA_TransportChannelDebug
13937(
schang6295e542013-03-12 15:31:23 -070013938 tpAniSirGlobal pMac,
13939 v_BOOL_t displaySnapshot,
13940 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013941)
13942{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070013943 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013944 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013945}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070013946
13947/*==========================================================================
13948 FUNCTION WDA_SetEnableSSR
13949
13950 DESCRIPTION
13951 API to enable/disable SSR on WDI timeout
13952
13953 PARAMETERS
13954 enableSSR : enable/disable SSR
13955
13956 RETURN VALUE
13957 NONE
13958
13959===========================================================================*/
13960void WDA_SetEnableSSR(v_BOOL_t enableSSR)
13961{
13962 WDI_SetEnableSSR(enableSSR);
13963}