blob: d735353cc8b9a06d0a03639da886c7f19049e02d [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
186VOS_STATUS WDA_ProcessStartRoamCandidatelookupReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
187void 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) ;
1481
Jeff Johnson295189b2012-06-20 16:38:30 -07001482 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001483#ifdef WLAN_DEBUG
1484 {
1485 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001486 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1487 "****** Dumping CFG TLV ***** ");
1488 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1489 {
1490 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1491 "%02x %02x %02x %02x %02x %02x %02x %02x",
1492 tlvStructStart[i],
1493 tlvStructStart[i+1],
1494 tlvStructStart[i+2],
1495 tlvStructStart[i+3],
1496 tlvStructStart[i+4],
1497 tlvStructStart[i+5],
1498 tlvStructStart[i+6],
1499 tlvStructStart[i+7]);
1500 }
1501 /* Dump the bytes in the last line*/
1502 for (; i < wdiStartParams->usConfigBufferLen; i++)
1503 {
1504 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1505 "%02x ",tlvStructStart[i]);
1506 }
1507 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1508 "**************************** ");
1509 }
1510#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001511 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001512handle_failure:
1513 vos_mem_free(configParam);
1514 return VOS_STATUS_E_FAILURE;
1515}
Jeff Johnson295189b2012-06-20 16:38:30 -07001516/*
1517 * FUNCTION: WDA_wdiCompleteCB
1518 * call the voss call back function
1519 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001520void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001521{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1523 tWDA_CbContext *wdaContext;
1524
1525 if(NULL == pWdaParams)
1526 {
1527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001528 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001529 VOS_ASSERT(0) ;
1530 return ;
1531 }
1532
1533 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1534
Jeff Johnson295189b2012-06-20 16:38:30 -07001535 if (NULL == wdaContext)
1536 {
1537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001538 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001539 return ;
1540 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001541
Jeff Johnson295189b2012-06-20 16:38:30 -07001542 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001543 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001544 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001546 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001547 vos_mem_free(pWdaParams);
1548
Jeff Johnson295189b2012-06-20 16:38:30 -07001549 if(WDI_STATUS_SUCCESS != status)
1550 {
1551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1552 "WDI stop callback returned failure" );
1553 VOS_ASSERT(0) ;
1554 }
1555 else
1556 {
1557 wdaContext->wdaState = WDA_STOP_STATE;
1558 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001559
Jeff Johnson295189b2012-06-20 16:38:30 -07001560 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001561 vos_WDAComplete_cback(wdaContext->pVosContext);
1562
Jeff Johnson295189b2012-06-20 16:38:30 -07001563 return ;
1564}
Jeff Johnson295189b2012-06-20 16:38:30 -07001565/*
1566 * FUNCTION: WDA_stop
1567 * call WDI_stop
1568 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001569VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1570{
1571 WDI_Status wdiStatus;
1572 VOS_STATUS status = VOS_STATUS_SUCCESS;
1573 WDI_StopReqParamsType *wdiStopReq;
1574 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001575 tWDA_ReqParams *pWdaParams ;
1576
Jeff Johnson295189b2012-06-20 16:38:30 -07001577 if (NULL == pWDA)
1578 {
1579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001580 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001581 VOS_ASSERT(0);
1582 return VOS_STATUS_E_FAILURE;
1583 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001584 if (pWDA->wdiFailed == true)
1585 {
1586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001587 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001588 return VOS_STATUS_E_ALREADY;
1589 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001590
Jeff Johnson295189b2012-06-20 16:38:30 -07001591 /* FTM mode stay START_STATE */
1592 if( (WDA_READY_STATE != pWDA->wdaState) &&
1593 (WDA_INIT_STATE != pWDA->wdaState) &&
1594 (WDA_START_STATE != pWDA->wdaState) )
1595 {
1596 VOS_ASSERT(0);
1597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001598 wdiStopReq = (WDI_StopReqParamsType *)
1599 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1600 if(NULL == wdiStopReq)
1601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001603 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001604 VOS_ASSERT(0);
1605 return VOS_STATUS_E_NOMEM;
1606 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001607
Jeff Johnson295189b2012-06-20 16:38:30 -07001608 wdiStopReq->wdiStopReason = reason;
1609 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001610
1611 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1612 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001613 {
1614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001616 VOS_ASSERT(0);
1617 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001618 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001619 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001620
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001621 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1622 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001623 {
1624 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001625 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001626 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001627
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001628 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1629 pWdaParams->wdaMsgParam = NULL;
1630 pWdaParams->pWdaContext = pWDA;
1631
Jeff Johnson295189b2012-06-20 16:38:30 -07001632 /* call WDI stop */
1633 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001634 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1635
Jeff Johnson295189b2012-06-20 16:38:30 -07001636 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1637 {
1638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1639 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1641 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001642 status = VOS_STATUS_E_FAILURE;
1643 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001644 return status;
1645}
Jeff Johnson295189b2012-06-20 16:38:30 -07001646/*
1647 * FUNCTION: WDA_close
1648 * call WDI_close and free the WDA context
1649 */
1650VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1651{
Jeff Johnson43971f52012-07-17 12:26:56 -07001652 VOS_STATUS status = VOS_STATUS_SUCCESS;
1653 WDI_Status wstatus;
1654 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001655 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001656 if (NULL == wdaContext)
1657 {
1658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001659 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001660 return VOS_STATUS_E_FAILURE;
1661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001662 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1663 (WDA_STOP_STATE != wdaContext->wdaState))
1664 {
1665 VOS_ASSERT(0);
1666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001667 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001668 wstatus = WDI_Close();
1669 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001670 {
1671 status = VOS_STATUS_E_FAILURE;
1672 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001673 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001674 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001675 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1676 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001677 {
1678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1679 "WDI Sync Event destroy failed - status = %d\n", status);
1680 status = VOS_STATUS_E_FAILURE;
1681 }
1682
Jeff Johnson43971f52012-07-17 12:26:56 -07001683 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001684 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001685 {
1686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1687 "VOS Event destroy failed - status = %d\n", status);
1688 status = VOS_STATUS_E_FAILURE;
1689 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001690 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001691 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001692 {
1693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1694 "VOS Event destroy failed - status = %d\n", status);
1695 status = VOS_STATUS_E_FAILURE;
1696 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001697 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001698 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001699 {
1700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1701 "VOS Event destroy failed - status = %d\n", status);
1702 status = VOS_STATUS_E_FAILURE;
1703 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001704 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001705 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001706 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001707 {
1708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1709 "error in WDA close " );
1710 status = VOS_STATUS_E_FAILURE;
1711 }
1712 return status;
1713}
Jeff Johnson295189b2012-06-20 16:38:30 -07001714/*
1715 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1716 * returns 1 if the compiled version is greater than or equal to the input version
1717 */
1718
1719uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1720{
1721 VOS_STATUS status = VOS_STATUS_SUCCESS;
1722 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1723 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001724 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1726 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1727 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1728 (compiledVersion.revision >= revision)))
1729 return 1;
1730 else
1731 return 0;
1732}
Jeff Johnson295189b2012-06-20 16:38:30 -07001733/*
1734 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1735 * returns 1 if the compiled version is greater than or equal to the input version
1736 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001737uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1738{
1739 VOS_STATUS status = VOS_STATUS_SUCCESS;
1740 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1741 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001742 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001743 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1744 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1745 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1746 (reportedVersion.revision >= revision)))
1747 return 1;
1748 else
1749 return 0;
1750}
Jeff Johnson295189b2012-06-20 16:38:30 -07001751/*
1752 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1753 * Returns the version of the WCNSS WLAN API with which the HOST
1754 * device driver was compiled
1755 */
1756VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1757 tSirVersionType *pVersion)
1758{
1759 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001761 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001762 if ((NULL == pvosGCtx) || (NULL == pVersion))
1763 {
1764 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001765 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 VOS_ASSERT(0);
1767 return VOS_STATUS_E_FAILURE;
1768 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001769 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1770 if (NULL == pWDA )
1771 {
1772 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001773 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001774 VOS_ASSERT(0);
1775 return VOS_STATUS_E_FAILURE;
1776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001777 *pVersion = pWDA->wcnssWlanCompiledVersion;
1778 return VOS_STATUS_SUCCESS;
1779}
Jeff Johnson295189b2012-06-20 16:38:30 -07001780/*
1781 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1782 * Returns the version of the WCNSS WLAN API with which the WCNSS
1783 * device driver was compiled
1784 */
1785VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1786 tSirVersionType *pVersion)
1787{
1788 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001789 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001790 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001791 if ((NULL == pvosGCtx) || (NULL == pVersion))
1792 {
1793 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001794 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 VOS_ASSERT(0);
1796 return VOS_STATUS_E_FAILURE;
1797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1799 if (NULL == pWDA )
1800 {
1801 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001802 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001803 VOS_ASSERT(0);
1804 return VOS_STATUS_E_FAILURE;
1805 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001806 *pVersion = pWDA->wcnssWlanReportedVersion;
1807 return VOS_STATUS_SUCCESS;
1808}
Jeff Johnson295189b2012-06-20 16:38:30 -07001809/*
1810 * FUNCTION: WDA_GetWcnssSoftwareVersion
1811 * Returns the WCNSS Software version string
1812 */
1813VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1814 tANI_U8 *pVersion,
1815 tANI_U32 versionBufferSize)
1816{
1817 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001818 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001819 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001820 if ((NULL == pvosGCtx) || (NULL == pVersion))
1821 {
1822 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001823 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 VOS_ASSERT(0);
1825 return VOS_STATUS_E_FAILURE;
1826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001827 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1828 if (NULL == pWDA )
1829 {
1830 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001831 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001832 VOS_ASSERT(0);
1833 return VOS_STATUS_E_FAILURE;
1834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001835 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1836 return VOS_STATUS_SUCCESS;
1837}
Jeff Johnson295189b2012-06-20 16:38:30 -07001838/*
1839 * FUNCTION: WDA_GetWcnssHardwareVersion
1840 * Returns the WCNSS Hardware version string
1841 */
1842VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1843 tANI_U8 *pVersion,
1844 tANI_U32 versionBufferSize)
1845{
1846 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001847 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001848 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001849 if ((NULL == pvosGCtx) || (NULL == pVersion))
1850 {
1851 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001852 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001853 VOS_ASSERT(0);
1854 return VOS_STATUS_E_FAILURE;
1855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001856 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1857 if (NULL == pWDA )
1858 {
1859 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001860 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 VOS_ASSERT(0);
1862 return VOS_STATUS_E_FAILURE;
1863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001864 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1865 return VOS_STATUS_SUCCESS;
1866}
Jeff Johnson295189b2012-06-20 16:38:30 -07001867/*
1868 * FUNCTION: WDA_WniCfgDnld
1869 * Trigger CFG Download
1870 */
1871VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1872{
1873 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001874 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001875 v_VOID_t *pFileImage = NULL;
1876 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001877 v_VOID_t *pCfgBinary = NULL;
1878 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001879 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07001880
Jeff Johnson295189b2012-06-20 16:38:30 -07001881 if (NULL == pMac )
1882 {
1883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001884 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001885 VOS_ASSERT(0);
1886 return VOS_STATUS_E_FAILURE;
1887 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001888 /* get the number of bytes in the CFG Binary... */
1889 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1890 &cbFileImageSize );
1891 if ( VOS_STATUS_E_NOMEM != vosStatus )
1892 {
1893 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1894 "Error obtaining binary size" );
1895 goto fail;
1896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001897 // malloc a buffer to read in the Configuration binary file.
1898 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001899 if ( NULL == pFileImage )
1900 {
1901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1902 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1903 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001904 vosStatus = VOS_STATUS_E_NOMEM;
1905 goto fail;
1906 }
1907
1908 /* Get the entire CFG file image... */
1909 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1910 &cbFileImageSize );
1911 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1912 {
1913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1914 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1915 cbFileImageSize );
1916 goto fail;
1917 }
1918
1919 /*
1920 * Validate the binary image. This function will return a pointer
1921 * and length where the CFG binary is located within the binary image file.
1922 */
1923 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1924 &pCfgBinary, &cbCfgBinarySize );
1925 if ( VOS_FALSE == bStatus )
1926 {
1927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1928 "Error: Cannot find STA CFG in binary image file" );
1929 vosStatus = VOS_STATUS_E_FAILURE;
1930 goto fail;
1931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001932 /*
1933 * TODO: call the config download function
1934 * for now calling the existing cfg download API
1935 */
1936 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07001937 vosStatus = VOS_STATUS_SUCCESS;
1938
1939 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07001940
1941fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07001942 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 return vosStatus;
1944}
Jeff Johnson295189b2012-06-20 16:38:30 -07001945/* -----------------------------------------------------------------
1946 * WDI interface
1947 * -----------------------------------------------------------------
1948 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001949/*
1950 * FUNCTION: WDA_suspendDataTxCallback
1951 * call back function called from TL after suspend Transmission
1952 */
1953VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1954 v_U8_t* ucSTAId,
1955 VOS_STATUS vosStatus)
1956{
1957 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001959 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001960 if (NULL == pWDA )
1961 {
1962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001963 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001964 VOS_ASSERT(0);
1965 return VOS_STATUS_E_FAILURE;
1966 }
1967 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1968 {
1969 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1970 }
1971 else
1972 {
1973 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001975 /* Trigger the event to bring the WDA TL suspend function to come
1976 * out of wait*/
1977 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1978 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1979 {
1980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1981 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001983 /* If TL suspended had timedout before this callback was called, resume back
1984 * TL.*/
1985 if (pWDA->txSuspendTimedOut)
1986 {
1987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1988 "Late TLSuspendCallback, resuming TL back again\n");
1989 WDA_ResumeDataTx(pWDA);
1990 pWDA->txSuspendTimedOut = FALSE;
1991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001992 return VOS_STATUS_SUCCESS;
1993}
Jeff Johnson295189b2012-06-20 16:38:30 -07001994/*
1995 * FUNCTION: WDA_suspendDataTx
1996 * Update TL to suspend the data Transmission
1997 */
1998VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1999{
2000 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2001 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002002
2003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002004 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002005 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002006 if (pWDA->txSuspendTimedOut)
2007 {
2008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2009 "TL suspend timedout previously, CB not called yet\n");
2010 return status;
2011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002012 /* Reset the event to be not signalled */
2013 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2014 if(!VOS_IS_STATUS_SUCCESS(status))
2015 {
2016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2017 "VOS Event reset failed - status = %d\n",status);
2018 return VOS_STATUS_E_FAILURE;
2019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002021 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002022 WDA_SuspendDataTxCallback);
2023 if(status != VOS_STATUS_SUCCESS)
2024 {
2025 return status;
2026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 /* Wait for the event to be set by the TL, to get the response of
2028 * suspending the TX queues, this event should be set by the Callback
2029 * function called by TL*/
2030 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2031 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2032 if(!VOS_IS_STATUS_SUCCESS(status))
2033 {
2034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2035 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002036 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002037 /* Set this flag to true when TL suspend times out, so that when TL
2038 * suspend eventually happens and calls the callback, TL can be resumed
2039 * right away by looking at this flag when true.*/
2040 pWDA->txSuspendTimedOut = TRUE;
2041 }
2042 else
2043 {
2044 pWDA->txSuspendTimedOut = FALSE;
2045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2047 {
2048 status = VOS_STATUS_SUCCESS;
2049 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002050 return status;
2051}
Jeff Johnson295189b2012-06-20 16:38:30 -07002052/*
2053 * FUNCTION: WDA_resumeDataTx
2054 * Update TL to resume the data Transmission
2055 */
2056VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2057{
2058 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002059
2060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002061 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002062
2063 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 return status;
2065}
Jeff Johnson295189b2012-06-20 16:38:30 -07002066/*
2067 * FUNCTION: WDA_InitScanReqCallback
2068 * Trigger Init SCAN callback
2069 */
2070void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2071{
2072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2073 tWDA_CbContext *pWDA;
2074 tInitScanParams *pWDA_ScanParam ;
2075 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002077 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002078 if(NULL == pWdaParams)
2079 {
2080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002081 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002082 VOS_ASSERT(0) ;
2083 return ;
2084 }
2085 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2086 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002087 if(NULL == pWDA_ScanParam)
2088 {
2089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002090 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002091 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2093 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002094 return ;
2095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 if(WDI_STATUS_SUCCESS != wdiStatus)
2097 {
2098 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002099 if(VOS_STATUS_SUCCESS != status)
2100 {
2101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002102 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002103 }
2104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002105 /* free WDI command buffer */
2106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002107 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002108
Jeff Johnson295189b2012-06-20 16:38:30 -07002109
2110 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002111 /* without converting the Status to Failure or Success Just
2112 pass the same status to lim */
2113 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002114 /* send SCAN RSP message back to PE */
2115 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002116 return ;
2117}
2118
2119/*
2120 * FUNCTION: WDA_ProcessInitScanReq
2121 * Trigger Init SCAN in DAL
2122 */
2123VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2124 tInitScanParams *initScanParams)
2125{
2126 WDI_Status status = WDI_STATUS_SUCCESS ;
2127 WDI_InitScanReqParamsType *wdiInitScanParam =
2128 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2129 sizeof(WDI_InitScanReqParamsType)) ;
2130 tWDA_ReqParams *pWdaParams;
2131 tANI_U8 i = 0;
2132
2133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002134 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002135 if(NULL == wdiInitScanParam)
2136 {
2137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002138 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002139 VOS_ASSERT(0);
2140 return VOS_STATUS_E_NOMEM;
2141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002142 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2143 if(NULL == pWdaParams)
2144 {
2145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002147 VOS_ASSERT(0);
2148 vos_mem_free(wdiInitScanParam);
2149 return VOS_STATUS_E_NOMEM;
2150 }
2151
2152 /* Copy init Scan params to WDI structure */
2153 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2154 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2155 sizeof(tSirMacAddr)) ;
2156 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2157 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2158 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2160 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002161 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2162 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002163 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2164 {
2165 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2166 initScanParams->scanEntry.bssIdx[i] ;
2167 }
2168
2169 /* if Frame length, copy macMgmtHdr or WDI structure */
2170 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2171 {
2172 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2173 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2174 }
2175 wdiInitScanParam->wdiReqStatusCB = NULL ;
2176
Jeff Johnson295189b2012-06-20 16:38:30 -07002177 /* Store Init Req pointer, as this will be used for response */
2178 pWdaParams->pWdaContext = pWDA;
2179 pWdaParams->wdaMsgParam = initScanParams;
2180 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002181 /* first try to suspend TX */
2182 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002183 if(WDI_STATUS_SUCCESS != status)
2184 {
2185 goto handleWdiFailure;
2186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 /* call DAL API to pass init scan request to DAL */
2188 status = WDI_InitScanReq(wdiInitScanParam,
2189 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 if(IS_WDI_STATUS_FAILURE(status))
2191 {
2192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2193 "error in WDA Init Scan, Resume Tx " );
2194 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002195 VOS_ASSERT(0) ;
2196
2197 goto handleWdiFailure;
2198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002200handleWdiFailure:
2201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2202 "Failure in WDI Api, free all the memory " );
2203 /* free WDI command buffer */
2204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2205 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002206 /* send Failure to PE */
2207 initScanParams->status = eSIR_FAILURE ;
2208 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002209 return CONVERT_WDI2VOS_STATUS(status) ;
2210}
2211
Jeff Johnson295189b2012-06-20 16:38:30 -07002212/*
2213 * FUNCTION: WDA_StartScanReqCallback
2214 * send Start SCAN RSP back to PE
2215 */
2216void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2217 void* pUserData)
2218{
2219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2220 tWDA_CbContext *pWDA;
2221 tStartScanParams *pWDA_ScanParam;
2222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002223 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 if(NULL == pWdaParams)
2225 {
2226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002227 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 VOS_ASSERT(0) ;
2229 return ;
2230 }
2231 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2232 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 if(NULL == pWDA_ScanParam)
2234 {
2235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002236 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002237 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002238 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 return ;
2240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002241 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2242 {
2243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002244 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002246 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 return ;
2248 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2250 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002251
Jeff Johnson295189b2012-06-20 16:38:30 -07002252
2253 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002254 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002255 /* send SCAN RSP message back to PE */
2256 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002257 return ;
2258}
2259
Jeff Johnson295189b2012-06-20 16:38:30 -07002260/*
2261 * FUNCTION: WDA_ProcessStartScanReq
2262 * Trigger start SCAN in WDI
2263 */
2264VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2265 tStartScanParams *startScanParams)
2266{
2267 WDI_Status status = WDI_STATUS_SUCCESS;
2268 WDI_StartScanReqParamsType *wdiStartScanParams =
2269 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2270 sizeof(WDI_StartScanReqParamsType)) ;
2271 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002273 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002274 if(NULL == wdiStartScanParams)
2275 {
2276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 VOS_ASSERT(0);
2279 return VOS_STATUS_E_NOMEM;
2280 }
2281 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2282 if(NULL == pWdaParams)
2283 {
2284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002286 VOS_ASSERT(0);
2287 vos_mem_free(wdiStartScanParams);
2288 return VOS_STATUS_E_NOMEM;
2289 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002290 /* Copy init Scan params to WDI structure */
2291 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2292 wdiStartScanParams->wdiReqStatusCB = NULL ;
2293
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 /* Store Init Req pointer, as this will be used for response */
2295 /* store Params pass it to WDI */
2296 pWdaParams->pWdaContext = pWDA;
2297 pWdaParams->wdaMsgParam = startScanParams;
2298 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 /* call DAL API to pass init scan request to DAL */
2300 status = WDI_StartScanReq(wdiStartScanParams,
2301 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 /* failure returned by WDI API */
2303 if(IS_WDI_STATUS_FAILURE(status))
2304 {
2305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2306 "Failure in Start Scan WDI API, free all the memory "
2307 "It should be due to previous abort scan." );
2308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2309 vos_mem_free(pWdaParams) ;
2310 startScanParams->status = eSIR_FAILURE ;
2311 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 return CONVERT_WDI2VOS_STATUS(status) ;
2314}
Jeff Johnson295189b2012-06-20 16:38:30 -07002315/*
2316 * FUNCTION: WDA_EndScanReqCallback
2317 * END SCAN callback
2318 */
2319void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2320{
2321 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2322 tWDA_CbContext *pWDA;
2323 tEndScanParams *endScanParam;
2324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002325 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 if(NULL == pWdaParams)
2327 {
2328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002329 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 VOS_ASSERT(0) ;
2331 return ;
2332 }
2333 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2334 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002335 if(NULL == endScanParam)
2336 {
2337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002338 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002339 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2341 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002342 return ;
2343 }
2344
2345 /* Free WDI command buffer */
2346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2347 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002348 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002349 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002350 /* send response back to PE */
2351 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2352 return ;
2353}
2354
Jeff Johnson295189b2012-06-20 16:38:30 -07002355/*
2356 * FUNCTION: WDA_ProcessEndScanReq
2357 * Trigger END SCAN in WDI
2358 */
2359VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2360 tEndScanParams *endScanParams)
2361{
2362 WDI_Status status = WDI_STATUS_SUCCESS;
2363 WDI_EndScanReqParamsType *wdiEndScanParams =
2364 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2365 sizeof(WDI_EndScanReqParamsType)) ;
2366 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002368 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002369 if(NULL == wdiEndScanParams)
2370 {
2371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002372 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002373 VOS_ASSERT(0);
2374 return VOS_STATUS_E_NOMEM;
2375 }
2376 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2377 if(NULL == pWdaParams)
2378 {
2379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002380 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 VOS_ASSERT(0);
2382 vos_mem_free(wdiEndScanParams);
2383 return VOS_STATUS_E_NOMEM;
2384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 /* Copy init Scan params to WDI structure */
2386 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2387 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 /* Store Init Req pointer, as this will be used for response */
2389 /* store Params pass it to WDI */
2390 pWdaParams->pWdaContext = pWDA;
2391 pWdaParams->wdaMsgParam = endScanParams;
2392 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 /* call DAL API to pass init scan request to DAL */
2394 status = WDI_EndScanReq(wdiEndScanParams,
2395 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 if(IS_WDI_STATUS_FAILURE(status))
2397 {
2398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2399 "Failure in End Scan WDI API, free all the memory "
2400 "It should be due to previous abort scan." );
2401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2402 vos_mem_free(pWdaParams) ;
2403 endScanParams->status = eSIR_FAILURE ;
2404 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002406 return CONVERT_WDI2VOS_STATUS(status) ;
2407}
Jeff Johnson295189b2012-06-20 16:38:30 -07002408/*
2409 * FUNCTION: WDA_FinishScanReqCallback
2410 * Trigger Finish SCAN callback
2411 */
2412void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2413{
2414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2415 tWDA_CbContext *pWDA;
2416 tFinishScanParams *finishScanParam;
2417 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002419 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 if(NULL == pWdaParams)
2421 {
2422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002423 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 VOS_ASSERT(0) ;
2425 return ;
2426 }
2427
2428 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2429 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002430 if(NULL == finishScanParam)
2431 {
2432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002433 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2436 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 return ;
2438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2440 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 /*
2442 * Now Resume TX, if we reached here means, TX is already suspended, we
2443 * have to resume it unconditionaly
2444 */
2445 status = WDA_ResumeDataTx(pWDA) ;
2446
2447 if(VOS_STATUS_SUCCESS != status)
2448 {
2449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002450 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002452 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2454 return ;
2455}
Jeff Johnson295189b2012-06-20 16:38:30 -07002456/*
2457 * FUNCTION: WDA_ProcessFinshScanReq
2458 * Trigger Finish SCAN in WDI
2459 */
2460VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2461 tFinishScanParams *finishScanParams)
2462{
2463 WDI_Status status = WDI_STATUS_SUCCESS;
2464 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2465 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2466 sizeof(WDI_FinishScanReqParamsType)) ;
2467 tWDA_ReqParams *pWdaParams ;
2468 tANI_U8 i = 0;
2469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002470 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002471 if(NULL == wdiFinishScanParams)
2472 {
2473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 VOS_ASSERT(0);
2476 return VOS_STATUS_E_NOMEM;
2477 }
2478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2479 if(NULL == pWdaParams)
2480 {
2481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002483 VOS_ASSERT(0);
2484 vos_mem_free(wdiFinishScanParams);
2485 return VOS_STATUS_E_NOMEM;
2486 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002487 /* Copy init Scan params to WDI structure */
2488 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2489 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2490 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2492 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2493 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2494 finishScanParams->frameLength ;
2495 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2496 finishScanParams->currentOperChannel ;
2497 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2498 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2499 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002500 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2501 {
2502 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2503 finishScanParams->scanEntry.bssIdx[i] ;
2504 }
2505
2506
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 /* if Frame length, copy macMgmtHdr ro WDI structure */
2508 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2509 {
2510 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2511 &finishScanParams->macMgmtHdr,
2512 sizeof(WDI_MacMgmtHdr)) ;
2513 }
2514 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 /* Store Init Req pointer, as this will be used for response */
2516 /* store Params pass it to WDI */
2517 pWdaParams->pWdaContext = pWDA;
2518 pWdaParams->wdaMsgParam = finishScanParams;
2519 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 /* call DAL API to pass init scan request to DAL */
2521 status = WDI_FinishScanReq(wdiFinishScanParams,
2522 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002523
Jeff Johnson295189b2012-06-20 16:38:30 -07002524
2525 /*
2526 * WDI API returns failure..
2527 */
2528 if(IS_WDI_STATUS_FAILURE( status))
2529 {
2530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2531 "Failure in Finish Scan WDI API, free all the memory " );
2532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2533 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 finishScanParams->status = eSIR_FAILURE ;
2535 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2536 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 return CONVERT_WDI2VOS_STATUS(status) ;
2538}
Jeff Johnson295189b2012-06-20 16:38:30 -07002539/*---------------------------------------------------------------------
2540 * ASSOC API's
2541 *---------------------------------------------------------------------
2542 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002543/*
2544 * FUNCTION: WDA_JoinReqCallback
2545 * Trigger Init SCAN callback
2546 */
2547void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2548{
2549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2550 tWDA_CbContext *pWDA;
2551 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002553 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002554 if(NULL == pWdaParams)
2555 {
2556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002557 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 VOS_ASSERT(0) ;
2559 return ;
2560 }
2561 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2562 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2564 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 /* reset macBSSID */
2566 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 /* reset macSTASelf */
2568 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002569 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 return ;
2572}
Jeff Johnson295189b2012-06-20 16:38:30 -07002573/*
2574 * FUNCTION: WDA_ProcessJoinReq
2575 * Trigger Join REQ in WDI
2576 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002577VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2578 tSwitchChannelParams* joinReqParam)
2579{
2580 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 WDI_JoinReqParamsType *wdiJoinReqParam =
2582 (WDI_JoinReqParamsType *)vos_mem_malloc(
2583 sizeof(WDI_JoinReqParamsType)) ;
2584 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002586 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 if(NULL == wdiJoinReqParam)
2588 {
2589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002590 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002591 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002592 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002593 return VOS_STATUS_E_NOMEM;
2594 }
2595 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2596 if(NULL == pWdaParams)
2597 {
2598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002600 VOS_ASSERT(0);
2601 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002602 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 return VOS_STATUS_E_NOMEM;
2604 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002605
2606 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2607 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2608 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2609 {
2610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2611 "%s: received join request when BSSID or self-STA is NULL "
2612 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002613 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002614 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2615 VOS_ASSERT(0);
2616 vos_mem_free(wdiJoinReqParam);
2617 vos_mem_free(pWdaParams);
2618 joinReqParam->status = eSIR_FAILURE ;
2619 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2620 return VOS_STATUS_E_INVAL;
2621 }
2622
Jeff Johnson295189b2012-06-20 16:38:30 -07002623 /* copy the BSSID for pWDA */
2624 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2625 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2627 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002628 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2629 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002630#ifdef WLAN_FEATURE_VOWIFI
2631 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2632 joinReqParam->maxTxPower ;
2633#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2635 joinReqParam->localPowerConstraint ;
2636#endif
2637 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2638 joinReqParam->secondaryChannelOffset ;
2639 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2640
2641 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 /* Store Init Req pointer, as this will be used for response */
2643 /* store Params pass it to WDI */
2644 pWdaParams->pWdaContext = pWDA;
2645 pWdaParams->wdaMsgParam = joinReqParam;
2646 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002647 status = WDI_JoinReq(wdiJoinReqParam,
2648 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002649 if(IS_WDI_STATUS_FAILURE(status))
2650 {
2651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2652 "Failure in Join WDI API, free all the memory " );
2653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2654 vos_mem_free(pWdaParams) ;
2655 joinReqParam->status = eSIR_FAILURE ;
2656 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2657 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 return CONVERT_WDI2VOS_STATUS(status) ;
2659}
Jeff Johnson295189b2012-06-20 16:38:30 -07002660/*
2661 * FUNCTION: WDA_SwitchChannelReqCallback
2662 * send Switch channel RSP back to PE
2663 */
2664void WDA_SwitchChannelReqCallback(
2665 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2666{
2667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2668 tWDA_CbContext *pWDA;
2669 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002671 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 if(NULL == pWdaParams)
2673 {
2674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002675 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002676 VOS_ASSERT(0) ;
2677 return ;
2678 }
2679 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2680 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2681
2682#ifdef WLAN_FEATURE_VOWIFI
2683 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2684#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2686 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002687 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002688 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 return ;
2691}
Jeff Johnson295189b2012-06-20 16:38:30 -07002692/*
2693 * FUNCTION: WDA_ProcessChannelSwitchReq
2694 * Request to WDI to switch channel REQ params.
2695 */
2696VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2697 tSwitchChannelParams *pSwitchChanParams)
2698{
2699 WDI_Status status = WDI_STATUS_SUCCESS ;
2700 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2701 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2702 sizeof(WDI_SwitchChReqParamsType)) ;
2703 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002705 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 if(NULL == wdiSwitchChanParam)
2707 {
2708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002709 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002710 VOS_ASSERT(0);
2711 return VOS_STATUS_E_NOMEM;
2712 }
2713 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2714 if(NULL == pWdaParams)
2715 {
2716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002717 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 VOS_ASSERT(0);
2719 vos_mem_free(wdiSwitchChanParam);
2720 return VOS_STATUS_E_NOMEM;
2721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2723#ifndef WLAN_FEATURE_VOWIFI
2724 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2725 pSwitchChanParams->localPowerConstraint;
2726#endif
2727 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2728 pSwitchChanParams->secondaryChannelOffset;
2729 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 /* Store req pointer, as this will be used for response */
2731 /* store Params pass it to WDI */
2732 pWdaParams->pWdaContext = pWDA;
2733 pWdaParams->wdaMsgParam = pSwitchChanParams;
2734 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002735#ifdef WLAN_FEATURE_VOWIFI
2736 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2737 = pSwitchChanParams->maxTxPower;
2738 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2739 pSwitchChanParams ->selfStaMacAddr,
2740 sizeof(tSirMacAddr));
2741#endif
2742 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2743 pSwitchChanParams->bssId,
2744 sizeof(tSirMacAddr));
2745
2746 status = WDI_SwitchChReq(wdiSwitchChanParam,
2747 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002748 if(IS_WDI_STATUS_FAILURE(status))
2749 {
2750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2751 "Failure in process channel switch Req WDI API, free all the memory " );
2752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2753 vos_mem_free(pWdaParams) ;
2754 pSwitchChanParams->status = eSIR_FAILURE ;
2755 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 return CONVERT_WDI2VOS_STATUS(status) ;
2758}
Jeff Johnson295189b2012-06-20 16:38:30 -07002759/*
2760 * FUNCTION: WDA_ConfigBssReqCallback
2761 * config BSS Req Callback, called by WDI
2762 */
2763void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2764 ,void* pUserData)
2765{
2766 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2767 tWDA_CbContext *pWDA;
2768 tAddBssParams *configBssReqParam;
2769 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002771 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 if(NULL == pWdaParams)
2773 {
2774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002775 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 VOS_ASSERT(0) ;
2777 return ;
2778 }
2779 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2780 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2781 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002783 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2785 {
2786 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2787 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2789 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2790 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2791
2792 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2793 {
2794 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2795 {
2796 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2797 staConfigBssParam->staType = STA_ENTRY_BSSID;
2798 }
2799 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2800 (staConfigBssParam->staType == STA_ENTRY_SELF))
2801 {
2802 /* This is the 1st add BSS Req for the BTAMP STA */
2803 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2804 staConfigBssParam->staType = STA_ENTRY_BSSID;
2805 }
2806 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2807 (staConfigBssParam->staType == STA_ENTRY_PEER))
2808 {
2809 /* This is the 2nd ADD BSS Request that is sent
2810 * on the BTAMP STA side. The Sta type is
2811 * set to STA_ENTRY_PEER here.*/
2812 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2813 }
2814 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2815 (staConfigBssParam->staType == STA_ENTRY_SELF))
2816 {
2817 /* statype is already set by PE.
2818 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2819 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2820 staConfigBssParam->staType = STA_ENTRY_BSSID;
2821 }
2822 else
2823 {
2824 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2825 staConfigBssParam->staType = STA_ENTRY_PEER;
2826 }
2827 }
2828 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2829 {
2830 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2831 staConfigBssParam->staType = STA_ENTRY_SELF;
2832 }
2833 else
2834 {
2835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2836 "Invalid operation mode specified");
2837 VOS_ASSERT(0);
2838 }
2839
2840 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002842 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2845 sizeof(tSirMacAddr));
2846 staConfigBssParam->txChannelWidthSet =
2847 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2849 staConfigBssParam->htCapable)
2850 {
2851 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2852 wdiConfigBssRsp->ucBSSIdx;
2853 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2854 WDA_VALID_STA_INDEX ;
2855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002856 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2857 wdiConfigBssRsp->ucBSSIdx,
2858 wdiConfigBssRsp->ucSTAIdx))
2859 {
2860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002861 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 VOS_ASSERT(0) ;
2863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002864 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2865 {
2866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002867 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 VOS_ASSERT(0) ;
2869 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002870#ifdef WLAN_FEATURE_VOWIFI
2871 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2872#endif
2873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2875 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 return ;
2878}
Jeff Johnson295189b2012-06-20 16:38:30 -07002879/*
2880 * FUNCTION: WDA_UpdateEdcaParamsForAC
2881 * Update WDI EDCA params with PE edca params
2882 */
2883void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2884 WDI_EdcaParamRecord *wdiEdcaParam,
2885 tSirMacEdcaParamRecord *macEdcaParam)
2886{
2887 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2888 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2889 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2890 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2891 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2892 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2893}
Jeff Johnson295189b2012-06-20 16:38:30 -07002894/*
2895 * FUNCTION: WDA_ProcessConfigBssReq
2896 * Configure BSS before starting Assoc with AP
2897 */
2898VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2899 tAddBssParams* configBssReqParam)
2900{
2901 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2903 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2904 sizeof(WDI_ConfigBSSReqParamsType)) ;
2905 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002907 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 if(NULL == wdiConfigBssReqParam)
2909 {
2910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002911 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 VOS_ASSERT(0);
2913 return VOS_STATUS_E_NOMEM;
2914 }
2915 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2916 if(NULL == pWdaParams)
2917 {
2918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002919 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 VOS_ASSERT(0);
2921 vos_mem_free(wdiConfigBssReqParam);
2922 return VOS_STATUS_E_NOMEM;
2923 }
Kiran4a17ebe2013-01-31 10:43:43 -08002924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2925 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2928 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 /* Store Init Req pointer, as this will be used for response */
2930 /* store Params pass it to WDI */
2931 pWdaParams->pWdaContext = pWDA;
2932 pWdaParams->wdaMsgParam = configBssReqParam;
2933 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002934 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2935 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 if(IS_WDI_STATUS_FAILURE(status))
2937 {
2938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2939 "Failure in Config BSS WDI API, free all the memory " );
2940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2941 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 return CONVERT_WDI2VOS_STATUS(status) ;
2946}
Jeff Johnson295189b2012-06-20 16:38:30 -07002947#ifdef ENABLE_HAL_COMBINED_MESSAGES
2948/*
2949 * FUNCTION: WDA_PostAssocReqCallback
2950 * Post ASSOC req callback, send RSP back to PE
2951 */
2952void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2953 void* pUserData)
2954{
2955 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2956 tPostAssocParams *postAssocReqParam =
2957 (tPostAssocParams *)pWDA->wdaMsgParam ;
2958 /*STA context within the BSS Params*/
2959 tAddStaParams *staPostAssocParam =
2960 &postAssocReqParam->addBssParams.staContext ;
2961 /*STA Params for self STA*/
2962 tAddStaParams *selfStaPostAssocParam =
2963 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002965 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002967 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2969 {
2970 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2971 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2972 sizeof(tSirMacAddr)) ;
2973 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2974 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2975 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002976 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2977 }
2978 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2979 pWDA->wdaWdiApiMsgParam = NULL;
2980 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 return ;
2983}
Jeff Johnson295189b2012-06-20 16:38:30 -07002984/*
2985 * FUNCTION: WDA_ProcessPostAssocReq
2986 * Trigger POST ASSOC processing in WDI
2987 */
2988VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2989 tPostAssocParams *postAssocReqParam)
2990{
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 WDI_Status status = WDI_STATUS_SUCCESS ;
2992
2993 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2994 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2995 sizeof(WDI_PostAssocReqParamsType)) ;
2996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002997 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002998
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 if(NULL == wdiPostAssocReqParam)
3000 {
3001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003002 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 VOS_ASSERT(0);
3004 return VOS_STATUS_E_NOMEM;
3005 }
3006
3007 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3008 {
3009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003010 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 VOS_ASSERT(0);
3012 return VOS_STATUS_E_FAILURE;
3013 }
3014
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 /* update BSS params into WDI structure */
3016 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3017 &postAssocReqParam->addBssParams) ;
3018 /* update STA params into WDI structure */
3019 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3020 &postAssocReqParam->addStaParams) ;
3021
3022 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3023 postAssocReqParam->addBssParams.highPerformance;
3024 WDA_UpdateEdcaParamsForAC(pWDA,
3025 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3026 &postAssocReqParam->addBssParams.acbe);
3027 WDA_UpdateEdcaParamsForAC(pWDA,
3028 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3029 &postAssocReqParam->addBssParams.acbk);
3030 WDA_UpdateEdcaParamsForAC(pWDA,
3031 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3032 &postAssocReqParam->addBssParams.acvi);
3033 WDA_UpdateEdcaParamsForAC(pWDA,
3034 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3035 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003036 /* Store Init Req pointer, as this will be used for response */
3037 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 /* store Params pass it to WDI */
3039 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3041 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 if(IS_WDI_STATUS_FAILURE(status))
3043 {
3044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3045 "Failure in Post Assoc WDI API, free all the memory " );
3046 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3047 pWDA->wdaWdiApiMsgParam = NULL;
3048 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003050 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 return CONVERT_WDI2VOS_STATUS(status) ;
3053}
3054#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003055/*
3056 * FUNCTION: WDA_AddStaReqCallback
3057 * ADD STA req callback, send RSP back to PE
3058 */
3059void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3060 void* pUserData)
3061{
3062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3063 tWDA_CbContext *pWDA;
3064 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003066 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003067 if(NULL == pWdaParams)
3068 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 VOS_ASSERT(0) ;
3071 return ;
3072 }
3073 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3074 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003075 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003076 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3078 {
3079 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3080 /*TODO: UMAC structure doesn't have these fields*/
3081 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3082 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3083 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3084 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3085 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3086 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003087#ifdef FEATURE_WLAN_TDLS
3088 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3089 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3090#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003092#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 {
3094 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3095 wdiConfigStaRsp->ucBssIdx;
3096 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3097 WDA_VALID_STA_INDEX ;
3098 }
3099 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3100 {
3101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003102 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 VOS_ASSERT(0) ;
3104 return ;
3105 }
3106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3108 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 return ;
3111}
Jeff Johnson295189b2012-06-20 16:38:30 -07003112/*
3113 * FUNCTION: WDA_ConfigStaReq
3114 * Trigger Config STA processing in WDI
3115 */
3116VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3117 tAddStaParams *addStaReqParam)
3118{
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3121 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3122 sizeof(WDI_ConfigSTAReqParamsType)) ;
3123 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003125 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 if(NULL == wdiConfigStaReqParam)
3127 {
3128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 VOS_ASSERT(0);
3131 return VOS_STATUS_E_NOMEM;
3132 }
3133 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3134 if(NULL == pWdaParams)
3135 {
3136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003138 VOS_ASSERT(0);
3139 vos_mem_free(wdiConfigStaReqParam);
3140 return VOS_STATUS_E_NOMEM;
3141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003143 /* update STA params into WDI structure */
3144 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3145 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 /* Store Init Req pointer, as this will be used for response */
3147 /* store Params pass it to WDI */
3148 pWdaParams->pWdaContext = pWDA;
3149 pWdaParams->wdaMsgParam = addStaReqParam;
3150 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3152 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003153 if(IS_WDI_STATUS_FAILURE(status))
3154 {
3155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3156 "Failure in Config STA WDI API, free all the memory " );
3157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3158 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003159 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 return CONVERT_WDI2VOS_STATUS(status) ;
3163}
Jeff Johnson295189b2012-06-20 16:38:30 -07003164/*
3165 * FUNCTION: WDA_DelBSSReqCallback
3166 * Dens DEL BSS RSP back to PE
3167 */
3168void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3169 void* pUserData)
3170{
3171 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3172 tWDA_CbContext *pWDA;
3173 tDeleteBssParams *delBssReqParam;
3174 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003176 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 if(NULL == pWdaParams)
3178 {
3179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003180 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 VOS_ASSERT(0) ;
3182 return ;
3183 }
3184 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3185 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003186 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3188 {
3189 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3190 sizeof(tSirMacAddr)) ;
3191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3193 {
3194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003195 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003196 VOS_ASSERT(0) ;
3197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3199 {
3200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003201 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 VOS_ASSERT(0) ;
3203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003204 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3205 {
3206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003207 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 VOS_ASSERT(0) ;
3209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3211 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 /* reset the the system role*/
3213 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3214
3215 /* Reset the BA related information */
3216 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3217 {
3218 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3219 {
3220 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3221 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3222 /* Reset framesTxed counters here */
3223 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3224 {
3225 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3226 }
3227 }
3228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003230 return ;
3231}
3232
Jeff Johnson295189b2012-06-20 16:38:30 -07003233/*
3234 * FUNCTION: WDA_ProcessDelBssReq
3235 * Init DEL BSS req with WDI
3236 */
3237VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3238 tDeleteBssParams *delBssParam)
3239{
3240 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003241 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3242 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3243 sizeof(WDI_DelBSSReqParamsType)) ;
3244 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003246 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003247 if(NULL == wdiDelBssReqParam)
3248 {
3249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 VOS_ASSERT(0);
3252 return VOS_STATUS_E_NOMEM;
3253 }
3254 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3255 if(NULL == pWdaParams)
3256 {
3257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003258 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 VOS_ASSERT(0);
3260 vos_mem_free(wdiDelBssReqParam);
3261 return VOS_STATUS_E_NOMEM;
3262 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3264 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3265
3266 /* Store Init Req pointer, as this will be used for response */
3267 /* store Params pass it to WDI */
3268 pWdaParams->pWdaContext = pWDA;
3269 pWdaParams->wdaMsgParam = delBssParam;
3270 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 status = WDI_DelBSSReq(wdiDelBssReqParam,
3272 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 if(IS_WDI_STATUS_FAILURE(status))
3274 {
3275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3276 "Failure in Del BSS WDI API, free all the memory " );
3277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3278 vos_mem_free(pWdaParams) ;
3279 delBssParam->status = eSIR_FAILURE ;
3280 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 return CONVERT_WDI2VOS_STATUS(status) ;
3283}
Jeff Johnson295189b2012-06-20 16:38:30 -07003284/*
3285 * FUNCTION: WDA_DelSTAReqCallback
3286 * Dens DEL STA RSP back to PE
3287 */
3288void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3289 void* pUserData)
3290{
3291 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3292 tWDA_CbContext *pWDA;
3293 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003295 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 if(NULL == pWdaParams)
3297 {
3298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003299 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_ASSERT(0) ;
3301 return ;
3302 }
3303 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3304 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003305 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3307 {
3308 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3309 {
3310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003311 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 VOS_ASSERT(0) ;
3313 }
3314 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3315 }
3316 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3317 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 /*Reset the BA information corresponding to this STAIdx */
3319 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3320 WDA_INVALID_STA_INDEX;
3321 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3322
3323 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 return ;
3325}
Jeff Johnson295189b2012-06-20 16:38:30 -07003326/*
3327 * FUNCTION: WDA_ProcessDelStaReq
3328 * Init DEL STA req with WDI
3329 */
3330VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3331 tDeleteStaParams *delStaParam)
3332{
3333 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3335 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3336 sizeof(WDI_DelSTAReqParamsType)) ;
3337 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003339 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 if(NULL == wdiDelStaReqParam)
3341 {
3342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003343 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 VOS_ASSERT(0);
3345 return VOS_STATUS_E_NOMEM;
3346 }
3347 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3348 if(NULL == pWdaParams)
3349 {
3350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003352 VOS_ASSERT(0);
3353 vos_mem_free(wdiDelStaReqParam);
3354 return VOS_STATUS_E_NOMEM;
3355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003356 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3357 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003358 /* Store Init Req pointer, as this will be used for response */
3359 /* store Params pass it to WDI */
3360 pWdaParams->pWdaContext = pWDA;
3361 pWdaParams->wdaMsgParam = delStaParam;
3362 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 status = WDI_DelSTAReq(wdiDelStaReqParam,
3364 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 if(IS_WDI_STATUS_FAILURE(status))
3366 {
3367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3368 "Failure in Del STA WDI API, free all the memory status = %d",
3369 status );
3370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3371 vos_mem_free(pWdaParams) ;
3372 delStaParam->status = eSIR_FAILURE ;
3373 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 return CONVERT_WDI2VOS_STATUS(status) ;
3376}
Jeff Johnson295189b2012-06-20 16:38:30 -07003377void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3378{
3379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3380 tWDA_CbContext *pWDA;
3381 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003383 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 if(NULL == pWdaParams)
3385 {
3386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003387 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 VOS_ASSERT(0) ;
3389 return ;
3390 }
3391 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3392 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3394 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3396 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3397 pwdiAddSTASelfRsp->macSelfSta,
3398 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 return ;
3401}
Jeff Johnson295189b2012-06-20 16:38:30 -07003402/*
3403 * FUNCTION: WDA_ProcessAddStaSelfReq
3404 *
3405 */
3406VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3407{
3408 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003409 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3411 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3412 sizeof(WDI_AddSTASelfReqParamsType)) ;
3413 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003415 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 if( NULL == wdiAddStaSelfReq )
3417 {
3418 VOS_ASSERT( 0 );
3419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003420 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 return( VOS_STATUS_E_NOMEM );
3422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003423 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 if( NULL == pWdaParams )
3425 {
3426 VOS_ASSERT( 0 );
3427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003428 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003429 vos_mem_free(wdiAddStaSelfReq) ;
3430 return( VOS_STATUS_E_NOMEM );
3431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003432 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003433 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3434 /* Store Init Req pointer, as this will be used for response */
3435 /* store Params pass it to WDI */
3436 pWdaParams->pWdaContext = pWDA;
3437 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3438 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003439 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003440
Jeff Johnson43971f52012-07-17 12:26:56 -07003441 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003442 {
3443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3444 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003445 wstatus );
3446 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3448 vos_mem_free(pWdaParams) ;
3449 pAddStaSelfReq->status = eSIR_FAILURE ;
3450 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3451 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003452 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003453}
Jeff Johnson295189b2012-06-20 16:38:30 -07003454/*
3455 * FUNCTION: WDA_DelSTASelfRespCallback
3456 *
3457 */
3458void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3459 wdiDelStaSelfRspParams , void* pUserData)
3460{
3461 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3462 tWDA_CbContext *pWDA;
3463 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003465 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003466 if (NULL == pWdaParams)
3467 {
3468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003469 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 VOS_ASSERT(0);
3471 return;
3472 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003473 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3474 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003475 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003476 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477
3478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3479 vos_mem_free(pWdaParams) ;
3480
3481 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003482 return ;
3483}
Jeff Johnson295189b2012-06-20 16:38:30 -07003484/*
3485 * FUNCTION: WDA_DelSTASelfReqCallback
3486 *
3487 */
3488void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3489 void* pUserData)
3490{
3491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3492 tWDA_CbContext *pWDA;
3493 tDelStaSelfParams *delStaSelfParams;
3494
3495 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303496 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003497 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003498
3499 if (NULL == pWdaParams)
3500 {
3501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003502 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 VOS_ASSERT(0);
3504 return;
3505 }
3506
3507 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3508 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3509
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003510 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003511
3512 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3513 {
3514 VOS_ASSERT(0);
3515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3516 vos_mem_free(pWdaParams) ;
3517 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3518 }
3519
3520 return ;
3521}
3522
3523/*
3524 * FUNCTION: WDA_DelSTASelfReq
3525 * Trigger Config STA processing in WDI
3526 */
3527VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3528 tDelStaSelfParams* pDelStaSelfReqParam)
3529{
3530 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003531 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 tWDA_ReqParams *pWdaParams = NULL;
3533 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3534 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3535 sizeof(WDI_DelSTASelfReqParamsType)) ;
3536
Jeff Johnson295189b2012-06-20 16:38:30 -07003537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003538 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003539 if( NULL == wdiDelStaSelfReq )
3540 {
3541 VOS_ASSERT( 0 );
3542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003543 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 return( VOS_STATUS_E_NOMEM );
3545 }
3546
3547 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3548 if( NULL == pWdaParams )
3549 {
3550 VOS_ASSERT( 0 );
3551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003552 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003553 vos_mem_free(wdiDelStaSelfReq) ;
3554 return( VOS_STATUS_E_NOMEM );
3555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 pWdaParams->pWdaContext = pWDA;
3557 /* Store param pointer as passed in by caller */
3558 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3559 /* store Params pass it to WDI */
3560 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3562 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3563
3564 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3565 wdiDelStaSelfReq->pUserData = pWdaParams;
3566
Jeff Johnson43971f52012-07-17 12:26:56 -07003567 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003568 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3569
Jeff Johnson43971f52012-07-17 12:26:56 -07003570 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003571 {
3572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3573 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3574 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003575 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3577 vos_mem_free(pWdaParams) ;
3578 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3579 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3580 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003581 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003582}
3583
Jeff Johnson295189b2012-06-20 16:38:30 -07003584/*
3585 * FUNCTION: WDA_SendMsg
3586 * Send Message back to PE
3587 */
3588void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3589 void *pBodyptr, tANI_U32 bodyVal)
3590{
3591 tSirMsgQ msg = {0} ;
3592 tANI_U32 status = VOS_STATUS_SUCCESS ;
3593 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003594 msg.type = msgType;
3595 msg.bodyval = bodyVal;
3596 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003597 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 if (VOS_STATUS_SUCCESS != status)
3599 {
3600 if(NULL != pBodyptr)
3601 {
3602 vos_mem_free(pBodyptr);
3603 }
3604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003605 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 VOS_ASSERT(0) ;
3607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003608 return ;
3609}
Jeff Johnson295189b2012-06-20 16:38:30 -07003610/*
3611 * FUNCTION: WDA_UpdateBSSParams
3612 * Translated WDA/PE BSS info into WDI BSS info..
3613 */
3614void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3615 WDI_ConfigBSSReqInfoType *wdiBssParams,
3616 tAddBssParams *wdaBssParams)
3617{
3618 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 /* copy bssReq Params to WDI structure */
3620 vos_mem_copy(wdiBssParams->macBSSID,
3621 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3622 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3623 sizeof(tSirMacAddr)) ;
3624 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3625 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3626 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 wdiBssParams->ucShortSlotTimeSupported =
3628 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3630 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3631 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3632 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3633 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3634
3635 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3636 wdiBssParams->ucTXOPProtectionFullSupport =
3637 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003638 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3639 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3642 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3643 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3644 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3645
Chet Lanctot186b5732013-03-18 10:26:30 -07003646 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3647
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 /* copy SSID into WDI structure */
3649 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3650 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3651 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003652 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3653 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003655#ifdef WLAN_FEATURE_VOWIFI
3656 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3657#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003660#ifdef WLAN_FEATURE_VOWIFI_11R
3661 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 if(wdiBssParams->bExtSetStaKeyParamValid)
3663 {
3664 /* copy set STA key params to WDI structure */
3665 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3666 wdaBssParams->extSetStaKeyParam.staIdx;
3667 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3668 wdaBssParams->extSetStaKeyParam.encType;
3669 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3670 wdaBssParams->extSetStaKeyParam.wepType;
3671 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3672 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003673 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3674 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003675 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3677 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3678 {
3679 WDA_GetWepKeysFromCfg( pWDA,
3680 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3681 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3682 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3683 }
3684 else
3685 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3687 keyIndex++)
3688 {
3689 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3690 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3691 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3692 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3693 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3694 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3696 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3697 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3698 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3699 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3700 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3701 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3702 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3703 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003704 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3705 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003706 }
3707 }
3708 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3709 }
3710 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3711 {
3712 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3713 sizeof(wdaBssParams->extSetStaKeyParam) );
3714 }
3715#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003716#ifdef WLAN_FEATURE_11AC
3717 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3718 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3719#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003720
3721 return ;
3722}
Jeff Johnson295189b2012-06-20 16:38:30 -07003723/*
3724 * FUNCTION: WDA_UpdateSTAParams
3725 * Translated WDA/PE BSS info into WDI BSS info..
3726 */
3727void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3728 WDI_ConfigStaReqInfoType *wdiStaParams,
3729 tAddStaParams *wdaStaParams)
3730{
3731 tANI_U8 i = 0;
3732 /* Update STA params */
3733 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3734 sizeof(tSirMacAddr)) ;
3735 wdiStaParams->usAssocId = wdaStaParams->assocId;
3736 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003737 wdiStaParams->staIdx = wdaStaParams->staIdx;
3738
Jeff Johnson295189b2012-06-20 16:38:30 -07003739 wdiStaParams->ucShortPreambleSupported =
3740 wdaStaParams->shortPreambleSupported;
3741 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3742 sizeof(tSirMacAddr)) ;
3743 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3744
3745 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3746
3747 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3748 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3749 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3750 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3751 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3752 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3753 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3754
3755 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3756 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 wdiStaParams->wdiSupportedRates.opRateMode =
3758 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003759 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3760 {
3761 wdiStaParams->wdiSupportedRates.llbRates[i] =
3762 wdaStaParams->supportedRates.llbRates[i];
3763 }
3764 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3765 {
3766 wdiStaParams->wdiSupportedRates.llaRates[i] =
3767 wdaStaParams->supportedRates.llaRates[i];
3768 }
3769 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3770 {
3771 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3772 wdaStaParams->supportedRates.aniLegacyRates[i];
3773 }
3774 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3775 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003776#ifdef WLAN_FEATURE_11AC
3777 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3778 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3779 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3780 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3781#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3783 {
3784 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3785 wdaStaParams->supportedRates.supportedMCSSet[i];
3786 }
3787 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3788 wdaStaParams->supportedRates.rxHighestDataRate;
3789
3790 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3791
3792 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3793
3794 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3795 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3796 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3797
3798 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3799 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3800 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3801 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003803#ifdef WLAN_FEATURE_11AC
3804 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3805 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003806 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003807#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003808 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3809 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003810 return ;
3811}
Jeff Johnson295189b2012-06-20 16:38:30 -07003812/*
3813 * -------------------------------------------------------------------------
3814 * CFG update to WDI
3815 * -------------------------------------------------------------------------
3816 */
3817
3818 /*
3819 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3820 * Convert the WNI CFG ID to HAL CFG ID
3821 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003822static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003823{
3824 switch(wniCfgId)
3825 {
3826 case WNI_CFG_STA_ID:
3827 return QWLAN_HAL_CFG_STA_ID;
3828 case WNI_CFG_CURRENT_TX_ANTENNA:
3829 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3830 case WNI_CFG_CURRENT_RX_ANTENNA:
3831 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3832 case WNI_CFG_LOW_GAIN_OVERRIDE:
3833 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3834 case WNI_CFG_POWER_STATE_PER_CHAIN:
3835 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3836 case WNI_CFG_CAL_PERIOD:
3837 return QWLAN_HAL_CFG_CAL_PERIOD;
3838 case WNI_CFG_CAL_CONTROL:
3839 return QWLAN_HAL_CFG_CAL_CONTROL;
3840 case WNI_CFG_PROXIMITY:
3841 return QWLAN_HAL_CFG_PROXIMITY;
3842 case WNI_CFG_NETWORK_DENSITY:
3843 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3844 case WNI_CFG_MAX_MEDIUM_TIME:
3845 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3846 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3847 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3848 case WNI_CFG_RTS_THRESHOLD:
3849 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3850 case WNI_CFG_SHORT_RETRY_LIMIT:
3851 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3852 case WNI_CFG_LONG_RETRY_LIMIT:
3853 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3854 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3855 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3856 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3857 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3858 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3859 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3860 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3861 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3862 case WNI_CFG_FIXED_RATE:
3863 return QWLAN_HAL_CFG_FIXED_RATE;
3864 case WNI_CFG_RETRYRATE_POLICY:
3865 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3866 case WNI_CFG_RETRYRATE_SECONDARY:
3867 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3868 case WNI_CFG_RETRYRATE_TERTIARY:
3869 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3870 case WNI_CFG_FORCE_POLICY_PROTECTION:
3871 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3872 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3873 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3874 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3875 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3876 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3877 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3878 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3879 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3880 case WNI_CFG_MAX_BA_SESSIONS:
3881 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3882 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3883 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3884 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3885 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3886 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3887 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3888 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3889 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3890 case WNI_CFG_STATS_PERIOD:
3891 return QWLAN_HAL_CFG_STATS_PERIOD;
3892 case WNI_CFG_CFP_MAX_DURATION:
3893 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3894#if 0 /*This is not part of CFG*/
3895 case WNI_CFG_FRAME_TRANS_ENABLED:
3896 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3897#endif
3898 case WNI_CFG_DTIM_PERIOD:
3899 return QWLAN_HAL_CFG_DTIM_PERIOD;
3900 case WNI_CFG_EDCA_WME_ACBK:
3901 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3902 case WNI_CFG_EDCA_WME_ACBE:
3903 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3904 case WNI_CFG_EDCA_WME_ACVI:
3905 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3906 case WNI_CFG_EDCA_WME_ACVO:
3907 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3908#if 0
3909 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3910 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3911 case WNI_CFG_TELE_BCN_TRANS_LI:
3912 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3913 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3914 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3915 case WNI_CFG_TELE_BCN_MAX_LI:
3916 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3917 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3918 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3919#endif
3920 case WNI_CFG_ENABLE_CLOSE_LOOP:
3921 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003922 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3923 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 default:
3925 {
3926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3927 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3928 wniCfgId);
3929 return VOS_STATUS_E_INVAL;
3930 }
3931 }
3932}
Jeff Johnson295189b2012-06-20 16:38:30 -07003933/*
3934 * FUNCTION: WDA_UpdateCfgCallback
3935 *
3936 */
3937void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3938{
3939 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3940 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3941 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003943 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003944 /*
3945 * currently there is no response message is expected between PE and
3946 * WDA, Failure return from WDI is a ASSERT condition
3947 */
3948 if(WDI_STATUS_SUCCESS != wdiStatus)
3949 {
3950 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003951 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3953 }
3954
3955 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3956 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3957 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 return ;
3959}
Jeff Johnson295189b2012-06-20 16:38:30 -07003960/*
3961 * FUNCTION: WDA_UpdateCfg
3962 *
3963 */
3964VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3965{
3966
3967 WDI_Status status = WDI_STATUS_SUCCESS ;
3968 tANI_U32 val =0;
3969 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3970 tHalCfg *configData;
3971 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3972 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003974 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 if (NULL == pMac )
3976 {
3977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003978 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 return VOS_STATUS_E_FAILURE;
3980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 if(WDA_START_STATE != pWDA->wdaState)
3982 {
3983 return VOS_STATUS_E_FAILURE;
3984 }
3985
3986 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3987 {
3988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003989 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003990 VOS_ASSERT(0);
3991 return VOS_STATUS_E_FAILURE;
3992 }
3993
3994 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3995 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 if(NULL == wdiCfgReqParam)
3997 {
3998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003999 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 VOS_ASSERT(0);
4001 return VOS_STATUS_E_NOMEM;
4002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4004 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004005 if(NULL == wdiCfgReqParam->pConfigBuffer)
4006 {
4007 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004008 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004009 vos_mem_free(wdiCfgReqParam);
4010 VOS_ASSERT(0);
4011 return VOS_STATUS_E_NOMEM;
4012 }
4013
4014 /*convert the WNI CFG Id to HAL CFG Id*/
4015 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4016 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4017
4018 /*TODO: revisit this for handling string parameters */
4019 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4020 &val) != eSIR_SUCCESS)
4021 {
4022 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4023 "Failed to cfg get id %d\n", cfgParam->bodyval);
4024 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4025 vos_mem_free(wdiCfgReqParam);
4026 return eSIR_FAILURE;
4027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4029 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4030 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4031 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4032 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4033
4034 /* store Params pass it to WDI */
4035 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004036#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4037 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4038 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 if(IS_WDI_STATUS_FAILURE(status))
4040 {
4041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4042 "Failure in Update CFG WDI API, free all the memory " );
4043 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4044 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4045 pWDA->wdaWdiCfgApiMsgParam = NULL;
4046 /* Failure is not expected */
4047 VOS_ASSERT(0) ;
4048 }
4049#else
4050 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4051 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4052 pWDA->wdaWdiCfgApiMsgParam = NULL;
4053#endif
4054 return CONVERT_WDI2VOS_STATUS(status) ;
4055}
4056
Jeff Johnson295189b2012-06-20 16:38:30 -07004057VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4058 v_U8_t *pDefaultKeyId,
4059 v_U8_t *pNumKeys,
4060 WDI_KeysType *pWdiKeys )
4061{
4062 v_U32_t i, j, defKeyId = 0;
4063 v_U32_t val = SIR_MAC_KEY_LENGTH;
4064 VOS_STATUS status = WDI_STATUS_SUCCESS;
4065 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004066 if (NULL == pMac )
4067 {
4068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004069 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004070 return VOS_STATUS_E_FAILURE;
4071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4073 &defKeyId ))
4074 {
4075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4076 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4077 }
4078
4079 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004080 /* Need to extract ALL of the configured WEP Keys */
4081 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4082 {
4083 val = SIR_MAC_KEY_LENGTH;
4084 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4085 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4086 pWdiKeys[j].key,
4087 &val ))
4088 {
4089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4090 "WEP Key index [%d] may not configured in CFG\n",i);
4091 }
4092 else
4093 {
4094 pWdiKeys[j].keyId = (tANI_U8) i;
4095 /*
4096 * Actually, a DC (Don't Care) because
4097 * this is determined (and set) by PE/MLME
4098 */
4099 pWdiKeys[j].unicast = 0;
4100 /*
4101 * Another DC (Don't Care)
4102 */
4103 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4104 /* Another DC (Don't Care). Unused for WEP */
4105 pWdiKeys[j].paeRole = 0;
4106 /* Determined from wlan_cfgGetStr() above.*/
4107 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004108 j++;
4109 *pNumKeys = (tANI_U8) j;
4110 }
4111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 return status;
4113}
Jeff Johnson295189b2012-06-20 16:38:30 -07004114/*
4115 * FUNCTION: WDA_SetBssKeyReqCallback
4116 * send SET BSS key RSP back to PE
4117 */
4118void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4119{
4120 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4121 tWDA_CbContext *pWDA;
4122 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004124 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 if(NULL == pWdaParams)
4126 {
4127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004128 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 VOS_ASSERT(0) ;
4130 return ;
4131 }
4132 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4133 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4135 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004136 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004138 return ;
4139}
Jeff Johnson295189b2012-06-20 16:38:30 -07004140/*
4141 * FUNCTION: WDA_ProcessSetBssKeyReq
4142 * Request to WDI for programming the BSS key( key for
4143 * broadcast/multicast frames Encryption)
4144 */
4145VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4146 tSetBssKeyParams *setBssKeyParams )
4147{
4148 WDI_Status status = WDI_STATUS_SUCCESS ;
4149 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4150 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4151 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4152 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004153 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004155 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004156 if(NULL == wdiSetBssKeyParam)
4157 {
4158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004159 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 VOS_ASSERT(0);
4161 return VOS_STATUS_E_NOMEM;
4162 }
4163 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4164 if(NULL == pWdaParams)
4165 {
4166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004168 VOS_ASSERT(0);
4169 vos_mem_free(wdiSetBssKeyParam);
4170 return VOS_STATUS_E_NOMEM;
4171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004173 /* copy set BSS params to WDI structure */
4174 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4175 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4176 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004177 if(setBssKeyParams->encType != eSIR_ED_NONE)
4178 {
4179 if( setBssKeyParams->numKeys == 0 &&
4180 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4181 setBssKeyParams->encType == eSIR_ED_WEP104))
4182 {
4183 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004184 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4185 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4186 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4187 }
4188 else
4189 {
4190 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4191 {
4192 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4193 setBssKeyParams->key[keyIndex].keyId;
4194 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4195 setBssKeyParams->key[keyIndex].unicast;
4196 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4197 setBssKeyParams->key[keyIndex].keyDirection;
4198 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4199 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4200 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4201 setBssKeyParams->key[keyIndex].paeRole;
4202 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4203 setBssKeyParams->key[keyIndex].keyLength;
4204 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4205 setBssKeyParams->key[keyIndex].key,
4206 SIR_MAC_MAX_KEY_LENGTH);
4207 }
4208 }
4209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4211 setBssKeyParams->singleTidRc;
4212 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004213 /* Store set key pointer, as this will be used for response */
4214 /* store Params pass it to WDI */
4215 pWdaParams->pWdaContext = pWDA;
4216 pWdaParams->wdaMsgParam = setBssKeyParams;
4217 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4219 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4220
4221 if(IS_WDI_STATUS_FAILURE(status))
4222 {
4223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4224 "Failure in Set BSS Key Req WDI API, free all the memory " );
4225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4226 vos_mem_free(pWdaParams) ;
4227 setBssKeyParams->status = eSIR_FAILURE ;
4228 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4229 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004230 return CONVERT_WDI2VOS_STATUS(status) ;
4231}
Jeff Johnson295189b2012-06-20 16:38:30 -07004232/*
4233 * FUNCTION: WDA_RemoveBssKeyReqCallback
4234 * send SET BSS key RSP back to PE
4235 */
4236void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4237{
4238 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4239 tWDA_CbContext *pWDA;
4240 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004242 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004243 if(NULL == pWdaParams)
4244 {
4245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004246 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 VOS_ASSERT(0) ;
4248 return ;
4249 }
4250 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4251 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4253 vos_mem_free(pWdaParams) ;
4254
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004255 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004257 return ;
4258}
Jeff Johnson295189b2012-06-20 16:38:30 -07004259/*
4260 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4261 * Request to WDI to remove the BSS key( key for broadcast/multicast
4262 * frames Encryption)
4263 */
4264VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4265 tRemoveBssKeyParams *removeBssKeyParams )
4266{
4267 WDI_Status status = WDI_STATUS_SUCCESS ;
4268 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4269 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4270 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4271 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004273 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 if(NULL == wdiRemoveBssKeyParam)
4275 {
4276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 VOS_ASSERT(0);
4279 return VOS_STATUS_E_NOMEM;
4280 }
4281 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4282 if(NULL == pWdaParams)
4283 {
4284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 VOS_ASSERT(0);
4287 vos_mem_free(wdiRemoveBssKeyParam);
4288 return VOS_STATUS_E_NOMEM;
4289 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 /* copy Remove BSS key params to WDI structure*/
4291 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4292 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4293 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4294 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4295 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 /* Store remove key pointer, as this will be used for response */
4297 /* store Params pass it to WDI */
4298 pWdaParams->pWdaContext = pWDA;
4299 pWdaParams->wdaMsgParam = removeBssKeyParams;
4300 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4302 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 if(IS_WDI_STATUS_FAILURE(status))
4304 {
4305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4306 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4308 vos_mem_free(pWdaParams) ;
4309 removeBssKeyParams->status = eSIR_FAILURE ;
4310 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004312 return CONVERT_WDI2VOS_STATUS(status) ;
4313}
Jeff Johnson295189b2012-06-20 16:38:30 -07004314/*
4315 * FUNCTION: WDA_SetBssKeyReqCallback
4316 * send SET BSS key RSP back to PE
4317 */
4318void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4319{
4320 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4321 tWDA_CbContext *pWDA;
4322 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004324 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004325 if(NULL == pWdaParams)
4326 {
4327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004328 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 VOS_ASSERT(0) ;
4330 return ;
4331 }
4332 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4333 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4335 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004336 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004337 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 return ;
4339}
Jeff Johnson295189b2012-06-20 16:38:30 -07004340/*
4341 * FUNCTION: WDA_ProcessSetStaKeyReq
4342 * Request to WDI for programming the STA key( key for Unicast frames
4343 * Encryption)
4344 */
4345VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4346 tSetStaKeyParams *setStaKeyParams )
4347{
4348 WDI_Status status = WDI_STATUS_SUCCESS ;
4349 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4350 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4351 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4352 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004353 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004355 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 if(NULL == wdiSetStaKeyParam)
4357 {
4358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 VOS_ASSERT(0);
4361 return VOS_STATUS_E_NOMEM;
4362 }
4363 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4364 if(NULL == pWdaParams)
4365 {
4366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004368 VOS_ASSERT(0);
4369 vos_mem_free(wdiSetStaKeyParam);
4370 return VOS_STATUS_E_NOMEM;
4371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 /* copy set STA key params to WDI structure */
4375 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4376 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4377 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4378 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004379 if(setStaKeyParams->encType != eSIR_ED_NONE)
4380 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004381 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4383 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4384 {
4385 WDA_GetWepKeysFromCfg( pWDA,
4386 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4387 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4388 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4389 }
4390 else
4391 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004392 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4393 keyIndex++)
4394 {
4395 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4396 setStaKeyParams->key[keyIndex].keyId;
4397 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4398 setStaKeyParams->key[keyIndex].unicast;
4399 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4400 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4402 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4403 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4404 setStaKeyParams->key[keyIndex].paeRole;
4405 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4406 setStaKeyParams->key[keyIndex].keyLength;
4407 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4408 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4409 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4410 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4411 {
4412 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4413 }
4414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4416 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004417 }
4418 }
4419 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4420 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 /* Store set key pointer, as this will be used for response */
4422 /* store Params pass it to WDI */
4423 pWdaParams->pWdaContext = pWDA;
4424 pWdaParams->wdaMsgParam = setStaKeyParams;
4425 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004426 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4427 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 if(IS_WDI_STATUS_FAILURE(status))
4429 {
4430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4431 "Failure in set STA Key Req WDI API, free all the memory " );
4432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4433 vos_mem_free(pWdaParams) ;
4434 setStaKeyParams->status = eSIR_FAILURE ;
4435 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4436 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004437 return CONVERT_WDI2VOS_STATUS(status) ;
4438}
Jeff Johnson295189b2012-06-20 16:38:30 -07004439/*
4440 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4441 * send SET Bcast STA key RSP back to PE
4442 */
4443void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4444{
4445 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4446 tWDA_CbContext *pWDA;
4447 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004449 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004450 if(NULL == pWdaParams)
4451 {
4452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004453 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 VOS_ASSERT(0) ;
4455 return ;
4456 }
4457 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4458 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4460 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004461 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004463 return ;
4464}
4465
Jeff Johnson295189b2012-06-20 16:38:30 -07004466/*
4467 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4468 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4469 * Encryption)
4470 */
4471VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4472 tSetStaKeyParams *setStaKeyParams )
4473{
4474 WDI_Status status = WDI_STATUS_SUCCESS ;
4475 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4476 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4477 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4478 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004479 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004481 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 if(NULL == wdiSetStaKeyParam)
4483 {
4484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 VOS_ASSERT(0);
4487 return VOS_STATUS_E_NOMEM;
4488 }
4489 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4490 if(NULL == pWdaParams)
4491 {
4492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 VOS_ASSERT(0);
4495 vos_mem_free(wdiSetStaKeyParam);
4496 return VOS_STATUS_E_NOMEM;
4497 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004500 /* copy set STA key params to WDI structure */
4501 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4502 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4503 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4504 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 if(setStaKeyParams->encType != eSIR_ED_NONE)
4506 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004507 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4508 keyIndex++)
4509 {
4510 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4511 setStaKeyParams->key[keyIndex].keyId;
4512 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4513 setStaKeyParams->key[keyIndex].unicast;
4514 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4515 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004516 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4517 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4518 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4519 setStaKeyParams->key[keyIndex].paeRole;
4520 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4521 setStaKeyParams->key[keyIndex].keyLength;
4522 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4523 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4526 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004527 }
4528 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004529 /* Store set key pointer, as this will be used for response */
4530 /* store Params pass it to WDI */
4531 pWdaParams->pWdaContext = pWDA;
4532 pWdaParams->wdaMsgParam = setStaKeyParams;
4533 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4535 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004536 if(IS_WDI_STATUS_FAILURE(status))
4537 {
4538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4539 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4541 vos_mem_free(pWdaParams) ;
4542 setStaKeyParams->status = eSIR_FAILURE ;
4543 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4544 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004545 return CONVERT_WDI2VOS_STATUS(status) ;
4546}
Jeff Johnson295189b2012-06-20 16:38:30 -07004547/*
4548 * FUNCTION: WDA_RemoveStaKeyReqCallback
4549 * send SET BSS key RSP back to PE
4550 */
4551void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4552{
4553 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4554 tWDA_CbContext *pWDA;
4555 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004557 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 if(NULL == pWdaParams)
4559 {
4560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004561 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 VOS_ASSERT(0) ;
4563 return ;
4564 }
4565 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4566 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4568 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004569 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004570 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004571 return ;
4572}
4573
Jeff Johnson295189b2012-06-20 16:38:30 -07004574/*
4575 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4576 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4577 */
4578VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4579 tRemoveStaKeyParams *removeStaKeyParams )
4580{
4581 WDI_Status status = WDI_STATUS_SUCCESS ;
4582 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4583 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4584 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4585 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004587 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004588 if(NULL == wdiRemoveStaKeyParam)
4589 {
4590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 VOS_ASSERT(0);
4593 return VOS_STATUS_E_NOMEM;
4594 }
4595 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4596 if(NULL == pWdaParams)
4597 {
4598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 VOS_ASSERT(0);
4601 vos_mem_free(wdiRemoveStaKeyParam);
4602 return VOS_STATUS_E_NOMEM;
4603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 /* copy remove STA key params to WDI structure*/
4605 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4606 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4607 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4608 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4609 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004610 /* Store remove key pointer, as this will be used for response */
4611 /* store Params pass it to WDI */
4612 pWdaParams->pWdaContext = pWDA;
4613 pWdaParams->wdaMsgParam = removeStaKeyParams;
4614 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004615 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4616 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 if(IS_WDI_STATUS_FAILURE(status))
4618 {
4619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4620 "Failure in remove STA Key Req WDI API, free all the memory " );
4621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4622 vos_mem_free(pWdaParams) ;
4623 removeStaKeyParams->status = eSIR_FAILURE ;
4624 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 return CONVERT_WDI2VOS_STATUS(status) ;
4627}
Jeff Johnson295189b2012-06-20 16:38:30 -07004628/*
4629 * FUNCTION: WDA_IsHandleSetLinkStateReq
4630 * Update the WDA state and return the status to handle this message or not
4631 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004632WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4633 tWDA_CbContext *pWDA,
4634 tLinkStateParams *linkStateParams)
4635{
4636 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004637 switch(linkStateParams->state)
4638 {
4639 case eSIR_LINK_PREASSOC_STATE:
4640 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4641 /*
4642 * set the WDA state to PRE ASSOC
4643 * copy the BSSID into pWDA to use it in join request and return,
4644 * No need to handle these messages.
4645 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004646 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4647 {
4648 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004650 }
4651 else
4652 {
4653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004654 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004655 VOS_ASSERT(0);
4656 }
4657
4658 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4659 {
4660 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004661 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004662 }
4663 else
4664 {
4665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004666 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004667 VOS_ASSERT(0);
4668 }
4669
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4671 *channel and after ) so reset the WDA state to ready when the second
4672 * time UMAC issue the link state with PREASSOC
4673 */
4674 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4675 {
4676 /* RESET WDA state back to WDA_READY_STATE */
4677 pWDA->wdaState = WDA_READY_STATE;
4678 }
4679 else
4680 {
4681 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4682 }
4683 //populate linkState info in WDACbCtxt
4684 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 default:
4687 if(pWDA->wdaState != WDA_READY_STATE)
4688 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004689 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4690 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4691 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4692 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4693 *the ASSERT in WDA_Stop during module unload.*/
4694 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4695 {
4696 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004697 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004698 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004699 else
4700 {
4701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004702 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004703 status = WDA_IGNORE_SET_LINK_STATE;
4704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 }
4706 break;
4707 }
4708
4709 return status;
4710}
Jeff Johnson295189b2012-06-20 16:38:30 -07004711/*
4712 * FUNCTION: WDA_SetLinkStateCallback
4713 * call back function for set link state from WDI
4714 */
4715void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4716{
4717 tWDA_CbContext *pWDA;
4718 tLinkStateParams *linkStateParams;
4719 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004721 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 if(NULL == pWdaParams)
4723 {
4724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004725 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 VOS_ASSERT(0) ;
4727 return ;
4728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 /*
4732 * In STA mode start the BA activity check timer after association
4733 * and in AP mode start BA activity check timer after BSS start */
4734 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4735 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004736 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4737 ((status == WDI_STATUS_SUCCESS) &&
4738 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 {
4740 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004742 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004743 /*
4744 * No respone required for WDA_SET_LINK_STATE so free the request
4745 * param here
4746 */
4747 if( pWdaParams != NULL )
4748 {
4749 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4750 {
4751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4752 }
4753 vos_mem_free(pWdaParams);
4754 }
4755 return ;
4756}
Jeff Johnson295189b2012-06-20 16:38:30 -07004757/*
4758 * FUNCTION: WDA_ProcessSetLinkState
4759 * Request to WDI to set the link status.
4760 */
4761VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4762 tLinkStateParams *linkStateParams)
4763{
4764 WDI_Status status = WDI_STATUS_SUCCESS ;
4765 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4766 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4767 sizeof(WDI_SetLinkReqParamsType)) ;
4768 tWDA_ReqParams *pWdaParams ;
4769 tpAniSirGlobal pMac;
4770 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4771
4772 if(NULL == pMac)
4773 {
4774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004775 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004777 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004778 return VOS_STATUS_E_FAILURE;
4779 }
4780
4781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004782 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 if(NULL == wdiSetLinkStateParam)
4784 {
4785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004787 VOS_ASSERT(0);
4788 return VOS_STATUS_E_NOMEM;
4789 }
4790 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4791 if(NULL == pWdaParams)
4792 {
4793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004794 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 VOS_ASSERT(0);
4796 vos_mem_free(wdiSetLinkStateParam);
4797 return VOS_STATUS_E_NOMEM;
4798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 if(WDA_IGNORE_SET_LINK_STATE ==
4800 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4801 {
4802 status = WDI_STATUS_E_FAILURE;
4803 }
4804 else
4805 {
4806 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4807 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4809 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4811 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004812 pWdaParams->pWdaContext = pWDA;
4813 /* Store remove key pointer, as this will be used for response */
4814 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004815 /* store Params pass it to WDI */
4816 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4817 /* Stop Timer only other than GO role and concurrent session */
4818 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07004819 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4821 {
4822 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004824 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4825 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 if(IS_WDI_STATUS_FAILURE(status))
4827 {
4828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4829 "Failure in set link state Req WDI API, free all the memory " );
4830 }
4831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004832 if(IS_WDI_STATUS_FAILURE(status))
4833 {
4834 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004835 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004836 vos_mem_free(pWdaParams);
4837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004838 return CONVERT_WDI2VOS_STATUS(status) ;
4839}
Jeff Johnson295189b2012-06-20 16:38:30 -07004840/*
4841 * FUNCTION: WDA_GetStatsReqParamsCallback
4842 * send the response to PE with Stats received from WDI
4843 */
4844void WDA_GetStatsReqParamsCallback(
4845 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4846 void* pUserData)
4847{
4848 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4849 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4850
4851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004852 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 pGetPEStatsRspParams =
4854 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4855 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4856
4857 if(NULL == pGetPEStatsRspParams)
4858 {
4859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004860 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 VOS_ASSERT(0);
4862 return;
4863 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4865 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4866 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4867 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4868 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4869
4870 //Fill the Session Id Properly in PE
4871 pGetPEStatsRspParams->sessionId = 0;
4872 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004873 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004874 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4875 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 vos_mem_copy( pGetPEStatsRspParams + 1,
4877 wdiGetStatsRsp + 1,
4878 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 /* send response to UMAC*/
4880 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4881
4882 return;
4883}
4884
Jeff Johnson295189b2012-06-20 16:38:30 -07004885/*
4886 * FUNCTION: WDA_ProcessGetStatsReq
4887 * Request to WDI to get the statistics
4888 */
4889VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4890 tAniGetPEStatsReq *pGetStatsParams)
4891{
4892 WDI_Status status = WDI_STATUS_SUCCESS ;
4893 WDI_GetStatsReqParamsType wdiGetStatsParam;
4894 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004896 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4898 pGetStatsParams->staId;
4899 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4900 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004902 status = WDI_GetStatsReq(&wdiGetStatsParam,
4903 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 if(IS_WDI_STATUS_FAILURE(status))
4905 {
4906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4907 "Failure in Get Stats Req WDI API, free all the memory " );
4908 pGetPEStatsRspParams =
4909 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4910 if(NULL == pGetPEStatsRspParams)
4911 {
4912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004914 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004915 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004916 return VOS_STATUS_E_NOMEM;
4917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4919 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4920 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4921 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4922 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4923 (void *)pGetPEStatsRspParams, 0) ;
4924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 /* Free the request message */
4926 vos_mem_free(pGetStatsParams);
4927 return CONVERT_WDI2VOS_STATUS(status);
4928}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004929
4930#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
4931/*
4932 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
4933 * send the response to PE with roam Rssi received from WDI
4934 */
4935void WDA_GetRoamRssiReqParamsCallback(
4936 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
4937 void* pUserData)
4938{
4939 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4940 tWDA_CbContext *pWDA = NULL;
4941 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
4942 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
4943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4944 "<------ %s " ,__func__);
4945 if(NULL == pWdaParams)
4946 {
4947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4948 "%s: pWdaParams received NULL", __func__);
4949 VOS_ASSERT(0) ;
4950 return ;
4951 }
4952 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4953 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
4954
4955 if(NULL == pGetRoamRssiReqParams)
4956 {
4957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4958 "%s: pGetRoamRssiReqParams received NULL", __func__);
4959 VOS_ASSERT(0);
4960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4961 vos_mem_free(pWdaParams);
4962 return ;
4963 }
4964 pGetRoamRssiRspParams =
4965 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
4966
4967 if(NULL == pGetRoamRssiRspParams)
4968 {
4969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4970 "%s: VOS MEM Alloc Failure", __func__);
4971 VOS_ASSERT(0);
4972 return;
4973 }
4974 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
4975 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004976 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004977 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
4978 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
4979
4980 /* Assign get roam rssi req (backup) in to the response */
4981 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
4982
4983 /* free WDI command buffer */
4984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4985 vos_mem_free(pWdaParams) ;
4986
4987 /* send response to UMAC*/
4988 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
4989
4990 return;
4991}
4992
4993
4994
4995/*
4996 * FUNCTION: WDA_ProcessGetRoamRssiReq
4997 * Request to WDI to get the statistics
4998 */
4999VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5000 tAniGetRssiReq *pGetRoamRssiParams)
5001{
5002 WDI_Status status = WDI_STATUS_SUCCESS ;
5003 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5004 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5005 tWDA_ReqParams *pWdaParams = NULL;
5006
5007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5008 "------> %s " ,__func__);
5009 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5010 pGetRoamRssiParams->staId;
5011 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5012
5013 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5014 if(NULL == pWdaParams)
5015 {
5016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5017 "%s: VOS MEM Alloc Failure", __func__);
5018 VOS_ASSERT(0);
5019 return VOS_STATUS_E_NOMEM;
5020 }
5021
5022 /* Store Init Req pointer, as this will be used for response */
5023 pWdaParams->pWdaContext = pWDA;
5024
5025 /* Take Get roam Rssi req backup as it stores the callback to be called after
5026 receiving the response */
5027 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5028 pWdaParams->wdaWdiApiMsgParam = NULL;
5029
5030 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5031 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5032 if(IS_WDI_STATUS_FAILURE(status))
5033 {
5034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5035 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5036 pGetRoamRssiRspParams =
5037 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5038 if(NULL == pGetRoamRssiRspParams)
5039 {
5040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5041 "%s: VOS MEM Alloc Failure", __func__);
5042 VOS_ASSERT(0);
5043 vos_mem_free(pGetRoamRssiParams);
5044 vos_mem_free(pWdaParams);
5045 return VOS_STATUS_E_NOMEM;
5046 }
5047 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5048 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5049 pGetRoamRssiRspParams->rssi = 0;
5050 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5051 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5052 (void *)pGetRoamRssiRspParams, 0) ;
5053 }
5054 return CONVERT_WDI2VOS_STATUS(status);
5055}
5056#endif
5057
5058
Jeff Johnson295189b2012-06-20 16:38:30 -07005059/*
5060 * FUNCTION: WDA_UpdateEDCAParamCallback
5061 * call back function for Update EDCA params from WDI
5062 */
5063void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5064{
5065 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5066 tEdcaParams *pEdcaParams;
5067
5068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005069 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 if(NULL == pWdaParams)
5071 {
5072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005073 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 VOS_ASSERT(0) ;
5075 return ;
5076 }
5077 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5079 vos_mem_free(pWdaParams);
5080 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005081 return ;
5082}
Jeff Johnson295189b2012-06-20 16:38:30 -07005083/*
5084 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5085 * Request to WDI to Update the EDCA params.
5086 */
5087VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5088 tEdcaParams *pEdcaParams)
5089{
5090 WDI_Status status = WDI_STATUS_SUCCESS ;
5091 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5092 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5093 sizeof(WDI_UpdateEDCAParamsType)) ;
5094 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005096 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 if(NULL == wdiEdcaParam)
5098 {
5099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005101 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005102 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005103 return VOS_STATUS_E_NOMEM;
5104 }
5105 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5106 if(NULL == pWdaParams)
5107 {
5108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005109 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005110 VOS_ASSERT(0);
5111 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005112 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 return VOS_STATUS_E_NOMEM;
5114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5116 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5117 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5118 &pEdcaParams->acbe);
5119 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5120 &pEdcaParams->acbk);
5121 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5122 &pEdcaParams->acvi);
5123 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5124 &pEdcaParams->acvo);
5125 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 pWdaParams->pWdaContext = pWDA;
5127 /* Store remove key pointer, as this will be used for response */
5128 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005129 /* store Params pass it to WDI */
5130 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005131 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5132 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 if(IS_WDI_STATUS_FAILURE(status))
5134 {
5135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5136 "Failure in Update EDCA Params WDI API, free all the memory " );
5137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5138 vos_mem_free(pWdaParams);
5139 vos_mem_free(pEdcaParams);
5140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005141 return CONVERT_WDI2VOS_STATUS(status) ;
5142}
Jeff Johnson295189b2012-06-20 16:38:30 -07005143/*
5144 * FUNCTION: WDA_AddBAReqCallback
5145 * send ADD BA RSP back to PE
5146 */
5147void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5148 void* pUserData)
5149{
5150 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5151 tWDA_CbContext *pWDA;
5152 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005154 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005155 if(NULL == pWdaParams)
5156 {
5157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005158 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 VOS_ASSERT(0) ;
5160 return ;
5161 }
5162 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5163 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5165 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005166 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 return ;
5169}
5170
Jeff Johnson295189b2012-06-20 16:38:30 -07005171/*
5172 * FUNCTION: WDA_ProcessAddBAReq
5173 * Request to WDI to Update the ADDBA REQ params.
5174 */
5175VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5176 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5177{
Jeff Johnson43971f52012-07-17 12:26:56 -07005178 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005179 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5180 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5181 sizeof(WDI_AddBAReqParamsType)) ;
5182 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005184 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005185 if(NULL == wdiAddBAReqParam)
5186 {
5187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005189 VOS_ASSERT(0);
5190 return VOS_STATUS_E_NOMEM;
5191 }
5192 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5193 if(NULL == pWdaParams)
5194 {
5195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005196 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005197 VOS_ASSERT(0);
5198 vos_mem_free(wdiAddBAReqParam);
5199 return VOS_STATUS_E_NOMEM;
5200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 do
5202 {
5203 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005204 wdiAddBaInfo->ucSTAIdx = staIdx ;
5205 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5206 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 } while(0) ;
5208 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 pWdaParams->pWdaContext = pWDA;
5210 /* store Params pass it to WDI */
5211 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5212 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005213 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5214 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005215
Jeff Johnson43971f52012-07-17 12:26:56 -07005216 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005217 {
5218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005219 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5220 status = CONVERT_WDI2VOS_STATUS(wstatus);
5221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 vos_mem_free(pWdaParams);
5223 pAddBAReqParams->status = eSIR_FAILURE;
5224 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5225 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005226 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005227}
Jeff Johnson295189b2012-06-20 16:38:30 -07005228/*
5229 * FUNCTION: WDA_AddBASessionReqCallback
5230 * send ADD BA SESSION RSP back to PE/(or TL)
5231 */
5232void WDA_AddBASessionReqCallback(
5233 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5234{
5235 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5236 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5237 tWDA_CbContext *pWDA;
5238 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005240 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005241 if(NULL == pWdaParams)
5242 {
5243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005244 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005245 VOS_ASSERT(0) ;
5246 return ;
5247 }
5248 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5249 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005250 if( NULL == pAddBAReqParams )
5251 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005253 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5256 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005257 return ;
5258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5260 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005261 /*
5262 * if WDA in update TL state, update TL with BA session parama and send
5263 * another request to HAL(/WDI) (ADD_BA_REQ)
5264 */
5265
5266 if((VOS_STATUS_SUCCESS ==
5267 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5268 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5269 {
5270 /* Update TL with BA info received from HAL/WDI */
5271 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5272 wdiAddBaSession->usBaSessionID,
5273 wdiAddBaSession->ucSTAIdx,
5274 wdiAddBaSession->ucBaTID,
5275 wdiAddBaSession->ucBaBufferSize,
5276 wdiAddBaSession->ucWinSize,
5277 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005278 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5279 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5280 }
5281 else
5282 {
5283 pAddBAReqParams->status =
5284 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5285
5286 /* Setting Flag to indicate that Set BA is success */
5287 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5288 {
5289 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5290 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5291 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 /*Reset the WDA state to READY */
5296 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 return ;
5298}
5299
Jeff Johnson295189b2012-06-20 16:38:30 -07005300/*
5301 * FUNCTION: WDA_ProcessAddBASessionReq
5302 * Request to WDI to Update the ADDBA REQ params.
5303 */
5304VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5305 tAddBAParams *pAddBAReqParams)
5306{
5307 WDI_Status status = WDI_STATUS_SUCCESS ;
5308 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5309 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5310 sizeof(WDI_AddBASessionReqParamsType)) ;
5311 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005312 WLANTL_STAStateType tlSTAState = 0;
5313
Jeff Johnson295189b2012-06-20 16:38:30 -07005314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005315 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 if(NULL == wdiAddBASessionReqParam)
5317 {
5318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 VOS_ASSERT(0);
5321 return VOS_STATUS_E_NOMEM;
5322 }
5323 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5324 if(NULL == pWdaParams)
5325 {
5326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005327 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 VOS_ASSERT(0);
5329 vos_mem_free(wdiAddBASessionReqParam);
5330 return VOS_STATUS_E_NOMEM;
5331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 /*
5333 * Populate ADD BA parameters and pass these paarmeters to WDI.
5334 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5335 * the state to track if these is BA recipient case or BA initiator
5336 * case.
5337 */
5338 do
5339 {
5340 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5341 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5342 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5343 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5344 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5345 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5346 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5349 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5350 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5351 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5352 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005353 /* check the BA direction and update state accordingly */
5354 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5355 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5356 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5357
5358 }while(0) ;
5359 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 pWdaParams->pWdaContext = pWDA;
5361 /* Store ADD BA pointer, as this will be used for response */
5362 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5363 /* store Params pass it to WDI */
5364 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005365
5366 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5367 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5368 */
5369 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5370 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5371 {
5372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5373 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5374 status = WDI_STATUS_E_NOT_ALLOWED;
5375 pAddBAReqParams->status =
5376 CONVERT_WDI2SIR_STATUS(status) ;
5377 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5378 /*Reset the WDA state to READY */
5379 pWDA->wdaState = WDA_READY_STATE;
5380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5381 vos_mem_free(pWdaParams);
5382
5383 return CONVERT_WDI2VOS_STATUS(status) ;
5384 }
5385
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5387 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 if(IS_WDI_STATUS_FAILURE(status))
5389 {
5390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005391 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5393 "Send ADD BA failure response to PE\n");
5394 pAddBAReqParams->status =
5395 CONVERT_WDI2SIR_STATUS(status) ;
5396 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005397 /*Reset the WDA state to READY */
5398 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005400 vos_mem_free(pWdaParams);
5401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005403}
Jeff Johnson295189b2012-06-20 16:38:30 -07005404/*
5405 * FUNCTION: WDA_DelBANotifyTL
5406 * send DEL BA IND to TL
5407 */
5408void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5409 tDelBAParams *pDelBAReqParams)
5410{
5411 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5412 //tSirMsgQ msg;
5413 vos_msg_t vosMsg;
5414 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 if(NULL == pDelBAInd)
5416 {
5417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 VOS_ASSERT(0) ;
5420 return;
5421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005422 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5423 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5424 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5425 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005426
Jeff Johnson295189b2012-06-20 16:38:30 -07005427
5428 vosMsg.type = WDA_DELETEBA_IND;
5429 vosMsg.bodyptr = pDelBAInd;
5430 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5431 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5432 {
5433 vosStatus = VOS_STATUS_E_BADMSG;
5434 }
5435}
Jeff Johnson295189b2012-06-20 16:38:30 -07005436/*
5437 * FUNCTION: WDA_DelBAReqCallback
5438 * send DEL BA RSP back to PE
5439 */
5440void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5441{
5442 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5443 tWDA_CbContext *pWDA;
5444 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005446 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 if(NULL == pWdaParams)
5448 {
5449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005450 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005451 VOS_ASSERT(0) ;
5452 return ;
5453 }
5454 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5455 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 /* Notify TL about DEL BA in case of recipinet */
5457 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5458 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5459 {
5460 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005462 /*
5463 * No respone required for WDA_DELBA_IND so just free the request
5464 * param here
5465 */
5466 vos_mem_free(pDelBAReqParams);
5467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5468 vos_mem_free(pWdaParams);
5469 return ;
5470}
5471
Jeff Johnson295189b2012-06-20 16:38:30 -07005472/*
5473 * FUNCTION: WDA_ProcessDelBAReq
5474 * Request to WDI to Update the DELBA REQ params.
5475 */
5476VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5477 tDelBAParams *pDelBAReqParams)
5478{
5479 WDI_Status status = WDI_STATUS_SUCCESS ;
5480 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5481 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5482 sizeof(WDI_DelBAReqParamsType)) ;
5483 tWDA_ReqParams *pWdaParams ;
5484 tANI_U16 staIdx = 0;
5485 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005487 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 if(NULL == wdiDelBAReqParam)
5489 {
5490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005491 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 VOS_ASSERT(0);
5493 return VOS_STATUS_E_NOMEM;
5494 }
5495 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5496 if(NULL == pWdaParams)
5497 {
5498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 VOS_ASSERT(0);
5501 vos_mem_free(wdiDelBAReqParam);
5502 return VOS_STATUS_E_NOMEM;
5503 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005504 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5505 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5506 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5507 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005508 pWdaParams->pWdaContext = pWDA;
5509 /* Store DEL BA pointer, as this will be used for response */
5510 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 /* store Params pass it to WDI */
5512 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5514 * maintained in WDA, so that WDA can retry for another BA session
5515 */
5516 staIdx = pDelBAReqParams->staIdx;
5517 tid = pDelBAReqParams->baTID;
5518 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 status = WDI_DelBAReq(wdiDelBAReqParam,
5520 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 if(IS_WDI_STATUS_FAILURE(status))
5522 {
5523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5524 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5526 vos_mem_free(pWdaParams->wdaMsgParam);
5527 vos_mem_free(pWdaParams);
5528 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005530}
Jeff Johnson295189b2012-06-20 16:38:30 -07005531/*
5532 * FUNCTION: WDA_AddTSReqCallback
5533 * send ADD TS RSP back to PE
5534 */
5535void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5536{
5537 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5538 tWDA_CbContext *pWDA;
5539 tAddTsParams *pAddTsReqParams;
5540
5541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005542 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 if(NULL == pWdaParams)
5544 {
5545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005546 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 VOS_ASSERT(0) ;
5548 return ;
5549 }
5550 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5551 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5553 vos_mem_free(pWdaParams);
5554
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005555 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005556 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 return ;
5558}
5559
Jeff Johnson295189b2012-06-20 16:38:30 -07005560/*
5561 * FUNCTION: WDA_ProcessAddTSReq
5562 * Request to WDI to Update the ADD TS REQ params.
5563 */
5564VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5565 tAddTsParams *pAddTsReqParams)
5566{
5567 WDI_Status status = WDI_STATUS_SUCCESS ;
5568 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5569 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5570 sizeof(WDI_AddTSReqParamsType)) ;
5571 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005573 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 if(NULL == wdiAddTSReqParam)
5575 {
5576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 VOS_ASSERT(0);
5579 return VOS_STATUS_E_NOMEM;
5580 }
5581 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5582 if(NULL == pWdaParams)
5583 {
5584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005586 VOS_ASSERT(0);
5587 vos_mem_free(wdiAddTSReqParam);
5588 return VOS_STATUS_E_NOMEM;
5589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5591 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005592 //TS IE
5593 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5594 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5595 pAddTsReqParams->tspec.length;
5596
5597 //TS IE : TS INFO : TRAFFIC
5598 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5599 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5600 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5601 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5602 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5603 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5604 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5605 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5606 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5607 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5608 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5609 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5610 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5611 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5612 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5613 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5614
5615 //TS IE : TS INFO : SCHEDULE
5616 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5617 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5618 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5619 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 //TS IE
5621 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5622 pAddTsReqParams->tspec.nomMsduSz;
5623 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5624 pAddTsReqParams->tspec.maxMsduSz;
5625 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5626 pAddTsReqParams->tspec.minSvcInterval;
5627 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5628 pAddTsReqParams->tspec.maxSvcInterval;
5629 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5630 pAddTsReqParams->tspec.inactInterval;
5631 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5632 pAddTsReqParams->tspec.suspendInterval;
5633 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5634 pAddTsReqParams->tspec.svcStartTime;
5635 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5636 pAddTsReqParams->tspec.minDataRate;
5637 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5638 pAddTsReqParams->tspec.meanDataRate;
5639 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5640 pAddTsReqParams->tspec.peakDataRate;
5641 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5642 pAddTsReqParams->tspec.maxBurstSz;
5643 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5644 pAddTsReqParams->tspec.delayBound;
5645 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5646 pAddTsReqParams->tspec.minPhyRate;
5647 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5648 pAddTsReqParams->tspec.surplusBw;
5649 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5650 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 /* TODO: tAddTsParams doesn't have the following fields */
5652#if 0
5653 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5654 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5655 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5656 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5657#endif
5658 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5659
5660 pWdaParams->pWdaContext = pWDA;
5661 /* Store ADD TS pointer, as this will be used for response */
5662 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 /* store Params pass it to WDI */
5664 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 status = WDI_AddTSReq(wdiAddTSReqParam,
5666 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005667 if(IS_WDI_STATUS_FAILURE(status))
5668 {
5669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5670 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5672 vos_mem_free(pWdaParams);
5673 pAddTsReqParams->status = eSIR_FAILURE ;
5674 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5675 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005676 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005677}
5678
Jeff Johnson295189b2012-06-20 16:38:30 -07005679/*
5680 * FUNCTION: WDA_DelTSReqCallback
5681 * send DEL TS RSP back to PE
5682 */
5683void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5684{
5685 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005687 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5689 vos_mem_free(pWdaParams->wdaMsgParam) ;
5690 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 /*
5692 * No respone required for WDA_DEL_TS_REQ so just free the request
5693 * param here
5694 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 return ;
5696}
5697
Jeff Johnson295189b2012-06-20 16:38:30 -07005698/*
5699 * FUNCTION: WDA_ProcessDelTSReq
5700 * Request to WDI to Update the DELTS REQ params.
5701 */
5702VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5703 tDelTsParams *pDelTSReqParams)
5704{
5705 WDI_Status status = WDI_STATUS_SUCCESS ;
5706 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5707 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5708 sizeof(WDI_DelTSReqParamsType)) ;
5709 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005711 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005712 if(NULL == wdiDelTSReqParam)
5713 {
5714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 VOS_ASSERT(0);
5717 return VOS_STATUS_E_NOMEM;
5718 }
5719 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5720 if(NULL == pWdaParams)
5721 {
5722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005723 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005724 VOS_ASSERT(0);
5725 vos_mem_free(wdiDelTSReqParam);
5726 return VOS_STATUS_E_NOMEM;
5727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5729 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5730 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5731 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5732 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005733 pWdaParams->pWdaContext = pWDA;
5734 /* Store DEL TS pointer, as this will be used for response */
5735 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005736 /* store Params pass it to WDI */
5737 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005738 status = WDI_DelTSReq(wdiDelTSReqParam,
5739 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 if(IS_WDI_STATUS_FAILURE(status))
5741 {
5742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5743 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5745 vos_mem_free(pWdaParams->wdaMsgParam);
5746 vos_mem_free(pWdaParams);
5747 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005748 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005749}
Jeff Johnson295189b2012-06-20 16:38:30 -07005750/*
5751 * FUNCTION: WDA_UpdateBeaconParamsCallback
5752 * Free the memory. No need to send any response to PE in this case
5753 */
5754void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5755{
5756 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005758 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 if(NULL == pWdaParams)
5760 {
5761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005762 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005763 VOS_ASSERT(0) ;
5764 return ;
5765 }
5766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5767 vos_mem_free(pWdaParams->wdaMsgParam) ;
5768 vos_mem_free(pWdaParams);
5769 /*
5770 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5771 * param here
5772 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 return ;
5774}
Jeff Johnson295189b2012-06-20 16:38:30 -07005775/*
5776 * FUNCTION: WDA_ProcessUpdateBeaconParams
5777 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5778 */
5779VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5780 tUpdateBeaconParams *pUpdateBeaconParams)
5781{
5782 WDI_Status status = WDI_STATUS_SUCCESS ;
5783 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5784 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5785 sizeof(WDI_UpdateBeaconParamsType)) ;
5786 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005788 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005789 if(NULL == wdiUpdateBeaconParams)
5790 {
5791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005792 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005793 VOS_ASSERT(0);
5794 return VOS_STATUS_E_NOMEM;
5795 }
5796 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5797 if(NULL == pWdaParams)
5798 {
5799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005800 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 VOS_ASSERT(0);
5802 vos_mem_free(wdiUpdateBeaconParams);
5803 return VOS_STATUS_E_NOMEM;
5804 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005805 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5806 pUpdateBeaconParams->bssIdx;
5807 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5808 pUpdateBeaconParams->fShortPreamble;
5809 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5810 pUpdateBeaconParams->fShortSlotTime;
5811 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5812 pUpdateBeaconParams->beaconInterval;
5813 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5814 pUpdateBeaconParams->llaCoexist;
5815 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5816 pUpdateBeaconParams->llbCoexist;
5817 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5818 pUpdateBeaconParams->llgCoexist;
5819 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5820 pUpdateBeaconParams->ht20MhzCoexist;
5821 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5822 pUpdateBeaconParams->llnNonGFCoexist;
5823 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5824 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5825 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5826 pUpdateBeaconParams->fRIFSMode;
5827 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5828 pUpdateBeaconParams->paramChangeBitmap;
5829 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5830
5831 pWdaParams->pWdaContext = pWDA;
5832 /* Store UpdateBeacon Req pointer, as this will be used for response */
5833 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005834 /* store Params pass it to WDI */
5835 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5837 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5838 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005839 if(IS_WDI_STATUS_FAILURE(status))
5840 {
5841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5842 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5844 vos_mem_free(pWdaParams->wdaMsgParam);
5845 vos_mem_free(pWdaParams);
5846 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005847 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005848}
Jeff Johnson295189b2012-06-20 16:38:30 -07005849#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005850/*
5851 * FUNCTION: WDA_TSMStatsReqCallback
5852 * send TSM Stats RSP back to PE
5853 */
5854void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5855{
5856 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5857 tWDA_CbContext *pWDA = NULL;
5858 tTSMStats *pTsmRspParams = NULL;
5859
5860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005861 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005862 if(NULL == pWdaParams)
5863 {
5864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005865 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005866 VOS_ASSERT(0) ;
5867 return ;
5868 }
5869 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5870 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005871 if( NULL == pTsmRspParams )
5872 {
5873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005874 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 VOS_ASSERT( 0 );
5876 return ;
5877 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5879 vos_mem_free(pWdaParams);
5880
5881 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5882 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5883 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5884 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5885 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5886 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5887 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5888 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5889 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5890 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 return ;
5893}
5894
5895
Jeff Johnson295189b2012-06-20 16:38:30 -07005896/*
5897 * FUNCTION: WDA_ProcessTsmStatsReq
5898 * Request to WDI to get the TSM Stats params.
5899 */
5900VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5901 tTSMStats *pTsmStats)
5902{
5903 WDI_Status status = WDI_STATUS_SUCCESS ;
5904 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5905 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005907 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5909 sizeof(WDI_TSMStatsReqParamsType));
5910 if(NULL == wdiTSMReqParam)
5911 {
5912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 VOS_ASSERT(0);
5915 return VOS_STATUS_E_NOMEM;
5916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5918 if(NULL == pWdaParams)
5919 {
5920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 VOS_ASSERT(0);
5923 vos_mem_free(wdiTSMReqParam);
5924 return VOS_STATUS_E_NOMEM;
5925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5927 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5928 pTsmStats->bssId,
5929 sizeof(wpt_macAddr));
5930 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5931
5932 pWdaParams->pWdaContext = pWDA;
5933 /* Store TSM Stats pointer, as this will be used for response */
5934 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005935 /* store Params pass it to WDI */
5936 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 status = WDI_TSMStatsReq(wdiTSMReqParam,
5938 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 if(IS_WDI_STATUS_FAILURE(status))
5940 {
5941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5942 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5944 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005945 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 return CONVERT_WDI2VOS_STATUS(status) ;
5948}
5949#endif
5950/*
5951 * FUNCTION: WDA_SendBeaconParamsCallback
5952 * No need to send any response to PE in this case
5953 */
5954void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5955{
5956
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005958 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005959 return ;
5960}
Jeff Johnson295189b2012-06-20 16:38:30 -07005961/*
5962 * FUNCTION: WDA_ProcessSendBeacon
5963 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5964 * start beacon trasmission
5965 */
5966VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5967 tSendbeaconParams *pSendbeaconParams)
5968{
5969 WDI_Status status = WDI_STATUS_SUCCESS ;
5970 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005972 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005973 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5974 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5975 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5976 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07005977 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5978 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05305979 /* p2pIeOffset should be atleast greater than timIeOffset */
5980 if ((pSendbeaconParams->p2pIeOffset != 0) &&
5981 (pSendbeaconParams->p2pIeOffset <
5982 pSendbeaconParams->timIeOffset))
5983 {
5984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5985 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
5986 VOS_ASSERT( 0 );
5987 return WDI_STATUS_E_FAILURE;
5988 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5990 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 /* Copy the beacon template to local buffer */
5992 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5993 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5994 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5995
Jeff Johnson295189b2012-06-20 16:38:30 -07005996 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5997 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 if(IS_WDI_STATUS_FAILURE(status))
5999 {
6000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6001 "Failure in SEND BEACON REQ Params WDI API" );
6002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 vos_mem_free(pSendbeaconParams);
6004 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006005}
Jeff Johnson295189b2012-06-20 16:38:30 -07006006/*
6007 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6008 * No need to send any response to PE in this case
6009 */
6010void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6011{
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006013 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 return ;
6015}
6016
Jeff Johnson295189b2012-06-20 16:38:30 -07006017/*
6018 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6019 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6020 * send probe response
6021 */
6022VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6023 tSendProbeRespParams *pSendProbeRspParams)
6024{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006025 WDI_Status status = WDI_STATUS_SUCCESS;
6026 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6027 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006029 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006030
6031 if (!wdiSendProbeRspParam)
6032 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6033
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006035 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006037 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006039 /* Copy the Probe Response template to local buffer */
6040 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006041 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 pSendProbeRspParams->pProbeRespTemplate,
6043 pSendProbeRspParams->probeRespTemplateLen);
6044 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006045 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006046 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6047 WDI_PROBE_REQ_BITMAP_IE_LEN);
6048
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006049 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006050
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006051 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 if(IS_WDI_STATUS_FAILURE(status))
6054 {
6055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6056 "Failure in SEND Probe RSP Params WDI API" );
6057 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006059 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006061}
Jeff Johnson295189b2012-06-20 16:38:30 -07006062#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6063/*
6064 * FUNCTION: WDA_SetMaxTxPowerCallBack
6065 * send the response to PE with power value received from WDI
6066 */
6067void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6068 void* pUserData)
6069{
6070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6071 tWDA_CbContext *pWDA = NULL;
6072 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6073
6074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006075 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 if(NULL == pWdaParams)
6077 {
6078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006079 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 VOS_ASSERT(0) ;
6081 return ;
6082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006083 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6084 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006085 if( NULL == pMaxTxPowerParams )
6086 {
6087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006088 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006089 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6091 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 return ;
6093 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006094
Jeff Johnson295189b2012-06-20 16:38:30 -07006095
6096 /*need to free memory for the pointers used in the
6097 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6099 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006101
Jeff Johnson295189b2012-06-20 16:38:30 -07006102
6103 /* send response to UMAC*/
6104 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6105
6106 return;
6107}
Jeff Johnson295189b2012-06-20 16:38:30 -07006108/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006109 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006110 * Request to WDI to send set Max Tx Power Request
6111 */
6112 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6113 tMaxTxPowerParams *MaxTxPowerParams)
6114{
6115 WDI_Status status = WDI_STATUS_SUCCESS;
6116 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6117 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006118
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006120 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006121
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6123 sizeof(WDI_SetMaxTxPowerParamsType));
6124 if(NULL == wdiSetMaxTxPowerParams)
6125 {
6126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006128 VOS_ASSERT(0);
6129 return VOS_STATUS_E_NOMEM;
6130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006131 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6132 if(NULL == pWdaParams)
6133 {
6134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 vos_mem_free(wdiSetMaxTxPowerParams);
6137 VOS_ASSERT(0);
6138 return VOS_STATUS_E_NOMEM;
6139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 /* Copy.Max.Tx.Power Params to WDI structure */
6141 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6142 MaxTxPowerParams->bssId,
6143 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6145 MaxTxPowerParams->selfStaMacAddr,
6146 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6148 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006150 pWdaParams->pWdaContext = pWDA;
6151 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006152 /* store Params pass it to WDI */
6153 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006154 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6155 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006156 if(IS_WDI_STATUS_FAILURE(status))
6157 {
6158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6159 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6161 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006162 /* send response to UMAC*/
6163 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 }
6165 return CONVERT_WDI2VOS_STATUS(status);
6166
6167}
Jeff Johnson295189b2012-06-20 16:38:30 -07006168#endif
schang86c22c42013-03-13 18:41:24 -07006169
6170/*
6171 * FUNCTION: WDA_SetTxPowerCallBack
6172 * send the response to PE with power value received from WDI
6173 */
6174void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6175 void* pUserData)
6176{
6177 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6178 tWDA_CbContext *pWDA = NULL;
6179 tSirSetTxPowerReq *pTxPowerParams = NULL;
6180
6181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6182 "<------ %s ", __func__);
6183 if(NULL == pWdaParams)
6184 {
6185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6186 "%s: pWdaParams received NULL", __func__);
6187 VOS_ASSERT(0) ;
6188 return ;
6189 }
6190 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6191 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6192 if(NULL == pTxPowerParams)
6193 {
6194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6195 "%s: pTxPowerParams received NULL " ,__func__);
6196 VOS_ASSERT(0);
6197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6198 vos_mem_free(pWdaParams);
6199 return ;
6200 }
6201
6202 /*need to free memory for the pointers used in the
6203 WDA Process.Set Max Tx Power Req function*/
6204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6205 vos_mem_free(pWdaParams);
6206
6207 /* send response to UMAC*/
6208 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6209 return;
6210}
6211
6212/*
6213 * FUNCTION: WDA_ProcessSetTxPowerReq
6214 * Request to WDI to send set Tx Power Request
6215 */
6216 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6217 tSirSetTxPowerReq *txPowerParams)
6218{
6219 WDI_Status status = WDI_STATUS_SUCCESS;
6220 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6221 tWDA_ReqParams *pWdaParams = NULL;
6222
6223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6224 "------> %s ", __func__);
6225
6226 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6227 sizeof(WDI_SetTxPowerParamsType));
6228 if(NULL == wdiSetTxPowerParams)
6229 {
6230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6231 "%s: VOS MEM Alloc Failure", __func__);
6232 VOS_ASSERT(0);
6233 return VOS_STATUS_E_NOMEM;
6234 }
6235 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6236 if(NULL == pWdaParams)
6237 {
6238 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6239 "%s: VOS MEM Alloc Failure", __func__);
6240 vos_mem_free(wdiSetTxPowerParams);
6241 VOS_ASSERT(0);
6242 return VOS_STATUS_E_NOMEM;
6243 }
6244 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6245 txPowerParams->bssIdx;
6246 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6247 txPowerParams->mwPower;
6248 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6249 pWdaParams->pWdaContext = pWDA;
6250 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6251 /* store Params pass it to WDI */
6252 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6253 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6254 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6255 if(IS_WDI_STATUS_FAILURE(status))
6256 {
6257 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6258 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6260 vos_mem_free(pWdaParams);
6261 /* send response to UMAC*/
6262 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6263 }
6264 return CONVERT_WDI2VOS_STATUS(status);
6265}
6266
Jeff Johnson295189b2012-06-20 16:38:30 -07006267/*
6268 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6269 * Free the memory. No need to send any response to PE in this case
6270 */
6271void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6272{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006273 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6274
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006276 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006277
6278 if(NULL == pWdaParams)
6279 {
6280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006281 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006282 VOS_ASSERT(0) ;
6283 return ;
6284 }
6285
6286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6287 vos_mem_free(pWdaParams->wdaMsgParam) ;
6288 vos_mem_free(pWdaParams);
6289
Jeff Johnson295189b2012-06-20 16:38:30 -07006290 /*
6291 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6292 * so just free the request param here
6293 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 return ;
6295}
6296
Jeff Johnson295189b2012-06-20 16:38:30 -07006297/*
6298 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6299 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6300 */
6301VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6302 tP2pPsParams *pP2pPsConfigParams)
6303{
6304 WDI_Status status = WDI_STATUS_SUCCESS ;
6305 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6306 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6307 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006308 tWDA_ReqParams *pWdaParams = NULL;
6309
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006311 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 if(NULL == wdiSetP2PGONOAReqParam)
6313 {
6314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006315 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 VOS_ASSERT(0);
6317 return VOS_STATUS_E_NOMEM;
6318 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006319
6320 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6321 if(NULL == pWdaParams)
6322 {
6323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006324 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006325 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006326 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006327 VOS_ASSERT(0);
6328 return VOS_STATUS_E_NOMEM;
6329 }
6330
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6332 pP2pPsConfigParams->opp_ps;
6333 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6334 pP2pPsConfigParams->ctWindow;
6335 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6336 pP2pPsConfigParams->count;
6337 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6338 pP2pPsConfigParams->duration;
6339 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6340 pP2pPsConfigParams->interval;
6341 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6342 pP2pPsConfigParams->single_noa_duration;
6343 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6344 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006345
Jeff Johnson295189b2012-06-20 16:38:30 -07006346 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6347 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006348 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6349
Jeff Johnson295189b2012-06-20 16:38:30 -07006350 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006351 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6352 pWdaParams->pWdaContext = pWDA;
6353
Jeff Johnson295189b2012-06-20 16:38:30 -07006354 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006355 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6356
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 if(IS_WDI_STATUS_FAILURE(status))
6358 {
6359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6360 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6362 vos_mem_free(pWdaParams->wdaMsgParam);
6363 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 return CONVERT_WDI2VOS_STATUS(status);
6366
Jeff Johnson295189b2012-06-20 16:38:30 -07006367}
Jeff Johnson295189b2012-06-20 16:38:30 -07006368#ifdef WLAN_FEATURE_VOWIFI_11R
6369/*
6370 * FUNCTION: WDA_AggrAddTSReqCallback
6371 * send ADD AGGREGATED TS RSP back to PE
6372 */
6373void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6374{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006375 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6376 tWDA_CbContext *pWDA;
6377 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006380 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006381 if(NULL == pWdaParams)
6382 {
6383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006384 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006385 VOS_ASSERT(0) ;
6386 return ;
6387 }
6388
6389 pWDA = pWdaParams->pWdaContext;
6390 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006391
6392 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6393 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006394 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006397
6398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6399 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 return ;
6401}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006402/*
6403 * FUNCTION: WDA_ProcessAddTSReq
6404 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6405 */
6406VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6407 tAggrAddTsParams *pAggrAddTsReqParams)
6408{
6409 WDI_Status status = WDI_STATUS_SUCCESS ;
6410 int i;
6411 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006412 tWDA_ReqParams *pWdaParams = NULL;
6413
6414
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006416 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006417 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6418 sizeof(WDI_AggrAddTSReqParamsType)) ;
6419 if(NULL == wdiAggrAddTSReqParam)
6420 {
6421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006422 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006423 VOS_ASSERT(0);
6424 return VOS_STATUS_E_NOMEM;
6425 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006426
6427
6428 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6429 if(NULL == pWdaParams)
6430 {
6431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006432 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006433 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006434 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006435 VOS_ASSERT(0);
6436 return VOS_STATUS_E_NOMEM;
6437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6439 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6440 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006441 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6442 {
6443 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6444 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6445 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6447 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6448 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6449 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6450 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6451 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6452 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6453 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6454 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6455 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6456 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6457 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6458 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6459 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6460 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6461 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6463 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6465 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6466 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6467 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6468 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6469 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6470 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6471 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6472 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6473 pAggrAddTsReqParams->tspec[i].inactInterval;
6474 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6475 pAggrAddTsReqParams->tspec[i].suspendInterval;
6476 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6477 pAggrAddTsReqParams->tspec[i].svcStartTime;
6478 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6479 pAggrAddTsReqParams->tspec[i].minDataRate;
6480 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6481 pAggrAddTsReqParams->tspec[i].meanDataRate;
6482 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6483 pAggrAddTsReqParams->tspec[i].peakDataRate;
6484 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6485 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6486 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6487 pAggrAddTsReqParams->tspec[i].delayBound;
6488 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6489 pAggrAddTsReqParams->tspec[i].minPhyRate;
6490 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6491 pAggrAddTsReqParams->tspec[i].surplusBw;
6492 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6493 pAggrAddTsReqParams->tspec[i].mediumTime;
6494 }
6495
6496 /* TODO: tAggrAddTsParams doesn't have the following fields */
6497#if 0
6498 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6499 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6500 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6501 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6502#endif
6503 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6504
6505 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006506 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006507 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006508 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6509
6510 pWdaParams->pWdaContext = pWDA;
6511
Jeff Johnson295189b2012-06-20 16:38:30 -07006512 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006513 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6514
Jeff Johnson295189b2012-06-20 16:38:30 -07006515 if(IS_WDI_STATUS_FAILURE(status))
6516 {
6517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6518 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6520 vos_mem_free(pWdaParams);
6521
6522 /* send the failure response back to PE*/
6523 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6524 {
6525 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6526 }
6527
6528 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6529 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006531 return CONVERT_WDI2VOS_STATUS(status) ;
6532}
6533#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006534/*
6535 * FUNCTION: WDA_EnterImpsReqCallback
6536 * send Enter IMPS RSP back to PE
6537 */
6538void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6539{
6540 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006542 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006543 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006544 return ;
6545}
Jeff Johnson295189b2012-06-20 16:38:30 -07006546/*
6547 * FUNCTION: WDA_ProcessEnterImpsReq
6548 * Request to WDI to Enter IMPS power state.
6549 */
6550VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6551{
6552 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006554 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006555 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006556 if(IS_WDI_STATUS_FAILURE(status))
6557 {
6558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6559 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006560 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006562 return CONVERT_WDI2VOS_STATUS(status) ;
6563}
Jeff Johnson295189b2012-06-20 16:38:30 -07006564/*
6565 * FUNCTION: WDA_ExitImpsReqCallback
6566 * send Exit IMPS RSP back to PE
6567 */
6568void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6569{
6570 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006572 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006573 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006574 return ;
6575}
Jeff Johnson295189b2012-06-20 16:38:30 -07006576/*
6577 * FUNCTION: WDA_ProcessExitImpsReq
6578 * Request to WDI to Exit IMPS power state.
6579 */
6580VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6581{
6582 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006584 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006585 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006586 if(IS_WDI_STATUS_FAILURE(status))
6587 {
6588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6589 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006590 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006592 return CONVERT_WDI2VOS_STATUS(status) ;
6593}
Jeff Johnson295189b2012-06-20 16:38:30 -07006594/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006595 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006596 * send Enter BMPS RSP back to PE
6597 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006598void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006599{
6600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6601 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006602 tEnterBmpsParams *pEnterBmpsRspParams;
6603
Jeff Johnson295189b2012-06-20 16:38:30 -07006604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006605 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006606 if(NULL == pWdaParams)
6607 {
6608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006609 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006610 VOS_ASSERT(0) ;
6611 return ;
6612 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006613
6614 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6615 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6616
6617 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006618 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006619
6620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006622 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6623
Jeff Johnson295189b2012-06-20 16:38:30 -07006624 return ;
6625}
Jeff Johnson295189b2012-06-20 16:38:30 -07006626/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006627 * FUNCTION: WDA_EnterBmpsReqCallback
6628 * Free memory and send Enter BMPS RSP back to PE.
6629 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
6630 */
6631void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6632{
6633 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6634 tWDA_CbContext *pWDA;
6635 tEnterBmpsParams *pEnterBmpsRspParams;
6636
6637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6638 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6639
6640 if(NULL == pWdaParams)
6641 {
6642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6643 "%s: pWdaParams received NULL", __func__);
6644 VOS_ASSERT(0);
6645 return;
6646 }
6647
6648 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6649 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6650 pEnterBmpsRspParams->status = wdiStatus;
6651
6652 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6653 {
6654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6655 vos_mem_free(pWdaParams);
6656 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
6657 }
6658
6659 return;
6660}
6661/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 * FUNCTION: WDA_ProcessEnterBmpsReq
6663 * Request to WDI to Enter BMPS power state.
6664 */
6665VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6666 tEnterBmpsParams *pEnterBmpsReqParams)
6667{
6668 WDI_Status status = WDI_STATUS_SUCCESS;
6669 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6670 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006672 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006673 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6674 {
6675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006676 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006677 VOS_ASSERT(0);
6678 return VOS_STATUS_E_FAILURE;
6679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006680 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6681 if (NULL == wdiEnterBmpsReqParams)
6682 {
6683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006685 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006686 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6687 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 return VOS_STATUS_E_NOMEM;
6689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6691 if (NULL == pWdaParams)
6692 {
6693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006695 VOS_ASSERT(0);
6696 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006697 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6698 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 return VOS_STATUS_E_NOMEM;
6700 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006701 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6702 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6703 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6704 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006705 // For CCX and 11R Roaming
6706 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6707 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6708 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07006709 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
6710 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006711
Jeff Johnson295189b2012-06-20 16:38:30 -07006712 /* Store param pointer as passed in by caller */
6713 /* store Params pass it to WDI */
6714 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006715 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006718 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 if (IS_WDI_STATUS_FAILURE(status))
6720 {
6721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6722 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006724 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006725 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006726 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006728 return CONVERT_WDI2VOS_STATUS(status);
6729}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006730
6731
6732static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6733 WDI_Status wdiStatus,
6734 tExitBmpsParams *pExitBmpsReqParams)
6735{
6736 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6737
6738 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6739}
6740
6741
Jeff Johnson295189b2012-06-20 16:38:30 -07006742/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006743 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 * send Exit BMPS RSP back to PE
6745 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006746void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006747{
6748 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6749 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006750 tExitBmpsParams *pExitBmpsRspParams;
6751
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006753 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 if(NULL == pWdaParams)
6755 {
6756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006757 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 VOS_ASSERT(0) ;
6759 return ;
6760 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006761
6762 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6763 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6764
6765 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006766 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006767
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6769 vos_mem_free(pWdaParams) ;
6770
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006771 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 return ;
6773}
Jeff Johnson295189b2012-06-20 16:38:30 -07006774/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006775 * FUNCTION: WDA_ExitBmpsReqCallback
6776 * Free memory and send Exit BMPS RSP back to PE.
6777 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
6778 */
6779void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6780{
6781 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6782 tWDA_CbContext *pWDA;
6783 tExitBmpsParams *pExitBmpsRspParams;
6784
6785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6786 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6787
6788 if(NULL == pWdaParams)
6789 {
6790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6791 "%s: pWdaParams received NULL", __func__);
6792 VOS_ASSERT(0);
6793 return;
6794 }
6795
6796 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6797 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6798 pExitBmpsRspParams->status = wdiStatus;
6799
6800 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6801 {
6802 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6803 vos_mem_free(pWdaParams);
6804 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
6805 }
6806
6807 return;
6808}
6809/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 * FUNCTION: WDA_ProcessExitBmpsReq
6811 * Request to WDI to Exit BMPS power state.
6812 */
6813VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6814 tExitBmpsParams *pExitBmpsReqParams)
6815{
6816 WDI_Status status = WDI_STATUS_SUCCESS ;
6817 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6818 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6819 sizeof(WDI_ExitBmpsReqParamsType)) ;
6820 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006822 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 if(NULL == wdiExitBmpsReqParams)
6824 {
6825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006826 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006828 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 return VOS_STATUS_E_NOMEM;
6830 }
6831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6832 if(NULL == pWdaParams)
6833 {
6834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 VOS_ASSERT(0);
6837 vos_mem_free(wdiExitBmpsReqParams);
6838 return VOS_STATUS_E_NOMEM;
6839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006841
6842 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6843
Yue Ma7f44bbe2013-04-12 11:47:39 -07006844 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
6845 wdiExitBmpsReqParams->pUserData = pWdaParams;
6846
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 /* Store param pointer as passed in by caller */
6848 /* store Params pass it to WDI */
6849 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6850 pWdaParams->pWdaContext = pWDA;
6851 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006853 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 if(IS_WDI_STATUS_FAILURE(status))
6855 {
6856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6857 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6859 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006860 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 return CONVERT_WDI2VOS_STATUS(status) ;
6863}
Jeff Johnson295189b2012-06-20 16:38:30 -07006864/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006865 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 * send Enter UAPSD RSP back to PE
6867 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006868void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006869{
6870 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6871 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006872 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006874 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 if(NULL == pWdaParams)
6876 {
6877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006878 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006879 VOS_ASSERT(0) ;
6880 return ;
6881 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006882
6883 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6884 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6885
6886 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006887 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006888
Jeff Johnson295189b2012-06-20 16:38:30 -07006889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6890 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006891 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 return ;
6893}
Jeff Johnson295189b2012-06-20 16:38:30 -07006894/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006895 * FUNCTION: WDA_EnterUapsdReqCallback
6896 * Free memory and send Enter UAPSD RSP back to PE.
6897 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
6898 */
6899void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
6900{
6901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6902 tWDA_CbContext *pWDA;
6903 tUapsdParams *pEnterUapsdRsqParams;
6904
6905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6906 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6907
6908 if(NULL == pWdaParams)
6909 {
6910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6911 "%s: pWdaParams received NULL", __func__);
6912 VOS_ASSERT(0);
6913 return;
6914 }
6915
6916 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6917 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6918 pEnterUapsdRsqParams->status = wdiStatus;
6919
6920 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6921 {
6922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6923 vos_mem_free(pWdaParams);
6924 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
6925 }
6926
6927 return;
6928}
6929/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006930 * FUNCTION: WDA_ProcessEnterUapsdReq
6931 * Request to WDI to Enter UAPSD power state.
6932 */
6933VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6934 tUapsdParams *pEnterUapsdReqParams)
6935{
6936 WDI_Status status = WDI_STATUS_SUCCESS ;
6937 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6938 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6939 sizeof(WDI_EnterUapsdReqParamsType)) ;
6940 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006942 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006943 if(NULL == wdiEnterUapsdReqParams)
6944 {
6945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006946 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 VOS_ASSERT(0);
6948 return VOS_STATUS_E_NOMEM;
6949 }
6950 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6951 if(NULL == pWdaParams)
6952 {
6953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006954 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 VOS_ASSERT(0);
6956 vos_mem_free(wdiEnterUapsdReqParams);
6957 return VOS_STATUS_E_NOMEM;
6958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006959 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6960 pEnterUapsdReqParams->beDeliveryEnabled;
6961 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6962 pEnterUapsdReqParams->beTriggerEnabled;
6963 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6964 pEnterUapsdReqParams->bkDeliveryEnabled;
6965 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6966 pEnterUapsdReqParams->bkTriggerEnabled;
6967 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6968 pEnterUapsdReqParams->viDeliveryEnabled;
6969 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6970 pEnterUapsdReqParams->viTriggerEnabled;
6971 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6972 pEnterUapsdReqParams->voDeliveryEnabled;
6973 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6974 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006975 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006976
Yue Ma7f44bbe2013-04-12 11:47:39 -07006977 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
6978 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006979
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 /* Store param pointer as passed in by caller */
6981 /* store Params pass it to WDI */
6982 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6983 pWdaParams->pWdaContext = pWDA;
6984 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006986 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 if(IS_WDI_STATUS_FAILURE(status))
6988 {
6989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6990 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6991 vos_mem_free(pWdaParams->wdaMsgParam) ;
6992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6993 vos_mem_free(pWdaParams) ;
6994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 return CONVERT_WDI2VOS_STATUS(status) ;
6996}
Jeff Johnson295189b2012-06-20 16:38:30 -07006997/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006998 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 * send Exit UAPSD RSP back to PE
7000 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007001void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007002{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007003
7004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7005 tWDA_CbContext *pWDA;
7006 tExitUapsdParams *pExitUapsdRspParams;
7007
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007009 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007010 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: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007014 VOS_ASSERT(0);
7015 return;
7016 }
7017
7018 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7019 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7020
7021 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007022 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007023
7024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7025 vos_mem_free(pWdaParams) ;
7026
7027 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 return ;
7029}
Jeff Johnson295189b2012-06-20 16:38:30 -07007030/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007031 * FUNCTION: WDA_ExitUapsdReqCallback
7032 * Free memory and send Exit UAPSD RSP back to PE.
7033 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7034 */
7035void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7036{
7037 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7038 tWDA_CbContext *pWDA;
7039 tExitUapsdParams *pExitUapsdRspParams;
7040
7041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7042 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7043
7044 if(NULL == pWdaParams)
7045 {
7046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7047 "%s: pWdaParams received NULL", __func__);
7048 VOS_ASSERT(0);
7049 return;
7050 }
7051
7052 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7053 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7054 pExitUapsdRspParams->status = wdiStatus;
7055
7056 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7057 {
7058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7059 vos_mem_free(pWdaParams);
7060 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7061 }
7062
7063 return;
7064}
7065/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 * FUNCTION: WDA_ProcessExitUapsdReq
7067 * Request to WDI to Exit UAPSD power state.
7068 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007069VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7070 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007071{
7072 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007073 tWDA_ReqParams *pWdaParams ;
7074 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7075 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7076 sizeof(WDI_ExitUapsdReqParamsType)) ;
7077
Jeff Johnson295189b2012-06-20 16:38:30 -07007078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007079 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007080
7081 if(NULL == wdiExitUapsdReqParams)
7082 {
7083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007084 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007085 VOS_ASSERT(0);
7086 return VOS_STATUS_E_NOMEM;
7087 }
7088 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7089 if(NULL == pWdaParams)
7090 {
7091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007092 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007093 VOS_ASSERT(0);
7094 vos_mem_free(wdiExitUapsdReqParams);
7095 return VOS_STATUS_E_NOMEM;
7096 }
7097
7098 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007099 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7100 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007101
7102 /* Store param pointer as passed in by caller */
7103 /* store Params pass it to WDI */
7104 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7105 pWdaParams->pWdaContext = pWDA;
7106 pWdaParams->wdaMsgParam = pExitUapsdParams;
7107
Yue Ma7f44bbe2013-04-12 11:47:39 -07007108 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 if(IS_WDI_STATUS_FAILURE(status))
7110 {
7111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7112 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007113 vos_mem_free(pWdaParams->wdaMsgParam) ;
7114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7115 vos_mem_free(pWdaParams) ;
7116
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007118 return CONVERT_WDI2VOS_STATUS(status) ;
7119}
7120
Jeff Johnson295189b2012-06-20 16:38:30 -07007121/*
7122 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7123 *
7124 */
7125void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7126{
7127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007129 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007130 if(NULL == pWdaParams)
7131 {
7132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007133 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007134 VOS_ASSERT(0) ;
7135 return ;
7136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 if( pWdaParams != NULL )
7138 {
7139 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7140 {
7141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7142 }
7143 if( pWdaParams->wdaMsgParam != NULL )
7144 {
7145 vos_mem_free(pWdaParams->wdaMsgParam) ;
7146 }
7147 vos_mem_free(pWdaParams) ;
7148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007149 return ;
7150}
Jeff Johnson295189b2012-06-20 16:38:30 -07007151/*
7152 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7153 * Request to WDI to set the power save params at start.
7154 */
7155VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7156 tSirPowerSaveCfg *pPowerSaveCfg)
7157{
7158 WDI_Status status = WDI_STATUS_SUCCESS ;
7159 tHalCfg *tlvStruct = NULL ;
7160 tANI_U8 *tlvStructStart = NULL ;
7161 v_PVOID_t *configParam;
7162 tANI_U32 configParamSize;
7163 tANI_U32 *configDataValue;
7164 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7165 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007167 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7169 {
7170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007171 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007173 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007174 return VOS_STATUS_E_FAILURE;
7175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7177 if (NULL == wdiPowerSaveCfg)
7178 {
7179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007180 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007182 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 return VOS_STATUS_E_NOMEM;
7184 }
7185 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7186 if(NULL == pWdaParams)
7187 {
7188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007189 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 VOS_ASSERT(0);
7191 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007192 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 return VOS_STATUS_E_NOMEM;
7194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7196 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 if(NULL == configParam)
7198 {
7199 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007200 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007201 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 vos_mem_free(pWdaParams);
7203 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007204 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 return VOS_STATUS_E_NOMEM;
7206 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 vos_mem_set(configParam, configParamSize, 0);
7208 wdiPowerSaveCfg->pConfigBuffer = configParam;
7209 tlvStruct = (tHalCfg *)configParam;
7210 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7212 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7213 tlvStruct->length = sizeof(tANI_U32);
7214 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7215 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7217 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007218 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7219 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7220 tlvStruct->length = sizeof(tANI_U32);
7221 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7222 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7224 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007225 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7226 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7227 tlvStruct->length = sizeof(tANI_U32);
7228 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7229 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007230 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7231 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7233 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7234 tlvStruct->length = sizeof(tANI_U32);
7235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7236 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7238 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007239 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7240 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7241 tlvStruct->length = sizeof(tANI_U32);
7242 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7243 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7245 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007246 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7247 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7248 tlvStruct->length = sizeof(tANI_U32);
7249 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7250 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007251 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7252 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007253 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7254 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7255 tlvStruct->length = sizeof(tANI_U32);
7256 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7257 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007258 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7259 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007260 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7261 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7262 tlvStruct->length = sizeof(tANI_U32);
7263 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7264 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7265 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7266 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007267 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7268 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7269 tlvStruct->length = sizeof(tANI_U32);
7270 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7271 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7272 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7273 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007274 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7275 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7276 tlvStruct->length = sizeof(tANI_U32);
7277 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7278 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7280 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007281 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7282 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7283 tlvStruct->length = sizeof(tANI_U32);
7284 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7285 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007286 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7287 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007290 /* store Params pass it to WDI */
7291 pWdaParams->wdaMsgParam = configParam;
7292 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7293 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007294 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7295 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007296 if(IS_WDI_STATUS_FAILURE(status))
7297 {
7298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7299 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7300 vos_mem_free(pWdaParams->wdaMsgParam);
7301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7302 vos_mem_free(pWdaParams);
7303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007304 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 return CONVERT_WDI2VOS_STATUS(status);
7306}
Jeff Johnson295189b2012-06-20 16:38:30 -07007307/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007308 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007309 *
7310 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007311void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007312{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007313 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7314
Jeff Johnson295189b2012-06-20 16:38:30 -07007315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007316 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007317
7318 if(NULL == pWdaParams)
7319 {
7320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7321 "%s: pWdaParams received NULL", __func__);
7322 VOS_ASSERT(0);
7323 return ;
7324 }
7325
7326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007327 vos_mem_free(pWdaParams);
7328
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 return ;
7330}
Jeff Johnson295189b2012-06-20 16:38:30 -07007331/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007332 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7333 * Free memory.
7334 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7335 */
7336void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7337{
7338 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7339
7340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7341 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7342
7343 if(NULL == pWdaParams)
7344 {
7345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7346 "%s: pWdaParams received NULL", __func__);
7347 VOS_ASSERT(0);
7348 return;
7349 }
7350
7351 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7352 {
7353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7354 vos_mem_free(pWdaParams);
7355 }
7356
7357 return;
7358}
7359/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007360 * FUNCTION: WDA_SetUapsdAcParamsReq
7361 * Request to WDI to set the UAPSD params for an ac (sta mode).
7362 */
7363VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7364 tUapsdInfo *pUapsdInfo)
7365{
7366 WDI_Status status = WDI_STATUS_SUCCESS;
7367 tWDA_CbContext *pWDA = NULL ;
7368 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7369 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7370 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7371 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007373 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007374 if(NULL == wdiUapsdParams)
7375 {
7376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007377 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007378 VOS_ASSERT(0);
7379 return VOS_STATUS_E_NOMEM;
7380 }
7381 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7382 if(NULL == pWdaParams)
7383 {
7384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007386 VOS_ASSERT(0);
7387 vos_mem_free(wdiUapsdParams);
7388 return VOS_STATUS_E_NOMEM;
7389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007390 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7391 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7392 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7393 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7394 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7395 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007396 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7397 wdiUapsdParams->pUserData = pWdaParams;
7398
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 pWdaParams->pWdaContext = pWDA;
7401 /* Store param pointer as passed in by caller */
7402 pWdaParams->wdaMsgParam = pUapsdInfo;
7403 /* store Params pass it to WDI */
7404 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007405 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007406 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 if(IS_WDI_STATUS_FAILURE(status))
7409 {
7410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7411 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7413 vos_mem_free(pWdaParams);
7414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7416 return VOS_STATUS_SUCCESS;
7417 else
7418 return VOS_STATUS_E_FAILURE;
7419
Jeff Johnson295189b2012-06-20 16:38:30 -07007420}
7421/*
7422 * FUNCTION: WDA_ClearUapsdAcParamsReq
7423 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7424 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7425 * and again enter the UPASD with the modified params. Hence the disable
7426 * function was kept empty.
7427 *
7428 */
7429VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7430{
7431 /* do nothing */
7432 return VOS_STATUS_SUCCESS;
7433}
Jeff Johnson295189b2012-06-20 16:38:30 -07007434/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007435 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 *
7437 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007438void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007439{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007440 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7441
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007443 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007444
7445 if(NULL == pWdaParams)
7446 {
7447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007448 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007449 VOS_ASSERT(0) ;
7450 return ;
7451 }
7452
7453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7454 vos_mem_free(pWdaParams->wdaMsgParam);
7455 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007456
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 //print a msg, nothing else to do
7458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007459 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 return ;
7461}
Jeff Johnson295189b2012-06-20 16:38:30 -07007462/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007463 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7464 * Free memory.
7465 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7466 */
7467void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7468{
7469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7470
7471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7472 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7473
7474 if(NULL == pWdaParams)
7475 {
7476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7477 "%s: pWdaParams received NULL", __func__);
7478 VOS_ASSERT(0);
7479 return;
7480 }
7481
7482 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7483 {
7484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7485 vos_mem_free(pWdaParams->wdaMsgParam);
7486 vos_mem_free(pWdaParams);
7487 }
7488
7489 return;
7490}
7491/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 * FUNCTION: WDA_UpdateUapsdParamsReq
7493 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7494 */
7495VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7496 tUpdateUapsdParams* pUpdateUapsdInfo)
7497{
7498 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007499 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007500 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7501 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7502 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007503 tWDA_ReqParams *pWdaParams = NULL;
7504
Jeff Johnson295189b2012-06-20 16:38:30 -07007505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007506 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 if(NULL == wdiUpdateUapsdParams)
7508 {
7509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007511 VOS_ASSERT(0);
7512 return VOS_STATUS_E_NOMEM;
7513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7515 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7516 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007517 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7518 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007519
7520 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7521 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007522 {
7523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007526 vos_mem_free(pUpdateUapsdInfo);
7527 vos_mem_free(wdiUpdateUapsdParams);
7528 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007531 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007533 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7534 pWdaParams->pWdaContext = pWDA;
7535
Jeff Johnson43971f52012-07-17 12:26:56 -07007536 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007537 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007538 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007539
Jeff Johnson43971f52012-07-17 12:26:56 -07007540 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 {
7542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7543 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007544 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7546 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007547 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007548 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007549 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550}
Jeff Johnson295189b2012-06-20 16:38:30 -07007551/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007552 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007553 *
7554 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007555void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007556{
7557 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007559 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007560 if(WDI_STATUS_SUCCESS != wdiStatus)
7561 {
7562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007563 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007565 if(NULL == pWdaParams)
7566 {
7567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007568 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007569 VOS_ASSERT(0) ;
7570 return ;
7571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7573 vos_mem_free(pWdaParams->wdaMsgParam);
7574 vos_mem_free(pWdaParams);
7575 return ;
7576}
Jeff Johnson295189b2012-06-20 16:38:30 -07007577/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007578 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7579 * Free memory.
7580 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7581 */
7582void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7583{
7584 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7585
7586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7587 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7588
7589 if(NULL == pWdaParams)
7590 {
7591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7592 "%s: pWdaParams received NULL", __func__);
7593 VOS_ASSERT(0);
7594 return;
7595 }
7596
7597 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7598 {
7599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7600 vos_mem_free(pWdaParams->wdaMsgParam);
7601 vos_mem_free(pWdaParams);
7602 }
7603
7604 return;
7605}
7606/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7608 *
7609 */
7610VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7611 tSirWlanSetRxpFilters *pWlanSuspendParam)
7612{
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007614 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007615 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7616 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7617 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7618 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007620 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007621 if(NULL == wdiRxpFilterParams)
7622 {
7623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 VOS_ASSERT(0);
7626 vos_mem_free(pWlanSuspendParam);
7627 return VOS_STATUS_E_NOMEM;
7628 }
7629 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7630 if(NULL == pWdaParams)
7631 {
7632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007634 VOS_ASSERT(0);
7635 vos_mem_free(wdiRxpFilterParams);
7636 vos_mem_free(pWlanSuspendParam);
7637 return VOS_STATUS_E_NOMEM;
7638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7640 pWlanSuspendParam->setMcstBcstFilter;
7641 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7642 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7643
Yue Ma7f44bbe2013-04-12 11:47:39 -07007644 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
7645 wdiRxpFilterParams->pUserData = pWdaParams;
7646
Jeff Johnson295189b2012-06-20 16:38:30 -07007647 pWdaParams->pWdaContext = pWDA;
7648 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7649 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007650 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007651 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007652 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007653 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007654 {
7655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7656 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007657 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7659 vos_mem_free(pWdaParams->wdaMsgParam);
7660 vos_mem_free(pWdaParams);
7661 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007662 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007663}
Jeff Johnson295189b2012-06-20 16:38:30 -07007664/*
7665 * FUNCTION: WDA_WdiIndicationCallback
7666 *
7667 */
7668void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7669 void* pUserData)
7670{
7671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007672 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007673}
Jeff Johnson295189b2012-06-20 16:38:30 -07007674/*
7675 * FUNCTION: WDA_ProcessWlanSuspendInd
7676 *
7677 */
7678VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7679 tSirWlanSuspendParam *pWlanSuspendParam)
7680{
7681 WDI_Status wdiStatus;
7682 WDI_SuspendParamsType wdiSuspendParams;
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 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7686 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7687 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7688 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007690 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7691 if(WDI_STATUS_PENDING == wdiStatus)
7692 {
7693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007694 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007695 }
7696 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7697 {
7698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007699 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007700 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007701 vos_mem_free(pWlanSuspendParam);
7702 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7703}
7704
Chet Lanctot186b5732013-03-18 10:26:30 -07007705#ifdef WLAN_FEATURE_11W
7706/*
7707 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7708 *
7709 */
7710VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7711 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7712{
7713 WDI_Status wdiStatus;
7714 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7716 "------> %s ", __func__);
7717
7718 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7719 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7720 sizeof(tSirMacAddr));
7721
7722 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7723 wdiExclUnencryptParams.pUserData = pWDA;
7724
7725 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7726 if(WDI_STATUS_PENDING == wdiStatus)
7727 {
7728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7729 "Pending received for %s:%d ", __func__, __LINE__ );
7730 }
7731 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7732 {
7733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7734 "Failure in %s:%d ", __func__, __LINE__ );
7735 }
7736 vos_mem_free(pExclUnencryptParam);
7737 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7738}
7739#endif
7740
Jeff Johnson295189b2012-06-20 16:38:30 -07007741/*
7742 * FUNCTION: WDA_ProcessWlanResumeCallback
7743 *
7744 */
7745void WDA_ProcessWlanResumeCallback(
7746 WDI_SuspendResumeRspParamsType *resumeRspParams,
7747 void* pUserData)
7748{
7749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007751 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 if(NULL == pWdaParams)
7753 {
7754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007755 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007756 VOS_ASSERT(0) ;
7757 return ;
7758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007759 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7760 {
7761 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007762 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7765 vos_mem_free(pWdaParams->wdaMsgParam);
7766 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007767 return ;
7768}
Jeff Johnson295189b2012-06-20 16:38:30 -07007769/*
7770 * FUNCTION: WDA_ProcessWlanResumeReq
7771 *
7772 */
7773VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7774 tSirWlanResumeParam *pWlanResumeParam)
7775{
7776 WDI_Status wdiStatus;
7777 WDI_ResumeParamsType *wdiResumeParams =
7778 (WDI_ResumeParamsType *)vos_mem_malloc(
7779 sizeof(WDI_ResumeParamsType) ) ;
7780 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007782 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 if(NULL == wdiResumeParams)
7784 {
7785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 VOS_ASSERT(0);
7788 return VOS_STATUS_E_NOMEM;
7789 }
7790 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7791 if(NULL == pWdaParams)
7792 {
7793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007794 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 VOS_ASSERT(0);
7796 vos_mem_free(wdiResumeParams);
7797 return VOS_STATUS_E_NOMEM;
7798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7800 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 wdiResumeParams->wdiReqStatusCB = NULL;
7803 pWdaParams->wdaMsgParam = pWlanResumeParam;
7804 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7805 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7807 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7808 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7810 {
7811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7812 "Failure in Host Resume REQ WDI API, free all the memory " );
7813 VOS_ASSERT(0);
7814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7815 vos_mem_free(pWdaParams->wdaMsgParam);
7816 vos_mem_free(pWdaParams);
7817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007818 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7819}
7820
Jeff Johnson295189b2012-06-20 16:38:30 -07007821/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007822 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007823 *
7824 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007825void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007826{
7827 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007829 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007830 if(NULL == pWdaParams)
7831 {
7832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007833 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 VOS_ASSERT(0) ;
7835 return ;
7836 }
7837
7838 vos_mem_free(pWdaParams->wdaMsgParam) ;
7839 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7840 vos_mem_free(pWdaParams) ;
7841 /*
7842 * No respone required for SetBeaconFilter req so just free the request
7843 * param here
7844 */
7845
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 return ;
7847}
Jeff Johnson295189b2012-06-20 16:38:30 -07007848/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007849 * FUNCTION: WDA_SetBeaconFilterReqCallback
7850 * Free memory.
7851 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
7852 */
7853void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7854{
7855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7856
7857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7858 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7859
7860 if(NULL == pWdaParams)
7861 {
7862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7863 "%s: pWdaParams received NULL", __func__);
7864 VOS_ASSERT(0);
7865 return;
7866 }
7867
7868 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7869 {
7870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7871 vos_mem_free(pWdaParams->wdaMsgParam);
7872 vos_mem_free(pWdaParams);
7873 }
7874
7875 return;
7876}
7877/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007878 * FUNCTION: WDA_SetBeaconFilterReq
7879 * Request to WDI to send the beacon filtering related information.
7880 */
7881VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7882 tBeaconFilterMsg* pBeaconFilterInfo)
7883{
7884 WDI_Status status = WDI_STATUS_SUCCESS;
7885 tANI_U8 *dstPtr, *srcPtr;
7886 tANI_U8 filterLength;
7887 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7888 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7889 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7890 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007892 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007893 if(NULL == wdiBeaconFilterInfo)
7894 {
7895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 VOS_ASSERT(0);
7898 return VOS_STATUS_E_NOMEM;
7899 }
7900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7901 if(NULL == pWdaParams)
7902 {
7903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 VOS_ASSERT(0);
7906 vos_mem_free(wdiBeaconFilterInfo);
7907 return VOS_STATUS_E_NOMEM;
7908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007909 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7910 pBeaconFilterInfo->beaconInterval;
7911 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7912 pBeaconFilterInfo->capabilityInfo;
7913 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7914 pBeaconFilterInfo->capabilityMask;
7915 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007916
7917 //Fill the BssIdx
7918 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7919
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 //Fill structure with info contained in the beaconFilterTable
7921 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7922 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7923 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7924 if(WDI_BEACON_FILTER_LEN < filterLength)
7925 {
7926 filterLength = WDI_BEACON_FILTER_LEN;
7927 }
7928 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007929 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
7930 wdiBeaconFilterInfo->pUserData = pWdaParams;
7931
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 /* Store param pointer as passed in by caller */
7933 /* store Params pass it to WDI */
7934 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7935 pWdaParams->pWdaContext = pWDA;
7936 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7937
Jeff Johnson295189b2012-06-20 16:38:30 -07007938 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007939 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007940 if(IS_WDI_STATUS_FAILURE(status))
7941 {
7942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7943 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7944 vos_mem_free(pWdaParams->wdaMsgParam) ;
7945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7946 vos_mem_free(pWdaParams) ;
7947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 return CONVERT_WDI2VOS_STATUS(status) ;
7949}
Jeff Johnson295189b2012-06-20 16:38:30 -07007950/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007951 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007952 *
7953 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007954void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007955{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7957
Jeff Johnson295189b2012-06-20 16:38:30 -07007958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007959 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007960
7961 if(NULL == pWdaParams)
7962 {
7963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007964 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007965 VOS_ASSERT(0) ;
7966 return ;
7967 }
7968
7969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7970 vos_mem_free(pWdaParams->wdaMsgParam);
7971 vos_mem_free(pWdaParams);
7972
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 //print a msg, nothing else to do
7974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007975 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 return ;
7977}
Yue Ma7f44bbe2013-04-12 11:47:39 -07007978/*
7979 * FUNCTION: WDA_RemBeaconFilterReqCallback
7980 * Free memory.
7981 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
7982 */
7983void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7984{
7985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7986
7987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7988 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7989
7990 if(NULL == pWdaParams)
7991 {
7992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7993 "%s: pWdaParams received NULL", __func__);
7994 VOS_ASSERT(0);
7995 return;
7996 }
7997
7998 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7999 {
8000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8001 vos_mem_free(pWdaParams->wdaMsgParam);
8002 vos_mem_free(pWdaParams);
8003 }
8004
8005 return;
8006}
Jeff Johnson295189b2012-06-20 16:38:30 -07008007 // TODO: PE does not have this feature for now implemented,
8008 // but the support for removing beacon filter exists between
8009 // HAL and FW. This function can be called whenever PE defines
8010 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008011/*
8012 * FUNCTION: WDA_RemBeaconFilterReq
8013 * Request to WDI to send the removal of beacon filtering related information.
8014 */
8015VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8016 tRemBeaconFilterMsg* pBeaconFilterInfo)
8017{
8018 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008019 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008020 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8021 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8022 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008023 tWDA_ReqParams *pWdaParams ;
8024
Jeff Johnson295189b2012-06-20 16:38:30 -07008025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008026 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 if(NULL == wdiBeaconFilterInfo)
8028 {
8029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 VOS_ASSERT(0);
8032 return VOS_STATUS_E_NOMEM;
8033 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008034 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8035 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008036 {
8037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008040 vos_mem_free(wdiBeaconFilterInfo);
8041 vos_mem_free(pBeaconFilterInfo);
8042 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008043 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008044
8045 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8046 pBeaconFilterInfo->ucIeCount;
8047 //Fill structure with info contained in the ucRemIeId
8048 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8049 pBeaconFilterInfo->ucRemIeId,
8050 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8051 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8052 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008053
8054 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008055 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008056 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008057 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8058
8059 pWdaParams->pWdaContext = pWDA;
8060
Jeff Johnson43971f52012-07-17 12:26:56 -07008061 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008062 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008063 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 {
8065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8066 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008067 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8069 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008070 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008071 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008072 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008073}
Jeff Johnson295189b2012-06-20 16:38:30 -07008074/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008075 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008076 *
8077 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008078void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008079{
8080 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008082 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 if(NULL == pWdaParams)
8084 {
8085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008086 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 VOS_ASSERT(0) ;
8088 return ;
8089 }
8090
8091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8092 vos_mem_free(pWdaParams) ;
8093
Jeff Johnson295189b2012-06-20 16:38:30 -07008094 return ;
8095}
Jeff Johnson295189b2012-06-20 16:38:30 -07008096/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008097 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8098 * Free memory.
8099 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8100 */
8101void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8102{
8103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8104
8105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8106 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8107
8108 if(NULL == pWdaParams)
8109 {
8110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8111 "%s: pWdaParams received NULL", __func__);
8112 VOS_ASSERT(0);
8113 return;
8114 }
8115
8116 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8117 {
8118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8119 vos_mem_free(pWdaParams);
8120 }
8121
8122 return;
8123}
8124/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008125 * FUNCTION: WDA_SetRSSIThresholdsReq
8126 * Request to WDI to set the RSSI thresholds (sta mode).
8127 */
8128VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8129{
8130 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008131 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008132 tWDA_CbContext *pWDA = NULL ;
8133 v_PVOID_t pVosContext = NULL;
8134 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8135 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8136 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8137 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008139 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008140 if(NULL == wdiRSSIThresholdsInfo)
8141 {
8142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 VOS_ASSERT(0);
8145 return VOS_STATUS_E_NOMEM;
8146 }
8147 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8148 if(NULL == pWdaParams)
8149 {
8150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008151 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008152 VOS_ASSERT(0);
8153 vos_mem_free(wdiRSSIThresholdsInfo);
8154 return VOS_STATUS_E_NOMEM;
8155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008156 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008157 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8158 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8159 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008160 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8161 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8162 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008163 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8164 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8165 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008166 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8167 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8169 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8170
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 /* Store param pointer as passed in by caller */
8172 /* store Params pass it to WDI */
8173 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8174 pWdaParams->pWdaContext = pWDA;
8175 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008176 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008177 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008178 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008179 {
8180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8181 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008182 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8184 vos_mem_free(pWdaParams) ;
8185 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008186 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008187
8188}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008189/*
Yue Madb90ac12013-04-04 13:39:13 -07008190 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008191 *
8192 */
Yue Madb90ac12013-04-04 13:39:13 -07008193void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008194{
8195 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8196
8197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008198 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 if(NULL == pWdaParams)
8200 {
8201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008202 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008203 VOS_ASSERT(0) ;
8204 return ;
8205 }
8206
8207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8208 vos_mem_free(pWdaParams->wdaMsgParam);
8209 vos_mem_free(pWdaParams) ;
8210
8211 //print a msg, nothing else to do
8212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008213 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008214 return ;
8215}
Jeff Johnson295189b2012-06-20 16:38:30 -07008216/*
Yue Madb90ac12013-04-04 13:39:13 -07008217 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008218 * Free memory.
8219 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008220 */
8221void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8222{
8223 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8224
8225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8226 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8227
8228 if(NULL == pWdaParams)
8229 {
8230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8231 "%s: Invalid pWdaParams pointer", __func__);
8232 VOS_ASSERT(0);
8233 return;
8234 }
8235
8236 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8237 {
8238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8239 vos_mem_free(pWdaParams->wdaMsgParam);
8240 vos_mem_free(pWdaParams);
8241 }
8242
8243 return;
8244}
8245/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008246 * FUNCTION: WDA_ProcessHostOffloadReq
8247 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8248 * to broadcast traffic (sta mode).
8249 */
8250VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8251 tSirHostOffloadReq *pHostOffloadParams)
8252{
8253 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008254 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8256 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8257 sizeof(WDI_HostOffloadReqParamsType)) ;
8258 tWDA_ReqParams *pWdaParams ;
8259
8260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008261 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008262
8263 if(NULL == wdiHostOffloadInfo)
8264 {
8265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008267 VOS_ASSERT(0);
8268 return VOS_STATUS_E_NOMEM;
8269 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008270 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8271 if(NULL == pWdaParams)
8272 {
8273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008274 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 VOS_ASSERT(0);
8276 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008277 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008278 return VOS_STATUS_E_NOMEM;
8279 }
8280
8281 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8282 pHostOffloadParams->offloadType;
8283 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8284 pHostOffloadParams->enableOrDisable;
8285
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008286 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8287 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8288
Jeff Johnson295189b2012-06-20 16:38:30 -07008289 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8290 {
8291 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8292 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8293 pHostOffloadParams->params.hostIpv4Addr,
8294 4);
8295 break;
8296 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8297 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8298 pHostOffloadParams->params.hostIpv6Addr,
8299 16);
8300 break;
8301 case SIR_IPV6_NS_OFFLOAD:
8302 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8303 pHostOffloadParams->params.hostIpv6Addr,
8304 16);
8305
8306#ifdef WLAN_NS_OFFLOAD
8307 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8308 {
8309 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8310 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8311 16);
8312 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8313 }
8314 else
8315 {
8316 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8317 }
8318
8319 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8320 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8321 16);
8322 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8323 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8324 6);
8325
8326 //Only two are supported so let's go through them without a loop
8327 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8328 {
8329 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8330 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8331 16);
8332 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8333 }
8334 else
8335 {
8336 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8337 }
8338
8339 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8340 {
8341 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8342 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8343 16);
8344 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8345 }
8346 else
8347 {
8348 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8349 }
8350 break;
8351#endif //WLAN_NS_OFFLOAD
8352 default:
8353 {
8354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8355 "No Handling for Offload Type %x in WDA "
8356 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8357 //WDA_VOS_ASSERT(0) ;
8358 }
8359 }
Yue Madb90ac12013-04-04 13:39:13 -07008360 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8361 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008362
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008364 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 /* store Params pass it to WDI */
8366 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8367 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008368
Jeff Johnson295189b2012-06-20 16:38:30 -07008369
Jeff Johnson43971f52012-07-17 12:26:56 -07008370 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008371 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008372
Jeff Johnson43971f52012-07-17 12:26:56 -07008373 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 {
8375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8376 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008377 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8379 vos_mem_free(pWdaParams->wdaMsgParam);
8380 vos_mem_free(pWdaParams) ;
8381 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008382 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008383
8384}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008385/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008386 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008387 *
8388 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008389void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008390{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008391 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8392
Jeff Johnson295189b2012-06-20 16:38:30 -07008393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008394 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008395
8396 if(NULL == pWdaParams)
8397 {
8398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008399 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008400 VOS_ASSERT(0) ;
8401 return ;
8402 }
8403
8404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8405 vos_mem_free(pWdaParams->wdaMsgParam);
8406 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008407
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 //print a msg, nothing else to do
8409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008410 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 return ;
8412}
Jeff Johnson295189b2012-06-20 16:38:30 -07008413/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008414 * FUNCTION: WDA_KeepAliveReqCallback
8415 * Free memory.
8416 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8417 */
8418void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8419{
8420 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8421
8422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8423 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8424
8425 if(NULL == pWdaParams)
8426 {
8427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8428 "%s: pWdaParams received NULL", __func__);
8429 VOS_ASSERT(0);
8430 return;
8431 }
8432
8433 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8434 {
8435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8436 vos_mem_free(pWdaParams->wdaMsgParam);
8437 vos_mem_free(pWdaParams);
8438 }
8439
8440 return;
8441}
8442/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008443 * FUNCTION: WDA_ProcessKeepAliveReq
8444 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8445 * wakeup due to broadcast traffic (sta mode).
8446 */
8447VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8448 tSirKeepAliveReq *pKeepAliveParams)
8449{
8450 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008451 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8453 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8454 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008455 tWDA_ReqParams *pWdaParams;
8456
Jeff Johnson295189b2012-06-20 16:38:30 -07008457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008458 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 if(NULL == wdiKeepAliveInfo)
8460 {
8461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008463 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008464 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008465 return VOS_STATUS_E_NOMEM;
8466 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008467
8468 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8469 if(NULL == pWdaParams)
8470 {
8471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008472 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008473 VOS_ASSERT(0);
8474 vos_mem_free(wdiKeepAliveInfo);
8475 vos_mem_free(pKeepAliveParams);
8476 return VOS_STATUS_E_NOMEM;
8477 }
8478
Jeff Johnson295189b2012-06-20 16:38:30 -07008479 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8480 pKeepAliveParams->packetType;
8481 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8482 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008483
8484 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8485 pKeepAliveParams->bssId,
8486 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008487
8488 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8489 {
8490 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8491 pKeepAliveParams->hostIpv4Addr,
8492 SIR_IPV4_ADDR_LEN);
8493 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8494 pKeepAliveParams->destIpv4Addr,
8495 SIR_IPV4_ADDR_LEN);
8496 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8497 pKeepAliveParams->destMacAddr,
8498 SIR_MAC_ADDR_LEN);
8499 }
8500 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8501 {
8502 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8503 SIR_IPV4_ADDR_LEN,
8504 0);
8505 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8506 SIR_IPV4_ADDR_LEN,
8507 0);
8508 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8509 SIR_MAC_ADDR_LEN,
8510 0);
8511 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008512 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8513 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008514
Jeff Johnson295189b2012-06-20 16:38:30 -07008515 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008516 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008517 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008518 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8519 pWdaParams->pWdaContext = pWDA;
8520
Jeff Johnson295189b2012-06-20 16:38:30 -07008521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8522 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8523 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8524 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8525 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8527 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8528 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8529 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8530 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8532 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8533 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8534 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8535 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8536 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8537 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8538 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8540 "TimePeriod %d PacketType %d",
8541 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8542 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008543 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008544 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008545
Jeff Johnson43971f52012-07-17 12:26:56 -07008546 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008547 {
8548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8549 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008550 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8552 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008553 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008554 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008555 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008556
8557}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008558/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008559 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008560 *
8561 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008562void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008563 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8564 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008565{
8566 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008568 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008569 if(NULL == pWdaParams)
8570 {
8571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008572 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008573 VOS_ASSERT(0) ;
8574 return ;
8575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8577 vos_mem_free(pWdaParams->wdaMsgParam);
8578 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008579 return ;
8580}
Jeff Johnson295189b2012-06-20 16:38:30 -07008581/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008582 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8583 * Free memory.
8584 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8585 */
8586void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8587{
8588 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8589
8590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8591 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8592
8593 if(NULL == pWdaParams)
8594 {
8595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8596 "%s: pWdaParams received NULL", __func__);
8597 VOS_ASSERT(0);
8598 return;
8599 }
8600
8601 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8602 {
8603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8604 vos_mem_free(pWdaParams->wdaMsgParam);
8605 vos_mem_free(pWdaParams);
8606 }
8607
8608 return;
8609}
8610
8611/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8613 * Request to WDI to add WOWL Bcast pattern
8614 */
8615VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8616 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8617{
8618 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008619 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8621 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8622 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8623 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008625 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008626 if(NULL == wdiWowlAddBcPtrnInfo)
8627 {
8628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008630 VOS_ASSERT(0);
8631 return VOS_STATUS_E_NOMEM;
8632 }
8633 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8634 if(NULL == pWdaParams)
8635 {
8636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008638 VOS_ASSERT(0);
8639 vos_mem_free(wdiWowlAddBcPtrnInfo);
8640 return VOS_STATUS_E_NOMEM;
8641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008642 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8643 pWowlAddBcPtrnParams->ucPatternId;
8644 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8645 pWowlAddBcPtrnParams->ucPatternByteOffset;
8646 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8647 pWowlAddBcPtrnParams->ucPatternMaskSize;
8648 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8649 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8651 {
8652 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8653 pWowlAddBcPtrnParams->ucPattern,
8654 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8655 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8656 pWowlAddBcPtrnParams->ucPatternMask,
8657 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8658 }
8659 else
8660 {
8661 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8662 pWowlAddBcPtrnParams->ucPattern,
8663 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8664 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8665 pWowlAddBcPtrnParams->ucPatternMask,
8666 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8667
8668 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8669 pWowlAddBcPtrnParams->ucPatternExt,
8670 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8671 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8672 pWowlAddBcPtrnParams->ucPatternMaskExt,
8673 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8674 }
8675
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008676 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8677 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8678
Yue Ma7f44bbe2013-04-12 11:47:39 -07008679 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
8680 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008681 /* Store param pointer as passed in by caller */
8682 /* store Params pass it to WDI */
8683 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8684 pWdaParams->pWdaContext = pWDA;
8685 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008686 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008687 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008688 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 {
8690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8691 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008692 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008693 vos_mem_free(pWdaParams->wdaMsgParam) ;
8694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8695 vos_mem_free(pWdaParams) ;
8696 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008697 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008698
8699}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008700/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008701 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 *
8703 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008704void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008705 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8706 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008707{
8708 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008710 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008711 if(NULL == pWdaParams)
8712 {
8713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008714 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008715 VOS_ASSERT(0) ;
8716 return ;
8717 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8719 vos_mem_free(pWdaParams->wdaMsgParam);
8720 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008721 return ;
8722}
Jeff Johnson295189b2012-06-20 16:38:30 -07008723/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008724 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8725 * Free memory.
8726 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
8727 */
8728void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8729{
8730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8731
8732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8733 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8734
8735 if(NULL == pWdaParams)
8736 {
8737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8738 "%s: pWdaParams received NULL", __func__);
8739 VOS_ASSERT(0);
8740 return;
8741 }
8742
8743 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8744 {
8745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8746 vos_mem_free(pWdaParams->wdaMsgParam);
8747 vos_mem_free(pWdaParams);
8748 }
8749
8750 return;
8751}
8752/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8754 * Request to WDI to delete WOWL Bcast pattern
8755 */
8756VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8757 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8758{
8759 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008760 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008761 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8762 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8763 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8764 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008766 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 if(NULL == wdiWowlDelBcPtrnInfo)
8768 {
8769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008770 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008771 VOS_ASSERT(0);
8772 return VOS_STATUS_E_NOMEM;
8773 }
8774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8775 if(NULL == pWdaParams)
8776 {
8777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008779 VOS_ASSERT(0);
8780 vos_mem_free(wdiWowlDelBcPtrnInfo);
8781 return VOS_STATUS_E_NOMEM;
8782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8784 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008785
8786 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8787 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8788
Yue Ma7f44bbe2013-04-12 11:47:39 -07008789 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
8790 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 /* Store param pointer as passed in by caller */
8792 /* store Params pass it to WDI */
8793 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8794 pWdaParams->pWdaContext = pWDA;
8795 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008796 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008797 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008798 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 {
8800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8801 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008802 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008803 vos_mem_free(pWdaParams->wdaMsgParam) ;
8804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8805 vos_mem_free(pWdaParams) ;
8806 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008807 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008808
8809}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008810/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008811 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008812 *
8813 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008814void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008815{
8816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8817 tWDA_CbContext *pWDA;
8818 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008820 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008821 if(NULL == pWdaParams)
8822 {
8823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008824 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008825 VOS_ASSERT(0) ;
8826 return ;
8827 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8829 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8830
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008831 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8832
Jeff Johnson295189b2012-06-20 16:38:30 -07008833 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8834 vos_mem_free(pWdaParams) ;
8835
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008836 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008837 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008838 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008839 return ;
8840}
Jeff Johnson295189b2012-06-20 16:38:30 -07008841/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008842 * FUNCTION: WDA_WowlEnterReqCallback
8843 * Free memory and send WOWL Enter RSP back to PE.
8844 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
8845 */
8846void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
8847{
8848 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8849 tWDA_CbContext *pWDA;
8850 tSirHalWowlEnterParams *pWowlEnterParams;
8851
8852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8853 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8854
8855 if(NULL == pWdaParams)
8856 {
8857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8858 "%s: pWdaParams received NULL", __func__);
8859 VOS_ASSERT(0);
8860 return;
8861 }
8862
8863 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8864 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
8865 pWowlEnterParams->status = wdiStatus;
8866
8867 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8868 {
8869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8870 vos_mem_free(pWdaParams);
8871 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
8872 }
8873
8874 return;
8875}
8876/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008877 * FUNCTION: WDA_ProcessWowlEnterReq
8878 * Request to WDI to enter WOWL
8879 */
8880VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8881 tSirHalWowlEnterParams *pWowlEnterParams)
8882{
8883 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008884 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008885 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8886 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8887 sizeof(WDI_WowlEnterReqParamsType)) ;
8888 tWDA_ReqParams *pWdaParams ;
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 == wdiWowlEnterInfo)
8892 {
8893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008894 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008895 VOS_ASSERT(0);
8896 return VOS_STATUS_E_NOMEM;
8897 }
8898 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8899 if(NULL == pWdaParams)
8900 {
8901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008902 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008903 VOS_ASSERT(0);
8904 vos_mem_free(wdiWowlEnterInfo);
8905 return VOS_STATUS_E_NOMEM;
8906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008907 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8908 pWowlEnterParams->magicPtrn,
8909 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008910 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8911 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008912 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8913 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8915 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008916 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8917 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008918 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8919 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008920 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8921 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8923 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008924 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8925 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008926#ifdef WLAN_WAKEUP_EVENTS
8927 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8928 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8929
8930 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8931 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8932
8933 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8934 pWowlEnterParams->ucWowNetScanOffloadMatch;
8935
8936 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8937 pWowlEnterParams->ucWowGTKRekeyError;
8938
8939 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8940 pWowlEnterParams->ucWoWBSSConnLoss;
8941#endif // WLAN_WAKEUP_EVENTS
8942
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008943 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8944 pWowlEnterParams->bssIdx;
8945
Yue Ma7f44bbe2013-04-12 11:47:39 -07008946 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
8947 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008948 /* Store param pointer as passed in by caller */
8949 /* store Params pass it to WDI */
8950 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8951 pWdaParams->pWdaContext = pWDA;
8952 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008953 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008954 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008955 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008956 {
8957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8958 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008959 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008960 vos_mem_free(pWdaParams->wdaMsgParam) ;
8961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8962 vos_mem_free(pWdaParams) ;
8963 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008964 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008965
8966}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008967/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008968 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008969 *
8970 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008971void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008972{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008973 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8974 tWDA_CbContext *pWDA;
8975 tSirHalWowlExitParams *pWowlExitParams;
8976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008977 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008978 if(NULL == pWdaParams)
8979 {
8980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008981 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008982 VOS_ASSERT(0) ;
8983 return ;
8984 }
8985 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8986 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8987
8988 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008989 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008990
8991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8992 vos_mem_free(pWdaParams) ;
8993
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008995 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008996 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 return ;
8998}
Jeff Johnson295189b2012-06-20 16:38:30 -07008999/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009000 * FUNCTION: WDA_WowlExitReqCallback
9001 * Free memory and send WOWL Exit RSP back to PE.
9002 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9003 */
9004void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9005{
9006 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9007 tWDA_CbContext *pWDA;
9008 tSirHalWowlExitParams *pWowlExitParams;
9009
9010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9011 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9012
9013 if(NULL == pWdaParams)
9014 {
9015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9016 "%s: pWdaParams received NULL", __func__);
9017 VOS_ASSERT(0);
9018 return;
9019 }
9020
9021 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9022 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9023 pWowlExitParams->status = wdiStatus;
9024
9025 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9026 {
9027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9028 vos_mem_free(pWdaParams);
9029 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9030 }
9031
9032 return;
9033}
9034/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009035 * FUNCTION: WDA_ProcessWowlExitReq
9036 * Request to WDI to add WOWL Bcast pattern
9037 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009038VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9039 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009040{
9041 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009042 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009043 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9044 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9045 sizeof(WDI_WowlExitReqParamsType)) ;
9046 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009048 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009049 if(NULL == wdiWowlExitInfo)
9050 {
9051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009052 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009053 VOS_ASSERT(0);
9054 return VOS_STATUS_E_NOMEM;
9055 }
9056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9057 if(NULL == pWdaParams)
9058 {
9059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009060 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009061 VOS_ASSERT(0);
9062 vos_mem_free(wdiWowlExitInfo);
9063 return VOS_STATUS_E_NOMEM;
9064 }
9065
9066 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9067 pWowlExitParams->bssIdx;
9068
Yue Ma7f44bbe2013-04-12 11:47:39 -07009069 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9070 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009071
9072 /* Store param pointer as passed in by caller */
9073 /* store Params pass it to WDI */
9074 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9075 pWdaParams->pWdaContext = pWDA;
9076 pWdaParams->wdaMsgParam = pWowlExitParams;
9077
9078 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009079 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009080
Jeff Johnson43971f52012-07-17 12:26:56 -07009081 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009082 {
9083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9084 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009085 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9087 vos_mem_free(pWdaParams->wdaMsgParam);
9088 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009090 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009091}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009092/*
9093 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9094 * Request to WDI to determine whether a given station is capable of
9095 * using HW-based frame translation
9096 */
9097v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9098 tANI_U8 staIdx)
9099{
9100 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9101}
Jeff Johnson295189b2012-06-20 16:38:30 -07009102/*
9103 * FUNCTION: WDA_NvDownloadReqCallback
9104 * send NV Download RSP back to PE
9105 */
9106void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9107 void* pUserData)
9108{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009109
9110 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9111 tWDA_CbContext *pWDA;
9112
Jeff Johnson295189b2012-06-20 16:38:30 -07009113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009114 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009115
9116 if(NULL == pWdaParams)
9117 {
9118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009119 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009120 VOS_ASSERT(0) ;
9121 return ;
9122 }
9123
9124 pWDA = pWdaParams->pWdaContext;
9125
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9128 vos_mem_free(pWdaParams);
9129
Jeff Johnson295189b2012-06-20 16:38:30 -07009130 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009131 return ;
9132}
Jeff Johnson295189b2012-06-20 16:38:30 -07009133/*
9134 * FUNCTION: WDA_ProcessNvDownloadReq
9135 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9136 */
9137VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9138{
9139 /* Initialize the local Variables*/
9140 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9141 v_VOID_t *pNvBuffer=NULL;
9142 v_SIZE_t bufferSize = 0;
9143 WDI_Status status = WDI_STATUS_E_FAILURE;
9144 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009145 tWDA_ReqParams *pWdaParams ;
9146
Jeff Johnson295189b2012-06-20 16:38:30 -07009147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009148 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009149 if(NULL == pWDA)
9150 {
9151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009152 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009153 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 return VOS_STATUS_E_FAILURE;
9155 }
9156
9157 /* Get the NV structure base address and size from VOS */
9158 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009159 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9160 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 if(NULL == wdiNvDownloadReqParam)
9162 {
9163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009164 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 VOS_ASSERT(0);
9166 return VOS_STATUS_E_NOMEM;
9167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 /* Copy Params to wdiNvDownloadReqParam*/
9169 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9170 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009171
9172 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9173 if(NULL == pWdaParams)
9174 {
9175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009176 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009177 VOS_ASSERT(0);
9178 vos_mem_free(wdiNvDownloadReqParam);
9179 return VOS_STATUS_E_NOMEM;
9180 }
9181
Jeff Johnson295189b2012-06-20 16:38:30 -07009182 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009183 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9184 pWdaParams->wdaMsgParam = NULL;
9185 pWdaParams->pWdaContext = pWDA;
9186
9187
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009189
Jeff Johnson295189b2012-06-20 16:38:30 -07009190 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009191 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9192
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 if(IS_WDI_STATUS_FAILURE(status))
9194 {
9195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9196 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9198 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009200 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009201}
9202/*
9203 * FUNCTION: WDA_FlushAcReqCallback
9204 * send Flush AC RSP back to TL
9205 */
9206void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9207{
9208 vos_msg_t wdaMsg = {0} ;
9209 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9210 tFlushACReq *pFlushACReqParams;
9211 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009213 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009214 if(NULL == pWdaParams)
9215 {
9216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009217 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009218 VOS_ASSERT(0) ;
9219 return ;
9220 }
9221
9222 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9223 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9224 if(NULL == pFlushACRspParams)
9225 {
9226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009227 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009229 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009230 return ;
9231 }
9232 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9233 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9234 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9235 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9236 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009237 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009238 vos_mem_free(pWdaParams->wdaMsgParam) ;
9239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9240 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9242 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9243 // POST message to TL
9244 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9245
Jeff Johnson295189b2012-06-20 16:38:30 -07009246 return ;
9247}
Jeff Johnson295189b2012-06-20 16:38:30 -07009248/*
9249 * FUNCTION: WDA_ProcessFlushAcReq
9250 * Request to WDI to Update the DELBA REQ params.
9251 */
9252VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9253 tFlushACReq *pFlushAcReqParams)
9254{
9255 WDI_Status status = WDI_STATUS_SUCCESS ;
9256 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9257 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9258 sizeof(WDI_FlushAcReqParamsType)) ;
9259 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 if(NULL == wdiFlushAcReqParam)
9261 {
9262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 VOS_ASSERT(0);
9265 return VOS_STATUS_E_NOMEM;
9266 }
9267 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9268 if(NULL == pWdaParams)
9269 {
9270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009271 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 VOS_ASSERT(0);
9273 vos_mem_free(wdiFlushAcReqParam);
9274 return VOS_STATUS_E_NOMEM;
9275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009277 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009278 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9279 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9280 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9281 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009282 /* Store Flush AC pointer, as this will be used for response */
9283 /* store Params pass it to WDI */
9284 pWdaParams->pWdaContext = pWDA;
9285 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9286 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9288 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009289 if(IS_WDI_STATUS_FAILURE(status))
9290 {
9291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9292 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9293 vos_mem_free(pWdaParams->wdaMsgParam) ;
9294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9295 vos_mem_free(pWdaParams) ;
9296 //TODO: respond to TL with failure
9297 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009299}
Jeff Johnson295189b2012-06-20 16:38:30 -07009300/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009301 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009302 *
9303 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009304void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009305{
9306 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9307 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009308 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009309
9310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009311 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009312 if(NULL == pWdaParams)
9313 {
9314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009315 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 VOS_ASSERT(0) ;
9317 return ;
9318 }
9319 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9320 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9321 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9322 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9323 {
9324 pWDA->wdaAmpSessionOn = VOS_FALSE;
9325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 vos_mem_free(pWdaParams->wdaMsgParam) ;
9327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9328 vos_mem_free(pWdaParams) ;
9329 /*
9330 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9331 * param here
9332 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009333 return ;
9334}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009335/*
9336 * FUNCTION: WDA_BtAmpEventReqCallback
9337 * Free memory.
9338 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9339 */
9340void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9341{
9342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9343 tWDA_CbContext *pWDA;
9344 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009345
Yue Ma7f44bbe2013-04-12 11:47:39 -07009346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9347 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9348
9349 if(NULL == pWdaParams)
9350 {
9351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9352 "%s: pWdaParams received NULL", __func__);
9353 VOS_ASSERT(0);
9354 return;
9355 }
9356
9357 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9358 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9359
9360 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9361 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9362 {
9363 pWDA->wdaAmpSessionOn = VOS_FALSE;
9364 }
9365
9366 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9367 {
9368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9369 vos_mem_free(pWdaParams->wdaMsgParam);
9370 vos_mem_free(pWdaParams);
9371 }
9372
9373 return;
9374}
Jeff Johnson295189b2012-06-20 16:38:30 -07009375/*
9376 * FUNCTION: WDA_ProcessBtAmpEventReq
9377 * Request to WDI to Update with BT AMP events.
9378 */
9379VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9380 tSmeBtAmpEvent *pBtAmpEventParams)
9381{
9382 WDI_Status status = WDI_STATUS_SUCCESS ;
9383 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9384 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9385 sizeof(WDI_BtAmpEventParamsType)) ;
9386 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009388 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009389 if(NULL == wdiBtAmpEventParam)
9390 {
9391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009392 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009393 VOS_ASSERT(0);
9394 return VOS_STATUS_E_NOMEM;
9395 }
9396 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9397 if(NULL == pWdaParams)
9398 {
9399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009401 VOS_ASSERT(0);
9402 vos_mem_free(wdiBtAmpEventParam);
9403 return VOS_STATUS_E_NOMEM;
9404 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009405 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9406 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009407 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9408 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 /* Store BT AMP event pointer, as this will be used for response */
9410 /* store Params pass it to WDI */
9411 pWdaParams->pWdaContext = pWDA;
9412 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9413 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009414 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009415 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009416 if(IS_WDI_STATUS_FAILURE(status))
9417 {
9418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9419 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9420 vos_mem_free(pWdaParams->wdaMsgParam) ;
9421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9422 vos_mem_free(pWdaParams) ;
9423 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9425 {
9426 pWDA->wdaAmpSessionOn = VOS_TRUE;
9427 }
9428 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009429}
9430
Jeff Johnson295189b2012-06-20 16:38:30 -07009431/*
9432 * FUNCTION: WDA_FTMCommandReqCallback
9433 * Handle FTM CMD response came from HAL
9434 * Route responce to HDD FTM
9435 */
9436void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9437 void *usrData)
9438{
9439 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9441 {
9442 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309443 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 return;
9445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009446 /* Release Current FTM Command Request */
9447 vos_mem_free(pWDA->wdaFTMCmdReq);
9448 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009449 /* Post FTM Responce to HDD FTM */
9450 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 return;
9452}
Jeff Johnson295189b2012-06-20 16:38:30 -07009453/*
9454 * FUNCTION: WDA_ProcessFTMCommand
9455 * Send FTM command to WDI
9456 */
9457VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9458 tPttMsgbuffer *pPTTFtmCmd)
9459{
9460 WDI_Status status = WDI_STATUS_SUCCESS;
9461 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009462 ftmCMDReq = (WDI_FTMCommandReqType *)
9463 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9464 if(NULL == ftmCMDReq)
9465 {
9466 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9467 "WDA FTM Command buffer alloc fail");
9468 return VOS_STATUS_E_NOMEM;
9469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009470 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9471 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009472 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009473 /* Send command to WDI */
9474 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009475 return status;
9476}
Jeff Johnsone7245742012-09-05 17:12:55 -07009477#ifdef FEATURE_OEM_DATA_SUPPORT
9478/*
9479 * FUNCTION: WDA_StartOemDataReqCallback
9480 *
9481 */
9482void WDA_StartOemDataReqCallback(
9483 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9484 void* pUserData)
9485{
9486 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009487 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9488 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009489 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009490
Jeff Johnsone7245742012-09-05 17:12:55 -07009491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009492 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009493
9494 if(NULL == pWdaParams)
9495 {
9496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009497 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009498 VOS_ASSERT(0) ;
9499 return ;
9500 }
9501 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9502
Jeff Johnsone7245742012-09-05 17:12:55 -07009503 if(NULL == pWDA)
9504 {
9505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009506 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009507 VOS_ASSERT(0);
9508 return ;
9509 }
9510
9511 /*
9512 * Allocate memory for response params sent to PE
9513 */
9514 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9515
9516 // Check if memory is allocated for OemdataMeasRsp Params.
9517 if(NULL == pOemDataRspParams)
9518 {
9519 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9520 "OEM DATA WDA callback alloc fail");
9521 VOS_ASSERT(0) ;
9522 return;
9523 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009524
Jeff Johnsone7245742012-09-05 17:12:55 -07009525 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9527 vos_mem_free(pWdaParams->wdaMsgParam);
9528 vos_mem_free(pWdaParams) ;
9529
Jeff Johnsone7245742012-09-05 17:12:55 -07009530 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009531 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009532 * Also, here success always means that we have atleast one BSSID.
9533 */
9534 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9535
9536 //enable Tx
9537 status = WDA_ResumeDataTx(pWDA);
9538 if(status != VOS_STATUS_SUCCESS)
9539 {
9540 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9541 }
9542 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9543 return ;
9544}
9545/*
9546 * FUNCTION: WDA_ProcessStartOemDataReq
9547 * Send Start Oem Data Req to WDI
9548 */
9549VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9550 tStartOemDataReq *pOemDataReqParams)
9551{
9552 WDI_Status status = WDI_STATUS_SUCCESS;
9553 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009554 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009555
9556 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9557
9558 if(NULL == wdiOemDataReqParams)
9559 {
9560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009561 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009562 VOS_ASSERT(0);
9563 return VOS_STATUS_E_NOMEM;
9564 }
9565
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009566 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9567 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9568 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9569 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009570
9571 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9572
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009573 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9574 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009575 {
9576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009578 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009579 vos_mem_free(pOemDataReqParams);
9580 VOS_ASSERT(0);
9581 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009582 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009583
Bernald44a1ae2013-01-09 08:30:39 -08009584 pWdaParams->pWdaContext = (void*)pWDA;
9585 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9586 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009587
9588 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9589 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009590
9591 if(IS_WDI_STATUS_FAILURE(status))
9592 {
9593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9594 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9596 vos_mem_free(pWdaParams->wdaMsgParam);
9597 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009598 }
9599 return CONVERT_WDI2VOS_STATUS(status) ;
9600}
9601#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009602/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009603 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 *
9605 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009606void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009607{
9608 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009610 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009611 if(NULL == pWdaParams)
9612 {
9613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009614 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 VOS_ASSERT(0) ;
9616 return ;
9617 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009618
9619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9620 vos_mem_free(pWdaParams->wdaMsgParam);
9621 vos_mem_free(pWdaParams);
9622
9623 return ;
9624}
9625/*
9626 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9627 * Free memory.
9628 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
9629 */
9630void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
9631{
9632 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9633
9634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9635 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9636
9637 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009638 {
Yue Ma7f44bbe2013-04-12 11:47:39 -07009639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9640 "%s: pWdaParams received NULL", __func__);
9641 VOS_ASSERT(0);
9642 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009643 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009644
9645 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009646 {
9647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009648 vos_mem_free(pWdaParams->wdaMsgParam);
9649 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009651
9652 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009653}
Jeff Johnson295189b2012-06-20 16:38:30 -07009654#ifdef WLAN_FEATURE_GTK_OFFLOAD
9655/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009656 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 *
9658 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009659void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009660 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009661{
9662 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9663
9664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009665 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009666
9667 VOS_ASSERT(NULL != pWdaParams);
9668
9669 vos_mem_free(pWdaParams->wdaMsgParam) ;
9670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9671 vos_mem_free(pWdaParams) ;
9672
9673 //print a msg, nothing else to do
9674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009675 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009676
9677 return ;
9678}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009679/*
9680 * FUNCTION: WDA_GTKOffloadReqCallback
9681 * Free memory.
9682 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
9683 */
9684void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9685{
9686 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009687
Yue Ma7f44bbe2013-04-12 11:47:39 -07009688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9689 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9690
9691 if(NULL == pWdaParams)
9692 {
9693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9694 "%s: pWdaParams received NULL", __func__);
9695 VOS_ASSERT(0);
9696 return;
9697 }
9698
9699 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9700 {
9701 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9702 vos_mem_free(pWdaParams->wdaMsgParam);
9703 vos_mem_free(pWdaParams);
9704 }
9705
9706 return;
9707}
Jeff Johnson295189b2012-06-20 16:38:30 -07009708/*
9709 * FUNCTION: WDA_ProcessGTKOffloadReq
9710 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9711 * to broadcast traffic (sta mode).
9712 */
9713VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9714 tpSirGtkOffloadParams pGtkOffloadParams)
9715{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309716 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009717 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9718 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9719 sizeof(WDI_GtkOffloadReqMsg)) ;
9720 tWDA_ReqParams *pWdaParams ;
9721
9722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009723 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009724
9725 if(NULL == wdiGtkOffloadReqMsg)
9726 {
9727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009728 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009729 VOS_ASSERT(0);
9730 return VOS_STATUS_E_NOMEM;
9731 }
9732
9733 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9734 if(NULL == pWdaParams)
9735 {
9736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009737 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 VOS_ASSERT(0);
9739 vos_mem_free(wdiGtkOffloadReqMsg);
9740 return VOS_STATUS_E_NOMEM;
9741 }
9742
9743 //
9744 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9745 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009746
9747 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309748 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009749
Jeff Johnson295189b2012-06-20 16:38:30 -07009750 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9751 // Copy KCK
9752 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9753 // Copy KEK
9754 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9755 // Copy KeyReplayCounter
9756 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9757 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9758
Yue Ma7f44bbe2013-04-12 11:47:39 -07009759 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
9760 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009761
Jeff Johnson295189b2012-06-20 16:38:30 -07009762
9763 /* Store Params pass it to WDI */
9764 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
9765 pWdaParams->pWdaContext = pWDA;
9766 /* Store param pointer as passed in by caller */
9767 pWdaParams->wdaMsgParam = pGtkOffloadParams;
9768
Yue Ma7f44bbe2013-04-12 11:47:39 -07009769 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009770
9771 if(IS_WDI_STATUS_FAILURE(status))
9772 {
9773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9774 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
9775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9776 vos_mem_free(pWdaParams->wdaMsgParam);
9777 vos_mem_free(pWdaParams);
9778 }
9779
9780 return CONVERT_WDI2VOS_STATUS(status) ;
9781}
9782
9783/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009784 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009785 *
9786 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009787void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009788 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009789{
9790 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9791 tWDA_CbContext *pWDA;
9792 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
9793 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009794 vos_msg_t vosMsg;
9795
9796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009797 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009798
9799 VOS_ASSERT(NULL != pWdaParams);
9800
9801 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9802 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
9803
9804 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
9805 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
9806
9807 /* Message Header */
9808 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9809 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
9810
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009811 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
9812 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
9813 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
9814 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
9815 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009816
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309817 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
9818 pwdiGtkOffloadGetInfoRsparams->bssId,
9819 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009820 /* VOS message wrapper */
9821 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9822 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
9823 vosMsg.bodyval = 0;
9824
9825 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
9826 {
9827 /* free the mem and return */
9828 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
9829 }
9830
9831 vos_mem_free(pWdaParams->wdaMsgParam) ;
9832 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9833 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009834
9835 return;
9836}
9837/*
9838 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
9839 * Free memory and send RSP back to SME.
9840 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
9841 */
9842void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
9843{
9844 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9845 vos_msg_t vosMsg;
9846
9847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9848 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9849
9850 if(NULL == pWdaParams)
9851 {
9852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9853 "%s: pWdaParams received NULL", __func__);
9854 VOS_ASSERT(0);
9855 return;
9856 }
9857
9858 /* VOS message wrapper */
9859 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9860 vosMsg.bodyptr = NULL;
9861 vosMsg.bodyval = 0;
9862
9863 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9864 {
9865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9866 vos_mem_free(pWdaParams->wdaMsgParam);
9867 vos_mem_free(pWdaParams);
9868 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
9869 }
9870
9871 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009872}
9873#endif
9874
9875/*
9876 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
9877 * Request to WDI to set Tx Per Tracking configurations
9878 */
9879VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
9880{
9881 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009882 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
9884 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
9885 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
9886 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009888 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009889 if(NULL == pwdiSetTxPerTrackingReqParams)
9890 {
9891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 vos_mem_free(pTxPerTrackingParams);
9894 VOS_ASSERT(0);
9895 return VOS_STATUS_E_NOMEM;
9896 }
9897 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9898 if(NULL == pWdaParams)
9899 {
9900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009901 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009902 vos_mem_free(pwdiSetTxPerTrackingReqParams);
9903 vos_mem_free(pTxPerTrackingParams);
9904 VOS_ASSERT(0);
9905 return VOS_STATUS_E_NOMEM;
9906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009907 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
9908 pTxPerTrackingParams->ucTxPerTrackingEnable;
9909 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
9910 pTxPerTrackingParams->ucTxPerTrackingPeriod;
9911 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
9912 pTxPerTrackingParams->ucTxPerTrackingRatio;
9913 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
9914 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009915 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
9916 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 /* Store param pointer as passed in by caller */
9918 /* store Params pass it to WDI
9919 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
9920 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
9921 pWdaParams->pWdaContext = pWDA;
9922 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009923 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009924 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009925 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 {
9927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9928 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009929 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 vos_mem_free(pWdaParams->wdaMsgParam) ;
9931 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9932 vos_mem_free(pWdaParams) ;
9933 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009934 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009935
9936}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009937/*
9938 * FUNCTION: WDA_HALDumpCmdCallback
9939 * Send the VOS complete .
9940 */
9941void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
9942 void* pUserData)
9943{
9944 tANI_U8 *buffer = NULL;
9945 tWDA_CbContext *pWDA = NULL;
9946 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 if(NULL == pWdaParams)
9948 {
9949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009950 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009951 VOS_ASSERT(0) ;
9952 return ;
9953 }
9954
9955 pWDA = pWdaParams->pWdaContext;
9956 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 if(wdiRspParams->usBufferLen > 0)
9958 {
9959 /*Copy the Resp data to UMAC supplied buffer*/
9960 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
9961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9963 vos_mem_free(pWdaParams);
9964
9965 /* Indicate VOSS about the start complete */
9966 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009967 return ;
9968}
9969
Jeff Johnson295189b2012-06-20 16:38:30 -07009970/*
9971 * FUNCTION: WDA_ProcessHALDumpCmdReq
9972 * Send Dump command to WDI
9973 */
9974VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9975 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9976 tANI_U32 arg4, tANI_U8 *pBuffer)
9977{
9978 WDI_Status status = WDI_STATUS_SUCCESS;
9979 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9980 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9981 tWDA_ReqParams *pWdaParams ;
9982 pVosContextType pVosContext = NULL;
9983 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009984 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9985 (void *)pMac);
9986
9987 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9988 if(NULL == pWdaParams)
9989 {
9990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009992 return VOS_STATUS_E_NOMEM;
9993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 /* Allocate memory WDI request structure*/
9995 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9996 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9997 if(NULL == wdiHALDumpCmdReqParam)
9998 {
9999 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10000 "WDA HAL DUMP Command buffer alloc fail");
10001 vos_mem_free(pWdaParams);
10002 return WDI_STATUS_E_FAILURE;
10003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010005 /* Extract the arguments */
10006 wdiHalDumpCmdInfo->command = cmd;
10007 wdiHalDumpCmdInfo->argument1 = arg1;
10008 wdiHalDumpCmdInfo->argument2 = arg2;
10009 wdiHalDumpCmdInfo->argument3 = arg3;
10010 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010011 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010012 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10013
10014 /* Response message will be passed through the buffer */
10015 pWdaParams->wdaMsgParam = (void *)pBuffer;
10016
10017 /* store Params pass it to WDI */
10018 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010019 /* Send command to WDI */
10020 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010021 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 if ( vStatus != VOS_STATUS_SUCCESS )
10023 {
10024 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10025 {
10026 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010027 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 }
10029 else
10030 {
10031 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010032 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 }
10034 VOS_ASSERT(0);
10035 }
10036 return status;
10037}
Jeff Johnson295189b2012-06-20 16:38:30 -070010038#ifdef WLAN_FEATURE_GTK_OFFLOAD
10039/*
10040 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10041 * Request to WDI to get GTK Offload Information
10042 */
10043VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10044 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10045{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010046 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010047 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10048 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10049 tWDA_ReqParams *pWdaParams ;
10050
10051 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10052 {
10053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010054 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010055 VOS_ASSERT(0);
10056 return VOS_STATUS_E_NOMEM;
10057 }
10058
10059 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10060 if(NULL == pWdaParams)
10061 {
10062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 VOS_ASSERT(0);
10065 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10066 return VOS_STATUS_E_NOMEM;
10067 }
10068
Yue Ma7f44bbe2013-04-12 11:47:39 -070010069 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10070 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010071
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 /* Store Params pass it to WDI */
10073 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10074 pWdaParams->pWdaContext = pWDA;
10075 /* Store param pointer as passed in by caller */
10076 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10077
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010078 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010079 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010080
Yue Ma7f44bbe2013-04-12 11:47:39 -070010081 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010082
10083 if(IS_WDI_STATUS_FAILURE(status))
10084 {
10085 /* failure returned by WDI API */
10086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10087 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10089 vos_mem_free(pWdaParams) ;
10090 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10091 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10092 }
10093
10094 return CONVERT_WDI2VOS_STATUS(status) ;
10095}
10096#endif // WLAN_FEATURE_GTK_OFFLOAD
10097
10098/*
10099 * -------------------------------------------------------------------------
10100 * DATA interface with WDI for Mgmt Frames
10101 * -------------------------------------------------------------------------
10102 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010103/*
10104 * FUNCTION: WDA_TxComplete
10105 * Callback function for the WDA_TxPacket
10106 */
10107VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10108 VOS_STATUS status )
10109{
10110
10111 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10112 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010113 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010114
10115 if(NULL == wdaContext)
10116 {
10117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10118 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010119 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 VOS_ASSERT(0);
10121 return VOS_STATUS_E_FAILURE;
10122 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010123
10124 /*Check if frame was timed out or not*/
10125 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10126 (v_PVOID_t)&uUserData);
10127
10128 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10129 {
10130 /*Discard frame - no further processing is needed*/
10131 vos_pkt_return_packet(pData);
10132 return VOS_STATUS_SUCCESS;
10133 }
10134
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10136 if( NULL!=wdaContext->pTxCbFunc)
10137 {
10138 /*check if packet is freed already*/
10139 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10140 {
10141 wdaContext->pTxCbFunc(pMac, pData);
10142 }
10143 else
10144 {
10145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010146 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010147 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010148 //Return from here since we reaching here because the packet already timeout
10149 return status;
10150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 }
10152
10153 /*
10154 * Trigger the event to bring the HAL TL Tx complete function to come
10155 * out of wait
10156 * Let the coe above to complete the packet first. When this event is set,
10157 * the thread waiting for the event may run and set Vospacket_freed causing the original
10158 * packet not being freed.
10159 */
10160 status = vos_event_set(&wdaContext->txFrameEvent);
10161 if(!VOS_IS_STATUS_SUCCESS(status))
10162 {
10163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10164 "NEW VOS Event Set failed - status = %d \n", status);
10165 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 return status;
10167}
Jeff Johnson295189b2012-06-20 16:38:30 -070010168/*
10169 * FUNCTION: WDA_TxPacket
10170 * Forward TX management frame to WDI
10171 */
10172VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10173 void *pFrmBuf,
10174 tANI_U16 frmLen,
10175 eFrameType frmType,
10176 eFrameTxDir txDir,
10177 tANI_U8 tid,
10178 pWDATxRxCompFunc pCompFunc,
10179 void *pData,
10180 pWDAAckFnTxComp pAckTxComp,
10181 tANI_U8 txFlag)
10182{
10183 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10184 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10185 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10186 tANI_U8 eventIdx = 0;
10187 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10188 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010189 if((NULL == pWDA)||(NULL == pFrmBuf))
10190 {
10191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010192 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010193 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 VOS_ASSERT(0);
10195 return VOS_STATUS_E_FAILURE;
10196 }
10197
10198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010199 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010200 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10201 if(NULL == pMac)
10202 {
10203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010204 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010205 VOS_ASSERT(0);
10206 return VOS_STATUS_E_FAILURE;
10207 }
10208
10209
10210
10211 /* store the call back function in WDA context */
10212 pWDA->pTxCbFunc = pCompFunc;
10213 /* store the call back for the function of ackTxComplete */
10214 if( pAckTxComp )
10215 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010216 if( NULL != pWDA->pAckTxCbFunc )
10217 {
10218 /* Already TxComp is active no need to active again */
10219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10220 "There is already one request pending for tx complete\n");
10221 pWDA->pAckTxCbFunc( pMac, 0);
10222 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010223
Jeff Johnsone7245742012-09-05 17:12:55 -070010224 if( VOS_STATUS_SUCCESS !=
10225 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10226 {
10227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10228 "Tx Complete timeout Timer Stop Failed ");
10229 }
10230 else
10231 {
10232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010233 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010234 }
10235 }
10236
10237 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
10238 pWDA->pAckTxCbFunc = pAckTxComp;
10239 if( VOS_STATUS_SUCCESS !=
10240 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
10241 {
10242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10243 "Tx Complete Timer Start Failed ");
10244 pWDA->pAckTxCbFunc = NULL;
10245 return eHAL_STATUS_FAILURE;
10246 }
10247 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010248 /* Reset the event to be not signalled */
10249 status = vos_event_reset(&pWDA->txFrameEvent);
10250 if(!VOS_IS_STATUS_SUCCESS(status))
10251 {
10252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10253 "VOS Event reset failed - status = %d\n",status);
10254 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
10255 if( pAckTxComp )
10256 {
10257 pWDA->pAckTxCbFunc = NULL;
10258 if( VOS_STATUS_SUCCESS !=
10259 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10260 {
10261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10262 "Tx Complete timeout Timer Stop Failed ");
10263 }
10264 }
10265 return VOS_STATUS_E_FAILURE;
10266 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010267
10268 /* If Peer Sta mask is set don't overwrite to self sta */
10269 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010271 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010273 else
10274 {
Ganesh K08bce952012-12-13 15:04:41 -080010275 /* Get system role, use the self station if in unknown role or STA role */
10276 systemRole = wdaGetGlobalSystemRole(pMac);
10277 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
10278 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080010279#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080010280 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010281#endif
Ganesh K08bce952012-12-13 15:04:41 -080010282 ))
10283 {
10284 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
10285 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080010286 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010287
Jeff Johnsone7245742012-09-05 17:12:55 -070010288 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
10289 disassoc frame reaches the HW, HAL has already deleted the peer station */
10290 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080010292 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070010293 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010295 /*Send Probe request frames on self sta idx*/
10296 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070010297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 /* Since we donot want probe responses to be retried, send probe responses
10299 through the NO_ACK queues */
10300 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
10301 {
10302 //probe response is sent out using self station and no retries options.
10303 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
10304 }
10305 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
10306 {
10307 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
10308 }
10309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010310 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
10311
10312 /*Set frame tag to 0
10313 We will use the WDA user data in order to tag a frame as expired*/
10314 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10315 (v_PVOID_t)0);
10316
10317
10318 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
10319 frmLen, ucTypeSubType, tid,
10320 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
10321 {
10322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10323 "Sending Mgmt Frame failed - status = %d\n", status);
10324 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
10325 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
10326 if( pAckTxComp )
10327 {
10328 pWDA->pAckTxCbFunc = NULL;
10329 if( VOS_STATUS_SUCCESS !=
10330 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10331 {
10332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10333 "Tx Complete timeout Timer Stop Failed ");
10334 }
10335 }
10336 return VOS_STATUS_E_FAILURE;
10337 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010338 /*
10339 * Wait for the event to be set by the TL, to get the response of TX
10340 * complete, this event should be set by the Callback function called by TL
10341 */
10342 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
10343 &eventIdx);
10344 if(!VOS_IS_STATUS_SUCCESS(status))
10345 {
10346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10347 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010348 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
10350 after the packet gets completed(packet freed once)*/
10351
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010352 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070010353 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010354
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010355 /*Tag Frame as timed out for later deletion*/
10356 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10357 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
10358
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 /* check whether the packet was freed already,so need not free again when
10360 * TL calls the WDA_Txcomplete routine
10361 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010362 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
10363 /*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 -070010364 {
10365 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010366 } */
10367
Jeff Johnson295189b2012-06-20 16:38:30 -070010368 if( pAckTxComp )
10369 {
10370 pWDA->pAckTxCbFunc = NULL;
10371 if( VOS_STATUS_SUCCESS !=
10372 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10373 {
10374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10375 "Tx Complete timeout Timer Stop Failed ");
10376 }
10377 }
10378 status = VOS_STATUS_E_FAILURE;
10379 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010380 return status;
10381}
Jeff Johnson295189b2012-06-20 16:38:30 -070010382/*
10383 * FUNCTION: WDA_McProcessMsg
10384 * Trigger DAL-AL to start CFG download
10385 */
10386VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10387{
10388 VOS_STATUS status = VOS_STATUS_SUCCESS;
10389 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010390 if(NULL == pMsg)
10391 {
10392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010393 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 VOS_ASSERT(0);
10395 return VOS_STATUS_E_FAILURE;
10396 }
10397
10398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010399 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010400
10401 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10402 if(NULL == pWDA )
10403 {
10404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010405 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010406 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010407 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 return VOS_STATUS_E_FAILURE;
10409 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010410 /* Process all the WDA messages.. */
10411 switch( pMsg->type )
10412 {
10413 case WNI_CFG_DNLD_REQ:
10414 {
10415 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 /* call WDA complete event if config download success */
10417 if( VOS_IS_STATUS_SUCCESS(status) )
10418 {
10419 vos_WDAComplete_cback(pVosContext);
10420 }
10421 else
10422 {
10423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10424 "WDA Config Download failure" );
10425 }
10426 break ;
10427 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010428 /*
10429 * Init SCAN request from PE, convert it into DAL format
10430 * and send it to DAL
10431 */
10432 case WDA_INIT_SCAN_REQ:
10433 {
10434 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10435 break ;
10436 }
10437 /* start SCAN request from PE */
10438 case WDA_START_SCAN_REQ:
10439 {
10440 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10441 break ;
10442 }
10443 /* end SCAN request from PE */
10444 case WDA_END_SCAN_REQ:
10445 {
10446 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10447 break ;
10448 }
10449 /* end SCAN request from PE */
10450 case WDA_FINISH_SCAN_REQ:
10451 {
10452 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10453 break ;
10454 }
10455 /* join request from PE */
10456 case WDA_CHNL_SWITCH_REQ:
10457 {
10458 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10459 {
10460 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10461 }
10462 else
10463 {
10464 WDA_ProcessChannelSwitchReq(pWDA,
10465 (tSwitchChannelParams*)pMsg->bodyptr) ;
10466 }
10467 break ;
10468 }
10469 /* ADD BSS request from PE */
10470 case WDA_ADD_BSS_REQ:
10471 {
10472 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10473 break ;
10474 }
10475 case WDA_ADD_STA_REQ:
10476 {
10477 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10478 break ;
10479 }
10480 case WDA_DELETE_BSS_REQ:
10481 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010482 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10483 break ;
10484 }
10485 case WDA_DELETE_STA_REQ:
10486 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010487 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10488 break ;
10489 }
10490 case WDA_CONFIG_PARAM_UPDATE_REQ:
10491 {
10492 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10493 break ;
10494 }
10495 case WDA_SET_BSSKEY_REQ:
10496 {
10497 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10498 break ;
10499 }
10500 case WDA_SET_STAKEY_REQ:
10501 {
10502 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10503 break ;
10504 }
10505 case WDA_SET_STA_BCASTKEY_REQ:
10506 {
10507 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10508 break ;
10509 }
10510 case WDA_REMOVE_BSSKEY_REQ:
10511 {
10512 WDA_ProcessRemoveBssKeyReq(pWDA,
10513 (tRemoveBssKeyParams *)pMsg->bodyptr);
10514 break ;
10515 }
10516 case WDA_REMOVE_STAKEY_REQ:
10517 {
10518 WDA_ProcessRemoveStaKeyReq(pWDA,
10519 (tRemoveStaKeyParams *)pMsg->bodyptr);
10520 break ;
10521 }
10522 case WDA_REMOVE_STA_BCASTKEY_REQ:
10523 {
10524 /* TODO: currently UMAC is not sending this request, Add the code for
10525 handling this request when UMAC supports */
10526 break;
10527 }
10528#ifdef FEATURE_WLAN_CCX
10529 case WDA_TSM_STATS_REQ:
10530 {
10531 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10532 break;
10533 }
10534#endif
10535 case WDA_UPDATE_EDCA_PROFILE_IND:
10536 {
10537 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10538 break;
10539 }
10540 case WDA_ADD_TS_REQ:
10541 {
10542 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10543 break;
10544 }
10545 case WDA_DEL_TS_REQ:
10546 {
10547 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
10548 break;
10549 }
10550 case WDA_ADDBA_REQ:
10551 {
10552 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
10553 break;
10554 }
10555 case WDA_DELBA_IND:
10556 {
10557 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
10558 break;
10559 }
10560 case WDA_SET_LINK_STATE:
10561 {
10562 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
10563 break;
10564 }
10565 case WDA_GET_STATISTICS_REQ:
10566 {
10567 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
10568 break;
10569 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080010570#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
10571 case WDA_GET_ROAM_RSSI_REQ:
10572 {
10573 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
10574 break;
10575 }
10576#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010577 case WDA_PWR_SAVE_CFG:
10578 {
10579 if(pWDA->wdaState == WDA_READY_STATE)
10580 {
10581 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
10582 }
10583 else
10584 {
10585 if(NULL != pMsg->bodyptr)
10586 {
10587 vos_mem_free(pMsg->bodyptr);
10588 }
10589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10590 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
10591 }
10592 break;
10593 }
10594 case WDA_ENTER_IMPS_REQ:
10595 {
10596 if(pWDA->wdaState == WDA_READY_STATE)
10597 {
10598 WDA_ProcessEnterImpsReq(pWDA);
10599 }
10600 else
10601 {
10602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10603 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10604 }
10605 break;
10606 }
10607 case WDA_EXIT_IMPS_REQ:
10608 {
10609 if(pWDA->wdaState == WDA_READY_STATE)
10610 {
10611 WDA_ProcessExitImpsReq(pWDA);
10612 }
10613 else
10614 {
10615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10616 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10617 }
10618 break;
10619 }
10620 case WDA_ENTER_BMPS_REQ:
10621 {
10622 if(pWDA->wdaState == WDA_READY_STATE)
10623 {
10624 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
10625 }
10626 else
10627 {
10628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10629 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10630 }
10631 break;
10632 }
10633 case WDA_EXIT_BMPS_REQ:
10634 {
10635 if(pWDA->wdaState == WDA_READY_STATE)
10636 {
10637 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
10638 }
10639 else
10640 {
10641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10642 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10643 }
10644 break;
10645 }
10646 case WDA_ENTER_UAPSD_REQ:
10647 {
10648 if(pWDA->wdaState == WDA_READY_STATE)
10649 {
10650 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
10651 }
10652 else
10653 {
10654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10655 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10656 }
10657 break;
10658 }
10659 case WDA_EXIT_UAPSD_REQ:
10660 {
10661 if(pWDA->wdaState == WDA_READY_STATE)
10662 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010663 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010664 }
10665 else
10666 {
10667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10668 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10669 }
10670 break;
10671 }
10672 case WDA_UPDATE_UAPSD_IND:
10673 {
10674 if(pWDA->wdaState == WDA_READY_STATE)
10675 {
10676 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
10677 }
10678 else
10679 {
10680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10681 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
10682 }
10683 break;
10684 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010685 case WDA_REGISTER_PE_CALLBACK :
10686 {
10687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10688 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10689 /*TODO: store the PE callback */
10690 /* Do Nothing? MSG Body should be freed at here */
10691 if(NULL != pMsg->bodyptr)
10692 {
10693 vos_mem_free(pMsg->bodyptr);
10694 }
10695 break;
10696 }
10697 case WDA_SYS_READY_IND :
10698 {
10699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10700 "Handling msg type WDA_SYS_READY_IND " );
10701 pWDA->wdaState = WDA_READY_STATE;
10702 if(NULL != pMsg->bodyptr)
10703 {
10704 vos_mem_free(pMsg->bodyptr);
10705 }
10706 break;
10707 }
10708 case WDA_BEACON_FILTER_IND :
10709 {
10710 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
10711 break;
10712 }
10713 case WDA_BTC_SET_CFG:
10714 {
10715 /*TODO: handle this while dealing with BTC */
10716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10717 "Handling msg type WDA_BTC_SET_CFG " );
10718 /* Do Nothing? MSG Body should be freed at here */
10719 if(NULL != pMsg->bodyptr)
10720 {
10721 vos_mem_free(pMsg->bodyptr);
10722 }
10723 break;
10724 }
10725 case WDA_SIGNAL_BT_EVENT:
10726 {
10727 /*TODO: handle this while dealing with BTC */
10728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10729 "Handling msg type WDA_SIGNAL_BT_EVENT " );
10730 /* Do Nothing? MSG Body should be freed at here */
10731 if(NULL != pMsg->bodyptr)
10732 {
10733 vos_mem_free(pMsg->bodyptr);
10734 }
10735 break;
10736 }
10737 case WDA_CFG_RXP_FILTER_REQ:
10738 {
10739 WDA_ProcessConfigureRxpFilterReq(pWDA,
10740 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
10741 break;
10742 }
10743 case WDA_SET_HOST_OFFLOAD:
10744 {
10745 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10746 break;
10747 }
10748 case WDA_SET_KEEP_ALIVE:
10749 {
10750 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
10751 break;
10752 }
10753#ifdef WLAN_NS_OFFLOAD
10754 case WDA_SET_NS_OFFLOAD:
10755 {
10756 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10757 break;
10758 }
10759#endif //WLAN_NS_OFFLOAD
10760 case WDA_ADD_STA_SELF_REQ:
10761 {
10762 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
10763 break;
10764 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010765 case WDA_DEL_STA_SELF_REQ:
10766 {
10767 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
10768 break;
10769 }
10770 case WDA_WOWL_ADD_BCAST_PTRN:
10771 {
10772 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
10773 break;
10774 }
10775 case WDA_WOWL_DEL_BCAST_PTRN:
10776 {
10777 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
10778 break;
10779 }
10780 case WDA_WOWL_ENTER_REQ:
10781 {
10782 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
10783 break;
10784 }
10785 case WDA_WOWL_EXIT_REQ:
10786 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010787 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010788 break;
10789 }
10790 case WDA_TL_FLUSH_AC_REQ:
10791 {
10792 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
10793 break;
10794 }
10795 case WDA_SIGNAL_BTAMP_EVENT:
10796 {
10797 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
10798 break;
10799 }
10800#ifdef WDA_UT
10801 case WDA_WDI_EVENT_MSG:
10802 {
10803 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
10804 break ;
10805 }
10806#endif
10807 case WDA_UPDATE_BEACON_IND:
10808 {
10809 WDA_ProcessUpdateBeaconParams(pWDA,
10810 (tUpdateBeaconParams *)pMsg->bodyptr);
10811 break;
10812 }
10813 case WDA_SEND_BEACON_REQ:
10814 {
10815 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
10816 break;
10817 }
10818 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
10819 {
10820 WDA_ProcessUpdateProbeRspTemplate(pWDA,
10821 (tSendProbeRespParams *)pMsg->bodyptr);
10822 break;
10823 }
10824#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
10825 case WDA_SET_MAX_TX_POWER_REQ:
10826 {
10827 WDA_ProcessSetMaxTxPowerReq(pWDA,
10828 (tMaxTxPowerParams *)pMsg->bodyptr);
10829 break;
10830 }
10831#endif
schang86c22c42013-03-13 18:41:24 -070010832 case WDA_SET_TX_POWER_REQ:
10833 {
10834 WDA_ProcessSetTxPowerReq(pWDA,
10835 (tSirSetTxPowerReq *)pMsg->bodyptr);
10836 break;
10837 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 case WDA_SET_P2P_GO_NOA_REQ:
10839 {
10840 WDA_ProcessSetP2PGONOAReq(pWDA,
10841 (tP2pPsParams *)pMsg->bodyptr);
10842 break;
10843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 /* timer related messages */
10845 case WDA_TIMER_BA_ACTIVITY_REQ:
10846 {
10847 WDA_BaCheckActivity(pWDA) ;
10848 break ;
10849 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080010850
10851 /* timer related messages */
10852 case WDA_TIMER_TRAFFIC_STATS_IND:
10853 {
10854 WDA_TimerTrafficStatsInd(pWDA);
10855 break;
10856 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010857#ifdef WLAN_FEATURE_VOWIFI_11R
10858 case WDA_AGGR_QOS_REQ:
10859 {
10860 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
10861 break;
10862 }
10863#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070010864 case WDA_FTM_CMD_REQ:
10865 {
10866 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
10867 break ;
10868 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010869#ifdef FEATURE_OEM_DATA_SUPPORT
10870 case WDA_START_OEM_DATA_REQ:
10871 {
10872 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
10873 break;
10874 }
10875#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010876 /* Tx Complete Time out Indication */
10877 case WDA_TX_COMPLETE_TIMEOUT_IND:
10878 {
10879 WDA_ProcessTxCompleteTimeOutInd(pWDA);
10880 break;
10881 }
10882 case WDA_WLAN_SUSPEND_IND:
10883 {
10884 WDA_ProcessWlanSuspendInd(pWDA,
10885 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
10886 break;
10887 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010888 case WDA_WLAN_RESUME_REQ:
10889 {
10890 WDA_ProcessWlanResumeReq(pWDA,
10891 (tSirWlanResumeParam *)pMsg->bodyptr) ;
10892 break;
10893 }
10894
10895 case WDA_UPDATE_CF_IND:
10896 {
10897 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
10898 pMsg->bodyptr = NULL;
10899 break;
10900 }
10901#ifdef FEATURE_WLAN_SCAN_PNO
10902 case WDA_SET_PNO_REQ:
10903 {
10904 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
10905 break;
10906 }
10907 case WDA_UPDATE_SCAN_PARAMS_REQ:
10908 {
10909 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
10910 break;
10911 }
10912 case WDA_SET_RSSI_FILTER_REQ:
10913 {
10914 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
10915 break;
10916 }
10917#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070010918#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
10919 case WDA_START_ROAM_CANDIDATE_LOOKUP_REQ:
10920 {
10921 WDA_ProcessStartRoamCandidatelookupReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
10922 break;
10923 }
10924#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010925 case WDA_SET_TX_PER_TRACKING_REQ:
10926 {
10927 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
10928 break;
10929 }
10930
10931#ifdef WLAN_FEATURE_PACKET_FILTERING
10932 case WDA_8023_MULTICAST_LIST_REQ:
10933 {
10934 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
10935 break;
10936 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010937 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
10938 {
10939 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
10940 break;
10941 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
10943 {
10944 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
10945 break;
10946 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010947 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
10948 {
10949 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
10950 break;
10951 }
10952#endif // WLAN_FEATURE_PACKET_FILTERING
10953
10954
10955 case WDA_TRANSMISSION_CONTROL_IND:
10956 {
10957 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
10958 break;
10959 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010960 case WDA_SET_POWER_PARAMS_REQ:
10961 {
10962 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
10963 break;
10964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010965#ifdef WLAN_FEATURE_GTK_OFFLOAD
10966 case WDA_GTK_OFFLOAD_REQ:
10967 {
10968 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
10969 break;
10970 }
10971
10972 case WDA_GTK_OFFLOAD_GETINFO_REQ:
10973 {
10974 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
10975 break;
10976 }
10977#endif //WLAN_FEATURE_GTK_OFFLOAD
10978
10979 case WDA_SET_TM_LEVEL_REQ:
10980 {
10981 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
10982 break;
10983 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070010984#ifdef WLAN_FEATURE_11AC
10985 case WDA_UPDATE_OP_MODE:
10986 {
10987 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
10988 {
10989 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10990 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10991 else
10992 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10993 " VHT OpMode Feature is Not Supported \n");
10994 }
10995 else
10996 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10997 " 11AC Feature is Not Supported \n");
10998 break;
10999 }
11000#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011001#ifdef WLAN_FEATURE_11W
11002 case WDA_EXCLUDE_UNENCRYPTED_IND:
11003 {
11004 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11005 break;
11006 }
11007#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011008 default:
11009 {
11010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11011 "No Handling for msg type %x in WDA "
11012 ,pMsg->type);
11013 /* Do Nothing? MSG Body should be freed at here */
11014 if(NULL != pMsg->bodyptr)
11015 {
11016 vos_mem_free(pMsg->bodyptr);
11017 }
11018 //WDA_VOS_ASSERT(0) ;
11019 }
11020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 return status ;
11022}
11023
Jeff Johnson295189b2012-06-20 16:38:30 -070011024/*
11025 * FUNCTION: WDA_LowLevelIndCallback
11026 * IND API callback from WDI, send Ind to PE
11027 */
11028void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11029 void* pUserData )
11030{
11031 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11032#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11033 tSirRSSINotification rssiNotification;
11034#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 if(NULL == pWDA)
11036 {
11037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011038 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011039 VOS_ASSERT(0);
11040 return ;
11041 }
11042
11043 switch(wdiLowLevelInd->wdiIndicationType)
11044 {
11045 case WDI_RSSI_NOTIFICATION_IND:
11046 {
11047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11048 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011049#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11050 rssiNotification.bReserved =
11051 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11052 rssiNotification.bRssiThres1NegCross =
11053 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11054 rssiNotification.bRssiThres1PosCross =
11055 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11056 rssiNotification.bRssiThres2NegCross =
11057 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11058 rssiNotification.bRssiThres2PosCross =
11059 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11060 rssiNotification.bRssiThres3NegCross =
11061 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11062 rssiNotification.bRssiThres3PosCross =
11063 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011064 rssiNotification.avgRssi = (v_S7_t)
11065 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011066 WLANTL_BMPSRSSIRegionChangedNotification(
11067 pWDA->pVosContext,
11068 &rssiNotification);
11069#endif
11070 break ;
11071 }
11072 case WDI_MISSED_BEACON_IND:
11073 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011074 tpSirSmeMissedBeaconInd pMissBeacInd =
11075 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11077 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011078 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011079 if(NULL == pMissBeacInd)
11080 {
11081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11082 "%s: VOS MEM Alloc Failure", __func__);
11083 break;
11084 }
11085 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11086 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11087 pMissBeacInd->bssIdx =
11088 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11089 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011090 break ;
11091 }
11092 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11093 {
11094 /* TODO: Decode Ind and send Ind to PE */
11095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11096 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11097 break ;
11098 }
11099
11100 case WDI_MIC_FAILURE_IND:
11101 {
11102 tpSirSmeMicFailureInd pMicInd =
11103 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11104
11105 if(NULL == pMicInd)
11106 {
11107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011109 break;
11110 }
11111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11112 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011113 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11114 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11115 vos_mem_copy(pMicInd->bssId,
11116 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11117 sizeof(tSirMacAddr));
11118 vos_mem_copy(pMicInd->info.srcMacAddr,
11119 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11120 sizeof(tSirMacAddr));
11121 vos_mem_copy(pMicInd->info.taMacAddr,
11122 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11123 sizeof(tSirMacAddr));
11124 vos_mem_copy(pMicInd->info.dstMacAddr,
11125 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11126 sizeof(tSirMacAddr));
11127 vos_mem_copy(pMicInd->info.rxMacAddr,
11128 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11129 sizeof(tSirMacAddr));
11130 pMicInd->info.multicast =
11131 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11132 pMicInd->info.keyId=
11133 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11134 pMicInd->info.IV1=
11135 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11136 vos_mem_copy(pMicInd->info.TSC,
11137 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011138 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11139 (void *)pMicInd , 0) ;
11140 break ;
11141 }
11142 case WDI_FATAL_ERROR_IND:
11143 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011144 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 /* TODO: Decode Ind and send Ind to PE */
11146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11147 "Received WDI_FATAL_ERROR_IND from WDI ");
11148 break ;
11149 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011150 case WDI_DEL_STA_IND:
11151 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011152 tpDeleteStaContext pDelSTACtx =
11153 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11154
11155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11156 "Received WDI_DEL_STA_IND from WDI ");
11157 if(NULL == pDelSTACtx)
11158 {
11159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011160 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011161 break;
11162 }
11163 vos_mem_copy(pDelSTACtx->addr2,
11164 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11165 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011166 vos_mem_copy(pDelSTACtx->bssId,
11167 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11168 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 pDelSTACtx->assocId =
11170 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11171 pDelSTACtx->reasonCode =
11172 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11173 pDelSTACtx->staId =
11174 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011175 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11176 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011177 break ;
11178 }
11179 case WDI_COEX_IND:
11180 {
11181 tANI_U32 index;
11182 vos_msg_t vosMsg;
11183 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11184 if(NULL == pSmeCoexInd)
11185 {
11186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011187 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011188 break;
11189 }
11190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11191 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011192 /* Message Header */
11193 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11194 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011195 /* Info from WDI Indication */
11196 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11197 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11198 {
11199 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11200 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 /* VOS message wrapper */
11202 vosMsg.type = eWNI_SME_COEX_IND;
11203 vosMsg.bodyptr = (void *)pSmeCoexInd;
11204 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011205 /* Send message to SME */
11206 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11207 {
11208 /* free the mem and return */
11209 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11210 }
11211 else
11212 {
11213 /* DEBUG */
11214 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11215 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11216 pSmeCoexInd->coexIndType,
11217 pSmeCoexInd->coexIndData[0],
11218 pSmeCoexInd->coexIndData[1],
11219 pSmeCoexInd->coexIndData[2],
11220 pSmeCoexInd->coexIndData[3]);
11221 }
11222 break;
11223 }
11224 case WDI_TX_COMPLETE_IND:
11225 {
11226 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11227 /* Calling TxCompleteAck Indication from wda context*/
11228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11229 "Complete Indication received from HAL");
11230 if( pWDA->pAckTxCbFunc )
11231 {
11232 if( VOS_STATUS_SUCCESS !=
11233 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11234 {
11235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11236 "Tx Complete timeout Timer Stop Failed ");
11237 }
11238 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11239 pWDA->pAckTxCbFunc = NULL;
11240 }
11241 else
11242 {
11243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11244 "Tx Complete Indication is received after timeout ");
11245 }
11246 break;
11247 }
Viral Modid86bde22012-12-10 13:09:21 -080011248 case WDI_P2P_NOA_START_IND :
11249 {
11250 tSirP2PNoaStart *pP2pNoaStart =
11251 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11252
11253 if (NULL == pP2pNoaStart)
11254 {
11255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11256 "Memory allocation failure, "
11257 "WDI_P2P_NOA_START_IND not forwarded");
11258 break;
11259 }
11260 pP2pNoaStart->status =
11261 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11262 pP2pNoaStart->bssIdx =
11263 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11264 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11265 (void *)pP2pNoaStart , 0) ;
11266 break;
11267 }
11268
Jeff Johnson295189b2012-06-20 16:38:30 -070011269 case WDI_P2P_NOA_ATTR_IND :
11270 {
11271 tSirP2PNoaAttr *pP2pNoaAttr =
11272 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11274 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011275 if (NULL == pP2pNoaAttr)
11276 {
11277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11278 "Memory allocation failure, "
11279 "WDI_P2P_NOA_ATTR_IND not forwarded");
11280 break;
11281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011282 pP2pNoaAttr->index =
11283 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11284 pP2pNoaAttr->oppPsFlag =
11285 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11286 pP2pNoaAttr->ctWin =
11287 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11288
11289 pP2pNoaAttr->uNoa1IntervalCnt =
11290 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11291 pP2pNoaAttr->uNoa1Duration =
11292 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11293 pP2pNoaAttr->uNoa1Interval =
11294 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11295 pP2pNoaAttr->uNoa1StartTime =
11296 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011297 pP2pNoaAttr->uNoa2IntervalCnt =
11298 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11299 pP2pNoaAttr->uNoa2Duration =
11300 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11301 pP2pNoaAttr->uNoa2Interval =
11302 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11303 pP2pNoaAttr->uNoa2StartTime =
11304 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011305 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11306 (void *)pP2pNoaAttr , 0) ;
11307 break;
11308 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011309#ifdef FEATURE_WLAN_SCAN_PNO
11310 case WDI_PREF_NETWORK_FOUND_IND:
11311 {
11312 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011313 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11314 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11315 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11316 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11317
Jeff Johnson295189b2012-06-20 16:38:30 -070011318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11319 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 if (NULL == pPrefNetworkFoundInd)
11321 {
11322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11323 "Memory allocation failure, "
11324 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11325 break;
11326 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011327 /* Message Header */
11328 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011329 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011330
11331 /* Info from WDI Indication */
11332 pPrefNetworkFoundInd->ssId.length =
11333 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011334 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11336 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11337 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011338 if (NULL !=
11339 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11340 {
11341 pPrefNetworkFoundInd->frameLength =
11342 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11343 vos_mem_copy( pPrefNetworkFoundInd->data,
11344 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11345 pPrefNetworkFoundInd->frameLength);
11346 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11347 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11348 }
11349 else
11350 {
11351 pPrefNetworkFoundInd->frameLength = 0;
11352 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011353 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011354 /* VOS message wrapper */
11355 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11356 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11357 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011358 /* Send message to SME */
11359 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11360 {
11361 /* free the mem and return */
11362 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11363 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 break;
11365 }
11366#endif // FEATURE_WLAN_SCAN_PNO
11367
11368#ifdef WLAN_WAKEUP_EVENTS
11369 case WDI_WAKE_REASON_IND:
11370 {
11371 vos_msg_t vosMsg;
11372 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11373 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11374 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11375
11376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11377 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11378 wdiLowLevelInd->wdiIndicationType,
11379 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11380 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11381 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11382
11383 if (NULL == pWakeReasonInd)
11384 {
11385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11386 "Memory allocation failure, "
11387 "WDI_WAKE_REASON_IND not forwarded");
11388 break;
11389 }
11390
11391 vos_mem_zero(pWakeReasonInd, allocSize);
11392
11393 /* Message Header */
11394 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11395 pWakeReasonInd->mesgLen = allocSize;
11396
11397 /* Info from WDI Indication */
11398 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11399 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11400 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11401 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11402 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11403 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11404 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11405 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11406
11407 /* VOS message wrapper */
11408 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11409 vosMsg.bodyptr = (void *) pWakeReasonInd;
11410 vosMsg.bodyval = 0;
11411
11412 /* Send message to SME */
11413 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11414 {
11415 /* free the mem and return */
11416 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11417 }
11418
11419 break;
11420 }
11421#endif // WLAN_WAKEUP_EVENTS
11422
11423 case WDI_TX_PER_HIT_IND:
11424 {
11425 vos_msg_t vosMsg;
11426 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11427 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11428 /* VOS message wrapper */
11429 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11430 vosMsg.bodyptr = NULL;
11431 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011432 /* Send message to SME */
11433 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11434 {
11435 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11436 }
11437 break;
11438 }
11439
11440 default:
11441 {
11442 /* TODO error */
11443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11444 "Received UNKNOWN Indication from WDI ");
11445 }
11446 }
11447 return ;
11448}
11449
Jeff Johnson295189b2012-06-20 16:38:30 -070011450/*
11451 * BA related processing in WDA.
11452 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011453void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
11454 void* pUserData)
11455{
11456 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11457 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 if(NULL == pWdaParams)
11459 {
11460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011461 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011462 VOS_ASSERT(0) ;
11463 return ;
11464 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070011466 vos_mem_free(pWdaParams->wdaMsgParam) ;
11467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11468 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011470 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011471 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
11472 {
11473 tANI_U8 i = 0 ;
11474 tBaActivityInd *baActivityInd = NULL ;
11475 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
11476 tANI_U8 allocSize = sizeof(tBaActivityInd)
11477 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
11478 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
11479 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011480 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011481 if(NULL == baActivityInd)
11482 {
11483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011485 VOS_ASSERT(0) ;
11486 return;
11487 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011488 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
11489 sizeof(tSirMacAddr)) ;
11490 baActivityInd->baCandidateCnt = baCandidateCount ;
11491
11492 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
11493 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
11494
11495 for(i = 0 ; i < baCandidateCount ; i++)
11496 {
11497 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
11499 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011500 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
11501 {
11502 baCandidate->baInfo[tid].fBaEnable =
11503 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
11504 baCandidate->baInfo[tid].startingSeqNum =
11505 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
11506 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011507 wdiBaCandidate++ ;
11508 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
11511 }
11512 else
11513 {
11514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11515 "BA Trigger RSP with Failure received ");
11516 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011517 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011518}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011519
11520
11521/*
11522 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
11523 * during MCC
11524 */
11525void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
11526{
11527 wpt_uint32 enabled;
11528 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
11529 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
11530 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
11531
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011532 if (NULL == pMac )
11533 {
11534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11535 "%s: Invoked with invalid MAC context ", __func__ );
11536 VOS_ASSERT(0);
11537 return;
11538 }
11539
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011540 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11541 != eSIR_SUCCESS)
11542 {
11543 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11544 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11545 return;
11546 }
11547
11548 if(!enabled)
11549 {
11550 return;
11551 }
11552
11553 if(NULL == pWDA)
11554 {
11555 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11556 "%s:WDA context is NULL", __func__);
11557 VOS_ASSERT(0);
11558 return;
11559 }
11560
11561 if(activate)
11562 {
11563 if( VOS_STATUS_SUCCESS !=
11564 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11565 {
11566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11567 "Traffic Stats Timer Start Failed ");
11568 return;
11569 }
11570 WDI_DS_ActivateTrafficStats();
11571 }
11572 else
11573 {
11574 WDI_DS_DeactivateTrafficStats();
11575 WDI_DS_ClearTrafficStats();
11576
11577 if( VOS_STATUS_SUCCESS !=
11578 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11579 {
11580 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11581 "Traffic Stats Timer Stop Failed ");
11582 return;
11583 }
11584 }
11585}
11586
11587/*
11588 * Traffic Stats Timer handler
11589 */
11590void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
11591{
11592 WDI_Status wdiStatus;
11593 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
11594 WDI_TrafficStatsIndType trafficStatsIndParams;
11595 wpt_uint32 length, enabled;
11596 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11597
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011598 if (NULL == pMac )
11599 {
11600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11601 "%s: Invoked with invalid MAC context ", __func__ );
11602 VOS_ASSERT(0);
11603 return;
11604 }
11605
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011606 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11607 != eSIR_SUCCESS)
11608 {
11609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11610 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11611 return;
11612 }
11613
11614 if(!enabled)
11615 {
11616 WDI_DS_DeactivateTrafficStats();
11617 return;
11618 }
11619
11620 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
11621
11622 if(pWdiTrafficStats != NULL)
11623 {
11624 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
11625 trafficStatsIndParams.length = length;
11626 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080011627 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011628 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11629 trafficStatsIndParams.pUserData = pWDA;
11630
11631 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
11632
11633 if(WDI_STATUS_PENDING == wdiStatus)
11634 {
11635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11636 "Pending received for %s:%d ",__func__,__LINE__ );
11637 }
11638 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11639 {
11640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11641 "Failure in %s:%d ",__func__,__LINE__ );
11642 }
11643
11644 WDI_DS_ClearTrafficStats();
11645 }
11646 else
11647 {
11648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11649 "pWdiTrafficStats is Null");
11650 }
11651
11652 if( VOS_STATUS_SUCCESS !=
11653 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11654 {
11655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11656 "Traffic Stats Timer Start Failed ");
11657 return;
11658 }
11659}
11660
Jeff Johnson295189b2012-06-20 16:38:30 -070011661/*
11662 * BA Activity check timer handler
11663 */
11664void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
11665{
11666 tANI_U8 curSta = 0 ;
11667 tANI_U8 tid = 0 ;
11668 tANI_U8 size = 0 ;
11669 tANI_U8 baCandidateCount = 0 ;
11670 tANI_U8 newBaCandidate = 0 ;
11671 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
11672
11673 if(NULL == pWDA)
11674 {
11675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011676 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011677 VOS_ASSERT(0);
11678 return ;
11679 }
11680 if(WDA_MAX_STA < pWDA->wdaMaxSta)
11681 {
11682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11683 "Inconsistent STA entries in WDA");
11684 VOS_ASSERT(0) ;
11685 }
11686 /* walk through all STA entries and find out TX packet count */
11687 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
11688 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080011689#ifdef WLAN_SOFTAP_VSTA_FEATURE
11690 // We can only do BA on "hard" STAs.
11691 if (!(IS_HWSTA_IDX(curSta)))
11692 {
11693 continue;
11694 }
11695#endif //WLAN_SOFTAP_VSTA_FEATURE
11696 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
11697 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011698 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011699 tANI_U32 txPktCount = 0 ;
11700 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011701 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011702 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
11703 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070011704 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
11705 curSta, tid, &txPktCount)))
11706 {
11707#if 0
11708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11709 "************* %d:%d, %d ",curSta, txPktCount,
11710 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
11711#endif
11712 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011713 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070011714 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
11715 curSta, tid)))
11716 {
11717 /* get prepare for sending message to HAL */
11718 //baCandidate[baCandidateCount].staIdx = curSta ;
11719 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
11720 newBaCandidate = WDA_ENABLE_BA ;
11721 }
11722 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
11723 }
11724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011725 /* fill the entry for all the sta with given TID's */
11726 if(WDA_ENABLE_BA == newBaCandidate)
11727 {
11728 /* move to next BA candidate */
11729 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
11730 size += sizeof(WDI_TriggerBAReqCandidateType) ;
11731 baCandidateCount++ ;
11732 newBaCandidate = WDA_DISABLE_BA ;
11733 }
11734 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011735 /* prepare and send message to hal */
11736 if( 0 < baCandidateCount)
11737 {
11738 WDI_Status status = WDI_STATUS_SUCCESS ;
11739 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
11740 tWDA_ReqParams *pWdaParams =
11741 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011742 if(NULL == pWdaParams)
11743 {
11744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011746 VOS_ASSERT(0) ;
11747 return;
11748 }
11749 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
11750 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
11751 if(NULL == wdiTriggerBaReq)
11752 {
11753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011755 VOS_ASSERT(0) ;
11756 vos_mem_free(pWdaParams);
11757 return;
11758 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011759 do
11760 {
11761 WDI_TriggerBAReqinfoType *triggerBaInfo =
11762 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
11763 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
11764 /* TEMP_FIX: Need to see if WDI need check for assoc session for
11765 * for each request */
11766 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
11767 triggerBaInfo->ucBASessionID = 0;
11768 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
11769 } while(0) ;
11770 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
11771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011772 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011773 pWdaParams->pWdaContext = pWDA;
11774 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
11775 pWdaParams->wdaMsgParam = NULL;
11776 status = WDI_TriggerBAReq(wdiTriggerBaReq,
11777 WDA_TriggerBaReqCallback, pWdaParams) ;
11778 if(IS_WDI_STATUS_FAILURE(status))
11779 {
11780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11781 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
11782 vos_mem_free(pWdaParams->wdaMsgParam) ;
11783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11784 vos_mem_free(pWdaParams) ;
11785 }
11786 }
11787 else
11788 {
11789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11790 "There is no TID for initiating BA");
11791 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011792 if( VOS_STATUS_SUCCESS !=
11793 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11794 {
11795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11796 "BA Activity Timer Stop Failed ");
11797 return ;
11798 }
11799 if( VOS_STATUS_SUCCESS !=
11800 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11801 {
11802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11803 "BA Activity Timer Start Failed ");
11804 return;
11805 }
11806 return ;
11807}
Jeff Johnson295189b2012-06-20 16:38:30 -070011808/*
11809 * WDA common routine to create timer used by WDA.
11810 */
11811static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
11812{
Jeff Johnson295189b2012-06-20 16:38:30 -070011813 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11814 tANI_U32 val = 0 ;
11815 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11816
11817 if(NULL == pMac)
11818 {
11819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011820 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011821 VOS_ASSERT(0);
11822 return VOS_STATUS_E_FAILURE;
11823 }
11824 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
11825 != eSIR_SUCCESS)
11826 {
11827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11828 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
11829 return VOS_STATUS_E_FAILURE;
11830 }
11831 val = SYS_MS_TO_TICKS(val) ;
11832
11833 /* BA activity check timer */
11834 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
11835 "BA Activity Check timer", WDA_TimerHandler,
11836 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
11837 if(status != TX_SUCCESS)
11838 {
11839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11840 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011841 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011842 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011843 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011844 /* Tx Complete Timeout timer */
11845 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
11846 "Tx Complete Check timer", WDA_TimerHandler,
11847 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011848 if(status != TX_SUCCESS)
11849 {
11850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11851 "Unable to create Tx Complete Timeout timer");
11852 /* Destroy timer of BA activity check timer */
11853 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11854 if(status != TX_SUCCESS)
11855 {
11856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11857 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011858 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011859 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011860 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011861 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011862
11863 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
11864
11865 /* Traffic Stats timer */
11866 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
11867 "Traffic Stats timer", WDA_TimerHandler,
11868 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
11869 if(status != TX_SUCCESS)
11870 {
11871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11872 "Unable to create traffic stats timer");
11873 /* Destroy timer of BA activity check timer */
11874 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11875 if(status != TX_SUCCESS)
11876 {
11877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11878 "Unable to Destroy BA activity timer");
11879 }
11880 /* Destroy timer of tx complete timer */
11881 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
11882 if(status != TX_SUCCESS)
11883 {
11884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11885 "Unable to Tx complete timer");
11886 }
11887 return VOS_STATUS_E_FAILURE ;
11888 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011889 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011890}
Jeff Johnson295189b2012-06-20 16:38:30 -070011891/*
11892 * WDA common routine to destroy timer used by WDA.
11893 */
11894static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
11895{
11896 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011897 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
11898 if(status != TX_SUCCESS)
11899 {
11900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11901 "Unable to Destroy Tx Complete Timeout timer");
11902 return eSIR_FAILURE ;
11903 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011904 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
11905 if(status != TX_SUCCESS)
11906 {
11907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11908 "Unable to Destroy BA activity timer");
11909 return eSIR_FAILURE ;
11910 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011911 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
11912 if(status != TX_SUCCESS)
11913 {
11914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11915 "Unable to Destroy traffic stats timer");
11916 return eSIR_FAILURE ;
11917 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011918 return eSIR_SUCCESS ;
11919}
Jeff Johnson295189b2012-06-20 16:38:30 -070011920/*
11921 * WDA timer handler.
11922 */
11923void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
11924{
11925 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
11926 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011927 /*
11928 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
11929 */
11930 wdaMsg.type = timerInfo ;
11931 wdaMsg.bodyptr = NULL;
11932 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011933 /* post the message.. */
11934 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
11935 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
11936 {
11937 vosStatus = VOS_STATUS_E_BADMSG;
11938 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011939}
Jeff Johnson295189b2012-06-20 16:38:30 -070011940/*
11941 * WDA Tx Complete timeout Indication.
11942 */
11943void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
11944{
11945 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011946 if( pWDA->pAckTxCbFunc )
11947 {
11948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11949 "TxComplete timer expired\n");
11950 pWDA->pAckTxCbFunc( pMac, 0);
11951 pWDA->pAckTxCbFunc = NULL;
11952 }
11953 else
11954 {
11955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11956 "There is no request pending for TxComplete and wait timer expired\n");
11957 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011958}
Jeff Johnson295189b2012-06-20 16:38:30 -070011959/*
11960 * WDA Set REG Domain to VOS NV
11961 */
11962eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
11963{
11964 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
11965 {
11966 return eHAL_STATUS_INVALID_PARAMETER;
11967 }
11968 return eHAL_STATUS_SUCCESS;
11969}
Jeff Johnson295189b2012-06-20 16:38:30 -070011970
Jeff Johnson295189b2012-06-20 16:38:30 -070011971#ifdef FEATURE_WLAN_SCAN_PNO
11972/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011973 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070011974 *
11975 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070011976void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011977{
11978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011980 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070011981 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 {
11983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011984 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011985 VOS_ASSERT(0) ;
11986 return ;
11987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011988
Yue Ma7f44bbe2013-04-12 11:47:39 -070011989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11990 vos_mem_free(pWdaParams->wdaMsgParam);
11991 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011992
11993 return ;
11994}
Jeff Johnson295189b2012-06-20 16:38:30 -070011995/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070011996 * FUNCTION: WDA_PNOScanReqCallback
11997 * Free memory.
11998 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
11999 */
12000void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012001{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012002 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12003
12004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12005 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12006
12007 if(NULL == pWdaParams)
12008 {
12009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12010 "%s: pWdaParams received NULL", __func__);
12011 VOS_ASSERT(0);
12012 return;
12013 }
12014
12015 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12016 {
12017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12018 vos_mem_free(pWdaParams->wdaMsgParam);
12019 vos_mem_free(pWdaParams);
12020 }
12021
12022 return;
12023}
12024/*
12025 * FUNCTION: WDA_UpdateScanParamsRespCallback
12026 *
12027 */
12028void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12029{
12030 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012032 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012033 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 {
12035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012036 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012037 VOS_ASSERT(0) ;
12038 return ;
12039 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012040
12041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12042 vos_mem_free(pWdaParams->wdaMsgParam);
12043 vos_mem_free(pWdaParams);
12044
Jeff Johnson295189b2012-06-20 16:38:30 -070012045 return ;
12046}
Jeff Johnson295189b2012-06-20 16:38:30 -070012047/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012048 * FUNCTION: WDA_UpdateScanParamsReqCallback
12049 * Free memory.
12050 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12051 */
12052void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12053{
12054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12055
12056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12057 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12058
12059 if(NULL == pWdaParams)
12060 {
12061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12062 "%s: pWdaParams received NULL", __func__);
12063 VOS_ASSERT(0);
12064 return;
12065 }
12066
12067 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12068 {
12069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12070 vos_mem_free(pWdaParams->wdaMsgParam);
12071 vos_mem_free(pWdaParams);
12072 }
12073
12074 return;
12075}
12076/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012077 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12078 * Request to WDI to set Preferred Network List.Offload
12079 */
12080VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12081 tSirPNOScanReq *pPNOScanReqParams)
12082{
Jeff Johnson43971f52012-07-17 12:26:56 -070012083 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012084 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12085 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12086 tWDA_ReqParams *pWdaParams ;
12087 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012089 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012090 if(NULL == pwdiPNOScanReqInfo)
12091 {
12092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012093 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012094 VOS_ASSERT(0);
12095 return VOS_STATUS_E_NOMEM;
12096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012097 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12098 if(NULL == pWdaParams)
12099 {
12100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012101 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 VOS_ASSERT(0);
12103 vos_mem_free(pwdiPNOScanReqInfo);
12104 return VOS_STATUS_E_NOMEM;
12105 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012106 //
12107 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12108 //
12109 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12110 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012111 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12112 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12113 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012114 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12115 {
12116 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12117 &pPNOScanReqParams->aNetworks[i],
12118 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12119 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012120 /*Scan timer intervals*/
12121 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12122 &pPNOScanReqParams->scanTimers,
12123 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012124 /*Probe template for 2.4GHz band*/
12125 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12126 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12127 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012128 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12129 pPNOScanReqParams->p24GProbeTemplate,
12130 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012131 /*Probe template for 5GHz band*/
12132 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12133 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12134 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012135 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12136 pPNOScanReqParams->p5GProbeTemplate,
12137 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012138 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12139 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012140
Jeff Johnson295189b2012-06-20 16:38:30 -070012141 /* Store Params pass it to WDI */
12142 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12143 pWdaParams->pWdaContext = pWDA;
12144 /* Store param pointer as passed in by caller */
12145 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012146 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012147 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012148 if(IS_WDI_STATUS_FAILURE(status))
12149 {
12150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12151 "Failure in Set PNO REQ WDI API, free all the memory " );
12152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12153 vos_mem_free(pWdaParams->wdaMsgParam);
12154 pWdaParams->wdaWdiApiMsgParam = NULL;
12155 pWdaParams->wdaMsgParam = NULL;
12156 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012157 return CONVERT_WDI2VOS_STATUS(status) ;
12158}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012159
12160#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12161
12162void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12163{
12164 /*Convert the CSR Auth types to WDI Auth types */
12165 switch (csrAuthType)
12166 {
12167 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12168 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12169 break;
12170#ifdef FEATURE_WLAN_CCX
12171 case eCSR_AUTH_TYPE_CCKM_WPA:
12172 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12173 break;
12174#endif
12175 case eCSR_AUTH_TYPE_WPA:
12176 *AuthType = eWDA_AUTH_TYPE_WPA;
12177 break;
12178 case eCSR_AUTH_TYPE_WPA_PSK:
12179 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12180 break;
12181#ifdef FEATURE_WLAN_CCX
12182 case eCSR_AUTH_TYPE_CCKM_RSN:
12183 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12184 break;
12185#endif
12186 case eCSR_AUTH_TYPE_RSN:
12187 *AuthType = eWDA_AUTH_TYPE_RSN;
12188 break;
12189 case eCSR_AUTH_TYPE_RSN_PSK:
12190 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12191 break;
12192#if defined WLAN_FEATURE_VOWIFI_11R
12193 case eCSR_AUTH_TYPE_FT_RSN:
12194 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12195 break;
12196 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12197 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12198 break;
12199#endif
12200#ifdef FEATURE_WLAN_WAPI
12201 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12202 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12203 break;
12204 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12205 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12206 break;
12207#endif /* FEATURE_WLAN_WAPI */
12208 case eCSR_AUTH_TYPE_SHARED_KEY:
12209 case eCSR_AUTH_TYPE_AUTOSWITCH:
12210 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12211 break;
12212#if 0
12213 case eCSR_AUTH_TYPE_SHARED_KEY:
12214 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12215 break;
12216 case eCSR_AUTH_TYPE_AUTOSWITCH:
12217 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12218#endif
12219 default:
12220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12221 "%s: Unknown Auth Type", __func__);
12222 break;
12223 }
12224}
12225void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12226{
12227 switch (csrEncrType)
12228 {
12229 case eCSR_ENCRYPT_TYPE_NONE:
12230 *EncrType = WDI_ED_NONE;
12231 break;
12232 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12233 case eCSR_ENCRYPT_TYPE_WEP40:
12234 *EncrType = WDI_ED_WEP40;
12235 break;
12236 case eCSR_ENCRYPT_TYPE_WEP104:
12237 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12238 *EncrType = WDI_ED_WEP104;
12239 break;
12240 case eCSR_ENCRYPT_TYPE_TKIP:
12241 *EncrType = WDI_ED_TKIP;
12242 break;
12243 case eCSR_ENCRYPT_TYPE_AES:
12244 *EncrType = WDI_ED_CCMP;
12245 break;
12246#ifdef WLAN_FEATURE_11W
12247 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12248 *EncrType = WDI_ED_AES_128_CMAC;
12249 break;
12250#endif
12251#ifdef FEATURE_WLAN_WAPI
12252 case eCSR_ENCRYPT_TYPE_WPI:
12253 *EncrType = WDI_ED_WPI;
12254 break;
12255#endif
12256 case eCSR_ENCRYPT_TYPE_ANY:
12257 *EncrType = WDI_ED_ANY;
12258 break;
12259
12260 default:
12261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12262 "%s: Unknown Encryption Type", __func__);
12263 break;
12264 }
12265}
12266
12267/*
12268 * FUNCTION: WDA_ProcessStartRoamCandidatelookupReq
12269 * Request to WDI to set Roam Offload Scan
12270 */
12271VOS_STATUS WDA_ProcessStartRoamCandidatelookupReq(tWDA_CbContext *pWDA,
12272 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12273{
12274 WDI_Status status;
12275 WDI_RoamCandidateLookupReqParamsType *pwdiRoamCandidateLookupReqParams =
12276 (WDI_RoamCandidateLookupReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamCandidateLookupReqParamsType));
12277 tWDA_ReqParams *pWdaParams ;
12278 v_U8_t csrAuthType;
12279 WDI_RoamNetworkType *pwdiRoamNetworkType;
12280 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12282 "------> %s " ,__func__);
12283 if (NULL == pwdiRoamCandidateLookupReqParams)
12284 {
12285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12286 "%s: VOS MEM Alloc Failure", __func__);
12287 VOS_ASSERT(0);
12288 return VOS_STATUS_E_NOMEM;
12289 }
12290 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12291 if (NULL == pWdaParams)
12292 {
12293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12294 "%s: VOS MEM Alloc Failure", __func__);
12295 VOS_ASSERT(0);
12296 vos_mem_free(pwdiRoamCandidateLookupReqParams);
12297 return VOS_STATUS_E_NOMEM;
12298 }
12299
12300 pwdiRoamNetworkType =
12301 &pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
12302 pwdiRoamOffloadScanInfo =
12303 &pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo;
12304 vos_mem_zero (pwdiRoamCandidateLookupReqParams,sizeof(WDI_RoamCandidateLookupReqParamsType));
12305 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12306 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12307 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12308 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12309 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12310 sizeof(pwdiRoamNetworkType->currAPbssid));
12311 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12312 csrAuthType);
12313 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12314 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12315 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12316 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12317 pwdiRoamOffloadScanInfo->LookupThreshold =
12318 pRoamOffloadScanReqParams->LookupThreshold ;
12319 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12320 pRoamOffloadScanReqParams->RoamRssiDiff ;
12321 pwdiRoamOffloadScanInfo->Command =
12322 pRoamOffloadScanReqParams->Command ;
12323 pwdiRoamOffloadScanInfo->StartScanReason =
12324 pRoamOffloadScanReqParams->StartScanReason ;
12325 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12326 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12327 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12328 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12329 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12330 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12331 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12332 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12333 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12334 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12335 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12336 pRoamOffloadScanReqParams->IsCCXEnabled ;
12337 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12338 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12339 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12340 pwdiRoamNetworkType->ssId.ucLength =
12341 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12342 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12343 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12344 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12345 pwdiRoamNetworkType->ChannelCount =
12346 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12347 pwdiRoamOffloadScanInfo->ChannelCacheType =
12348 pRoamOffloadScanReqParams->ChannelCacheType;
12349 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12350 pRoamOffloadScanReqParams->ValidChannelList,
12351 pRoamOffloadScanReqParams->ValidChannelCount);
12352 pwdiRoamOffloadScanInfo->ValidChannelCount =
12353 pRoamOffloadScanReqParams->ValidChannelCount;
12354 pwdiRoamOffloadScanInfo->us24GProbeSize =
12355 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12356 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12357 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12358 pRoamOffloadScanReqParams->p24GProbeTemplate,
12359 pwdiRoamOffloadScanInfo->us24GProbeSize);
12360 pwdiRoamOffloadScanInfo->us5GProbeSize =
12361 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12362 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12363 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12364 pRoamOffloadScanReqParams->p5GProbeTemplate,
12365 pwdiRoamOffloadScanInfo->us5GProbeSize);
12366 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12367 pRoamOffloadScanReqParams->MDID.mdiePresent;
12368 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12369 pRoamOffloadScanReqParams->MDID.mobilityDomain;
12370 pwdiRoamCandidateLookupReqParams->wdiReqStatusCB = NULL;
12371 /* Store Params pass it to WDI */
12372 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamCandidateLookupReqParams;
12373 pWdaParams->pWdaContext = pWDA;
12374 /* Store param pointer as passed in by caller */
12375 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
12376 status = WDI_StartRoamCandidateLookupReq(pwdiRoamCandidateLookupReqParams,
12377 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12378 if(IS_WDI_STATUS_FAILURE(status))
12379 {
12380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12381 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12383 vos_mem_free(pWdaParams->wdaMsgParam);
12384 pWdaParams->wdaWdiApiMsgParam = NULL;
12385 pWdaParams->wdaMsgParam = NULL;
12386 }
12387 return CONVERT_WDI2VOS_STATUS(status) ;
12388}
12389#endif
12390
Jeff Johnson295189b2012-06-20 16:38:30 -070012391/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012392 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012393 *
12394 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012395void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012396{
12397 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12398
12399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012400 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012401
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012402 if(NULL == pWdaParams)
12403 {
12404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012405 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012406 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012407 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012408 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012409
Jeff Johnson295189b2012-06-20 16:38:30 -070012410 vos_mem_free(pWdaParams->wdaMsgParam) ;
12411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12412 vos_mem_free(pWdaParams) ;
12413
12414 return ;
12415}
12416/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012417 * FUNCTION: WDA_RssiFilterReqCallback
12418 * Free memory.
12419 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
12420 */
12421void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
12422{
12423 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12424
12425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12426 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12427
12428 if(NULL == pWdaParams)
12429 {
12430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12431 "%s: pWdaParams received NULL", __func__);
12432 VOS_ASSERT(0);
12433 return;
12434 }
12435
12436 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12437 {
12438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12439 vos_mem_free(pWdaParams->wdaMsgParam);
12440 vos_mem_free(pWdaParams);
12441 }
12442
12443 return;
12444}
12445/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012446 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12447 * Request to WDI to set Preferred Network List.Offload
12448 */
12449VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
12450 tSirSetRSSIFilterReq* pRssiFilterParams)
12451{
Jeff Johnson43971f52012-07-17 12:26:56 -070012452 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012453 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
12454 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
12455 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012458 if(NULL == pwdiSetRssiFilterReqInfo)
12459 {
12460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012462 VOS_ASSERT(0);
12463 return VOS_STATUS_E_NOMEM;
12464 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12466 if(NULL == pWdaParams)
12467 {
12468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012470 VOS_ASSERT(0);
12471 vos_mem_free(pwdiSetRssiFilterReqInfo);
12472 return VOS_STATUS_E_NOMEM;
12473 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012474 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012475 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
12476 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012477
Jeff Johnson295189b2012-06-20 16:38:30 -070012478 /* Store Params pass it to WDI */
12479 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
12480 pWdaParams->pWdaContext = pWDA;
12481 /* Store param pointer as passed in by caller */
12482 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012484 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012485 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012486 if(IS_WDI_STATUS_FAILURE(status))
12487 {
12488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12489 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
12490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12491 vos_mem_free(pWdaParams->wdaMsgParam);
12492 pWdaParams->wdaWdiApiMsgParam = NULL;
12493 pWdaParams->wdaMsgParam = NULL;
12494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012495 return CONVERT_WDI2VOS_STATUS(status) ;
12496}
12497
Jeff Johnson295189b2012-06-20 16:38:30 -070012498/*
12499 * FUNCTION: WDA_ProcessUpdateScanParams
12500 * Request to WDI to update Scan Parameters
12501 */
12502VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
12503 tSirUpdateScanParams *pUpdateScanParams)
12504{
Jeff Johnson43971f52012-07-17 12:26:56 -070012505 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012506 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
12507 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
12508 sizeof(WDI_UpdateScanParamsInfoType)) ;
12509 tWDA_ReqParams *pWdaParams ;
12510 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012512 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012513 if(NULL == wdiUpdateScanParamsInfoType)
12514 {
12515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012516 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012517 VOS_ASSERT(0);
12518 return VOS_STATUS_E_NOMEM;
12519 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012520 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12521 if ( NULL == pWdaParams )
12522 {
12523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 VOS_ASSERT(0);
12526 vos_mem_free(wdiUpdateScanParamsInfoType);
12527 return VOS_STATUS_E_NOMEM;
12528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012529 //
12530 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
12531 //
Jeff Johnson295189b2012-06-20 16:38:30 -070012532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12533 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
12534 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
12535 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
12536 "sir struct %d wdi struct %d",
12537 pUpdateScanParams->b11dEnabled,
12538 pUpdateScanParams->b11dResolved,
12539 pUpdateScanParams->ucChannelCount,
12540 pUpdateScanParams->usPassiveMinChTime,
12541 pUpdateScanParams->usPassiveMaxChTime,
12542 pUpdateScanParams->usActiveMinChTime,
12543 pUpdateScanParams->usActiveMaxChTime,
12544 sizeof(tSirUpdateScanParams),
12545 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
12546
Jeff Johnson295189b2012-06-20 16:38:30 -070012547 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
12548 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070012549 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
12550 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070012551 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
12552 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070012553 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
12554 pUpdateScanParams->usActiveMaxChTime;
12555 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
12556 pUpdateScanParams->usActiveMinChTime;
12557 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
12558 pUpdateScanParams->usPassiveMaxChTime;
12559 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
12560 pUpdateScanParams->usPassiveMinChTime;
12561
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053012563 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
12564 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070012565
Jeff Johnson295189b2012-06-20 16:38:30 -070012566 for ( i = 0; i <
12567 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
12568 i++)
12569 {
12570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12571 "Update Scan Parameters channel: %d",
12572 pUpdateScanParams->aChannels[i]);
12573
12574 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
12575 pUpdateScanParams->aChannels[i];
12576 }
12577
Yue Ma7f44bbe2013-04-12 11:47:39 -070012578 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
12579 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012580
Jeff Johnson295189b2012-06-20 16:38:30 -070012581 /* Store Params pass it to WDI */
12582 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
12583 pWdaParams->pWdaContext = pWDA;
12584 /* Store param pointer as passed in by caller */
12585 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070012586
Jeff Johnson295189b2012-06-20 16:38:30 -070012587
12588
12589 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012590 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012591 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012592 if(IS_WDI_STATUS_FAILURE(status))
12593 {
12594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12595 "Failure in Update Scan Params EQ WDI API, free all the memory " );
12596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12597 vos_mem_free(pWdaParams->wdaMsgParam);
12598 vos_mem_free(pWdaParams);
12599 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012600 return CONVERT_WDI2VOS_STATUS(status) ;
12601}
12602#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012603
12604#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12605/*
12606 * FUNCTION: WDA_RoamOffloadScanReqCallback
12607 *
12608 */
12609void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
12610{
12611 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12613 "<------ %s " ,__func__);
12614 if (NULL == pWdaParams)
12615 {
12616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12617 "%s: pWdaParams received NULL", __func__);
12618 VOS_ASSERT(0) ;
12619 return ;
12620 }
12621 if ( pWdaParams != NULL )
12622 {
12623 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
12624 {
12625 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12626 }
12627 if ( pWdaParams->wdaMsgParam != NULL)
12628 {
12629 vos_mem_free(pWdaParams->wdaMsgParam);
12630 }
12631
12632 vos_mem_free(pWdaParams) ;
12633 }
12634 return ;
12635}
12636#endif
12637
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012638/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012639 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012640 *
12641 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012642void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012643{
12644 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12645
12646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12647 "<------ %s " ,__func__);
12648
12649 if(NULL == pWdaParams)
12650 {
12651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12652 "%s: pWdaParams received NULL", __func__);
12653 VOS_ASSERT(0);
12654 return;
12655 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012656
12657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12658 vos_mem_free(pWdaParams->wdaMsgParam);
12659 vos_mem_free(pWdaParams);
12660
12661 return;
12662}
12663/*
12664 * FUNCTION: WDA_SetPowerParamsReqCallback
12665 * Free memory.
12666 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
12667 */
12668void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12669{
12670 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12671
12672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12673 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12674
12675 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012676 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12678 "%s: pWdaParams received NULL", __func__);
12679 VOS_ASSERT(0);
12680 return;
12681 }
12682
12683 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12684 {
12685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12686 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012687 vos_mem_free(pWdaParams);
12688 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012689
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012690 return;
12691}
12692
Jeff Johnson295189b2012-06-20 16:38:30 -070012693#ifdef WLAN_FEATURE_PACKET_FILTERING
12694/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012695 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012696 *
12697 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012698void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012699 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
12700 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012701{
12702 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012704 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012705 if(NULL == pWdaParams)
12706 {
12707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012708 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012709 VOS_ASSERT(0) ;
12710 return ;
12711 }
12712
12713 vos_mem_free(pWdaParams->wdaMsgParam) ;
12714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12715 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012716 //print a msg, nothing else to do
12717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012718 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012719 return ;
12720}
Jeff Johnson295189b2012-06-20 16:38:30 -070012721/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012722 * FUNCTION: WDA_8023MulticastListReqCallback
12723 * Free memory.
12724 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
12725 */
12726void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
12727{
12728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12729
12730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12731 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12732
12733 if(NULL == pWdaParams)
12734 {
12735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12736 "%s: pWdaParams received NULL", __func__);
12737 VOS_ASSERT(0);
12738 return;
12739 }
12740
12741 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12742 {
12743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12744 vos_mem_free(pWdaParams->wdaMsgParam);
12745 vos_mem_free(pWdaParams);
12746 }
12747
12748 return;
12749}
12750/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012751 * FUNCTION: WDA_Process8023MulticastListReq
12752 * Request to WDI to add 8023 Multicast List
12753 */
12754VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
12755 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
12756{
Jeff Johnson43971f52012-07-17 12:26:56 -070012757 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012758 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
12759 tWDA_ReqParams *pWdaParams ;
12760 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012762 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012763 pwdiFltPktSetMcListReqParamsType =
12764 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
12765 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
12766 ) ;
12767 if(NULL == pwdiFltPktSetMcListReqParamsType)
12768 {
12769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012770 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012771 return VOS_STATUS_E_NOMEM;
12772 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012773 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12774 if(NULL == pWdaParams)
12775 {
12776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012777 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012778 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
12779 return VOS_STATUS_E_NOMEM;
12780 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012781
Jeff Johnson295189b2012-06-20 16:38:30 -070012782 //
12783 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
12784 //
12785 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070012786 pRcvFltMcAddrList->ulMulticastAddrCnt;
12787
12788 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
12789 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
12790 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
12791 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
12792
Jeff Johnson295189b2012-06-20 16:38:30 -070012793 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
12794 {
12795 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
12796 &(pRcvFltMcAddrList->multicastAddr[i]),
12797 sizeof(tSirMacAddr));
12798 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012799 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
12800 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012801
Jeff Johnson295189b2012-06-20 16:38:30 -070012802 /* Store Params pass it to WDI */
12803 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
12804 pWdaParams->pWdaContext = pWDA;
12805 /* Store param pointer as passed in by caller */
12806 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070012807 status = WDI_8023MulticastListReq(
12808 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012809 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012810 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012811 if(IS_WDI_STATUS_FAILURE(status))
12812 {
12813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12814 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
12815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12816 vos_mem_free(pWdaParams->wdaMsgParam);
12817 vos_mem_free(pWdaParams);
12818 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012819 return CONVERT_WDI2VOS_STATUS(status) ;
12820}
Jeff Johnson295189b2012-06-20 16:38:30 -070012821/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012822 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012823 *
12824 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012825void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012826 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
12827 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012828{
12829 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012831 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012832 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070012833 if(NULL == pWdaParams)
12834 {
12835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012836 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012837 VOS_ASSERT(0) ;
12838 return ;
12839 }
12840
12841 vos_mem_free(pWdaParams->wdaMsgParam) ;
12842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12843 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012844 //print a msg, nothing else to do
12845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012846 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012847 return ;
12848}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012849
12850/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012851 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
12852 * Free memory.
12853 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012854 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012855void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012856 void* pUserData)
12857{
12858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12859
12860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12861 "<------ %s, wdiStatus: %d",
12862 __func__, wdiStatus);
12863
12864 if (NULL == pWdaParams)
12865 {
12866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12867 "%s: Invalid pWdaParams pointer", __func__);
12868 VOS_ASSERT(0);
12869 return;
12870 }
12871
12872 if (IS_WDI_STATUS_FAILURE(wdiStatus))
12873 {
12874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12875 vos_mem_free(pWdaParams->wdaMsgParam);
12876 vos_mem_free(pWdaParams);
12877 }
12878
12879 return;
12880}
12881
Jeff Johnson295189b2012-06-20 16:38:30 -070012882/*
12883 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
12884 * Request to WDI to set Receive Filters
12885 */
12886VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
12887 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
12888{
Jeff Johnson43971f52012-07-17 12:26:56 -070012889 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012890 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
12891 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
12892 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
12893 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
12894 tWDA_ReqParams *pWdaParams ;
12895 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012897 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 if(NULL == pwdiSetRcvPktFilterReqParamsType)
12899 {
12900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012901 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012902 VOS_ASSERT(0);
12903 return VOS_STATUS_E_NOMEM;
12904 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012905 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12906 if(NULL == pWdaParams)
12907 {
12908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012910 VOS_ASSERT(0);
12911 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
12912 return VOS_STATUS_E_NOMEM;
12913 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012914 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
12915 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
12916 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
12917 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070012918 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
12919 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
12920
12921 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
12922 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012923
12924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12925 "FID %d FT %d NParams %d CT %d",
12926 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
12927 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
12928 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
12929 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070012930 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
12931 {
12932 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
12933 &pRcvPktFilterCfg->paramsData[i],
12934 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070012935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12936 "Proto %d Comp Flag %d \n",
12937 pwdiSetRcvPktFilterReqParamsType->
12938 wdiPktFilterCfg.paramsData[i].protocolLayer,
12939 pwdiSetRcvPktFilterReqParamsType->
12940 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070012941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12942 "Data Offset %d Data Len %d\n",
12943 pwdiSetRcvPktFilterReqParamsType->
12944 wdiPktFilterCfg.paramsData[i].dataOffset,
12945 pwdiSetRcvPktFilterReqParamsType->
12946 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070012947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12948 "CData: %d:%d:%d:%d:%d:%d\n",
12949 pwdiSetRcvPktFilterReqParamsType->
12950 wdiPktFilterCfg.paramsData[i].compareData[0],
12951 pwdiSetRcvPktFilterReqParamsType->
12952 wdiPktFilterCfg.paramsData[i].compareData[1],
12953 pwdiSetRcvPktFilterReqParamsType->
12954 wdiPktFilterCfg.paramsData[i].compareData[2],
12955 pwdiSetRcvPktFilterReqParamsType->
12956 wdiPktFilterCfg.paramsData[i].compareData[3],
12957 pwdiSetRcvPktFilterReqParamsType->
12958 wdiPktFilterCfg.paramsData[i].compareData[4],
12959 pwdiSetRcvPktFilterReqParamsType->
12960 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070012961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12962 "MData: %d:%d:%d:%d:%d:%d\n",
12963 pwdiSetRcvPktFilterReqParamsType->
12964 wdiPktFilterCfg.paramsData[i].dataMask[0],
12965 pwdiSetRcvPktFilterReqParamsType->
12966 wdiPktFilterCfg.paramsData[i].dataMask[1],
12967 pwdiSetRcvPktFilterReqParamsType->
12968 wdiPktFilterCfg.paramsData[i].dataMask[2],
12969 pwdiSetRcvPktFilterReqParamsType->
12970 wdiPktFilterCfg.paramsData[i].dataMask[3],
12971 pwdiSetRcvPktFilterReqParamsType->
12972 wdiPktFilterCfg.paramsData[i].dataMask[4],
12973 pwdiSetRcvPktFilterReqParamsType->
12974 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070012975 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012976 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012977 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 /* Store Params pass it to WDI */
12979 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
12980 pWdaParams->pWdaContext = pWDA;
12981 /* Store param pointer as passed in by caller */
12982 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070012983 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080012984 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012985 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012986 if(IS_WDI_STATUS_FAILURE(status))
12987 {
12988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12989 "Failure in SetFilter(),free all the memory,status %d ",status);
12990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12991 vos_mem_free(pWdaParams->wdaMsgParam);
12992 vos_mem_free(pWdaParams);
12993 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012994 return CONVERT_WDI2VOS_STATUS(status) ;
12995}
Jeff Johnson295189b2012-06-20 16:38:30 -070012996/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012997 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012998 *
12999 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013000void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013001 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13002 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013003{
13004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13005 tWDA_CbContext *pWDA;
13006 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13007 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13008 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13009 tANI_U8 i;
13010 vos_msg_t vosMsg;
13011
13012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013013 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013014 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13015
Jeff Johnsone7245742012-09-05 17:12:55 -070013016 if(NULL == pRcvFltPktMatchCntRsp)
13017 {
13018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013019 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013020 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013021 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013022 return ;
13023 }
13024
Jeff Johnson295189b2012-06-20 16:38:30 -070013025 if(NULL == pWdaParams)
13026 {
13027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013028 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013029 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013030 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013031 return ;
13032 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013033 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13034 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013035 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13036 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13037
13038 /* Message Header */
13039 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13040 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13041
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013042 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013043
13044 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13045 {
13046 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13047 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13048 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013049 /* VOS message wrapper */
13050 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13051 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13052 vosMsg.bodyval = 0;
13053 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13054 {
13055 /* free the mem and return */
13056 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13057 }
13058
13059 vos_mem_free(pWdaParams->wdaMsgParam) ;
13060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13061 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013062
13063 return;
13064}
13065/*
13066 * FUNCTION: WDA_FilterMatchCountReqCallback
13067 * Free memory and send RSP back to SME.
13068 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13069 */
13070void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13071{
13072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13073 vos_msg_t vosMsg;
13074
13075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13076 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13077
13078 if(NULL == pWdaParams)
13079 {
13080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13081 "%s: pWdaParams received NULL", __func__);
13082 VOS_ASSERT(0);
13083 return;
13084 }
13085
13086 /* VOS message wrapper */
13087 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13088 vosMsg.bodyptr = NULL;
13089 vosMsg.bodyval = 0;
13090
13091 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13092 {
13093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13094 vos_mem_free(pWdaParams->wdaMsgParam);
13095 vos_mem_free(pWdaParams);
13096 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13097 }
13098
13099 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013100}
Jeff Johnson295189b2012-06-20 16:38:30 -070013101/*
13102 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13103 * Request to WDI to get PC Filter Match Count
13104 */
13105VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13106{
Jeff Johnson43971f52012-07-17 12:26:56 -070013107 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013108 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13109 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13110 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013113 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13114 {
13115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013117 VOS_ASSERT(0);
13118 return VOS_STATUS_E_NOMEM;
13119 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013120 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13121 if(NULL == pWdaParams)
13122 {
13123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013125 VOS_ASSERT(0);
13126 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13127 return VOS_STATUS_E_NOMEM;
13128 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013129
Yue Ma7f44bbe2013-04-12 11:47:39 -070013130 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13131 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013132
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013133 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13134 pRcvFltPktMatchRsp->bssId,
13135 sizeof(wpt_macAddr));
13136
Jeff Johnson295189b2012-06-20 16:38:30 -070013137 /* Store Params pass it to WDI */
13138 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13139 pWdaParams->pWdaContext = pWDA;
13140 /* Store param pointer as passed in by caller */
13141 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013142 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013143 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013144 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013145 if(IS_WDI_STATUS_FAILURE(status))
13146 {
13147 /* failure returned by WDI API */
13148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13149 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13151 vos_mem_free(pWdaParams) ;
13152 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13153 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13154 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013155 return CONVERT_WDI2VOS_STATUS(status) ;
13156}
Jeff Johnson295189b2012-06-20 16:38:30 -070013157/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013158 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013159 *
13160 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013161void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013162 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13163 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013164{
13165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013167 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013168/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13169 if(NULL == pWdaParams)
13170 {
13171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013172 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013173 VOS_ASSERT(0) ;
13174 return ;
13175 }
13176
13177 vos_mem_free(pWdaParams->wdaMsgParam) ;
13178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13179 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013180 //print a msg, nothing else to do
13181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013182 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013183 return ;
13184}
Jeff Johnson295189b2012-06-20 16:38:30 -070013185/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013186 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13187 * Free memory.
13188 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13189 */
13190void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13191{
13192 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13193
13194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13195 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13196
13197 if(NULL == pWdaParams)
13198 {
13199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13200 "%s: Invalid pWdaParams pointer", __func__);
13201 VOS_ASSERT(0);
13202 return;
13203 }
13204
13205 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13206 {
13207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13208 vos_mem_free(pWdaParams->wdaMsgParam);
13209 vos_mem_free(pWdaParams);
13210 }
13211
13212 return;
13213}
13214/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013215 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13216 * Request to WDI to clear Receive Filters
13217 */
13218VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13219 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13220{
Jeff Johnson43971f52012-07-17 12:26:56 -070013221 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013222 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13223 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13224 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013227 if(NULL == pwdiRcvFltPktClearReqParamsType)
13228 {
13229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013231 VOS_ASSERT(0);
13232 return VOS_STATUS_E_NOMEM;
13233 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13235 if(NULL == pWdaParams)
13236 {
13237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013239 VOS_ASSERT(0);
13240 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13241 return VOS_STATUS_E_NOMEM;
13242 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013243 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13244 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013245 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13246 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13247 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13248 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013249
Yue Ma7f44bbe2013-04-12 11:47:39 -070013250 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013251 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013252 /* Store Params pass it to WDI */
13253 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13254 pWdaParams->pWdaContext = pWDA;
13255 /* Store param pointer as passed in by caller */
13256 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013257 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013258 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013259 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013260 if(IS_WDI_STATUS_FAILURE(status))
13261 {
13262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13263 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013265 vos_mem_free(pWdaParams->wdaMsgParam);
13266 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013267 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013268 return CONVERT_WDI2VOS_STATUS(status) ;
13269}
13270#endif // WLAN_FEATURE_PACKET_FILTERING
13271
Jeff Johnson295189b2012-06-20 16:38:30 -070013272/*
13273 * FUNCTION: WDA_ProcessSetPowerParamsReq
13274 * Request to WDI to set power params
13275 */
13276VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13277 tSirSetPowerParamsReq *pPowerParams)
13278{
Jeff Johnson43971f52012-07-17 12:26:56 -070013279 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013280 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13281 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013282 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013284 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013285 if(NULL == pwdiSetPowerParamsReqInfo)
13286 {
13287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013288 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013289 VOS_ASSERT(0);
13290 return VOS_STATUS_E_NOMEM;
13291 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013292 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13293 if(NULL == pWdaParams)
13294 {
13295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013296 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013297 VOS_ASSERT(0);
13298 vos_mem_free(pwdiSetPowerParamsReqInfo);
13299 return VOS_STATUS_E_NOMEM;
13300 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013301
Jeff Johnson295189b2012-06-20 16:38:30 -070013302
13303 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13304 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013305 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13306 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013307 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13308 pPowerParams->uListenInterval;
13309 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13310 pPowerParams->uBcastMcastFilter;
13311 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13312 pPowerParams->uEnableBET;
13313 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13314 pPowerParams->uBETInterval;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013315 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13316 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013317
Jeff Johnson295189b2012-06-20 16:38:30 -070013318 /* Store Params pass it to WDI */
13319 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13320 pWdaParams->pWdaContext = pWDA;
13321 /* Store param pointer as passed in by caller */
13322 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013323 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013324 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013326 if(IS_WDI_STATUS_FAILURE(status))
13327 {
13328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13329 "Failure in Set power params REQ WDI API, free all the memory " );
13330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13331 vos_mem_free(pWdaParams->wdaMsgParam);
13332 pWdaParams->wdaWdiApiMsgParam = NULL;
13333 pWdaParams->wdaMsgParam = NULL;
13334 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013335 return CONVERT_WDI2VOS_STATUS(status) ;
13336}
13337
13338/*
13339 * FUNCTION: WDA_SetTmLevelRspCallback
13340 * Set TM Level response
13341 */
13342void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13343{
13344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13345
13346 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
13349 if(NULL == pWdaParams)
13350 {
13351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013352 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013353 VOS_ASSERT(0) ;
13354 return ;
13355 }
13356
13357 /* Dose not need to send notification to upper layer
13358 * Just free allocated resources */
13359 if( pWdaParams != NULL )
13360 {
13361 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13362 {
13363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13364 }
13365 vos_mem_free(pWdaParams->wdaMsgParam) ;
13366 vos_mem_free(pWdaParams) ;
13367 }
13368}
13369
13370/*
13371 * FUNCTION: WDA_ProcessSetTmLevelReq
13372 * Set TM Level request
13373 */
13374VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13375 tAniSetTmLevelReq *setTmLevelReq)
13376{
13377 WDI_Status status = WDI_STATUS_SUCCESS ;
13378 tWDA_ReqParams *pWdaParams ;
13379 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13380 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13381 sizeof(WDI_SetTmLevelReqType)) ;
13382 if(NULL == wdiSetTmLevelReq)
13383 {
13384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013386 VOS_ASSERT(0);
13387 return VOS_STATUS_E_NOMEM;
13388 }
13389
13390 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13391 if(NULL == pWdaParams)
13392 {
13393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013395 VOS_ASSERT(0);
13396 vos_mem_free(wdiSetTmLevelReq);
13397 return VOS_STATUS_E_NOMEM;
13398 }
13399
13400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013401 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013402
13403 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
13404 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
13405
13406 pWdaParams->pWdaContext = pWDA;
13407 pWdaParams->wdaMsgParam = setTmLevelReq;
13408 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
13409
13410 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
13411 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
13412
13413 if(IS_WDI_STATUS_FAILURE(status))
13414 {
13415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080013416 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070013417 vos_mem_free(pWdaParams->wdaMsgParam) ;
13418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13419 vos_mem_free(pWdaParams) ;
13420 }
13421
13422 return CONVERT_WDI2VOS_STATUS(status) ;
13423}
13424
13425VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
13426 tpTxControlParams pTxCtrlParam)
13427{
13428 VOS_STATUS wdaStatus;
13429
13430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013431 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013432 if( pTxCtrlParam == NULL )
13433 {
13434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013435 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013436 return VOS_STATUS_E_FAILURE;
13437 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013438 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
13439 {
13440 wdaStatus = WDA_SuspendDataTx(pWDA);
13441 }
13442 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
13443 {
13444 wdaStatus = WDA_ResumeDataTx(pWDA);
13445 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013446 return wdaStatus;
13447}
13448
13449 /* FUNCTION WDA_featureCapsExchange
13450 * WDA API to invoke capability exchange between host and FW.
13451 */
13452void WDA_featureCapsExchange(v_PVOID_t pVosContext)
13453{
13454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013455 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013456 WDI_featureCapsExchangeReq( NULL, pVosContext);
13457}
13458
Yathish9f22e662012-12-10 14:21:35 -080013459/* FUNCTION WDA_disableCapablityFeature
13460 * WDA API to diable Active mode offload in host.
13461 */
13462void WDA_disableCapablityFeature(tANI_U8 feature_index)
13463{
13464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13465 "%s:enter", __func__ );
13466 WDI_disableCapablityFeature(feature_index);
13467}
13468
Jeff Johnson295189b2012-06-20 16:38:30 -070013469 /* FUNCTION WDA_getHostWlanFeatCaps
13470 * Wrapper for WDI API, that will return if the feature (enum value).passed
13471 * to this API is supported or not in Host
13472 * return value
13473 * 0 - implies feature is NOT Supported
13474 * any non zero value - implies feature is SUPPORTED
13475 */
13476tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
13477{
13478 return WDI_getHostWlanFeatCaps(featEnumValue);
13479}
13480
13481 /* FUNCTION WDA_getFwWlanFeatCaps
13482 * Wrapper for WDI API, that will return if the feature (enum value).passed
13483 * to this API is supported or not in FW
13484 * return value
13485 * 0 - implies feature is NOT Supported
13486 * any non zero value - implies feature is SUPPORTED
13487 */
13488tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
13489{
13490 return WDI_getFwWlanFeatCaps(featEnumValue);
13491}
13492
13493/*
13494 * FUNCTION: WDA_shutdown
13495 * Shutdown WDA/WDI without handshaking with Riva.
13496 * Synchronous function.
13497 */
13498VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
13499{
13500 WDI_Status wdiStatus;
13501 //tANI_U8 eventIdx = 0;
13502 VOS_STATUS status = VOS_STATUS_SUCCESS;
13503 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013504 if (NULL == pWDA)
13505 {
13506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013507 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013508 VOS_ASSERT(0);
13509 return VOS_STATUS_E_FAILURE;
13510 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013511 /* FTM mode stay START_STATE */
13512 if( (WDA_READY_STATE != pWDA->wdaState) &&
13513 (WDA_INIT_STATE != pWDA->wdaState) &&
13514 (WDA_START_STATE != pWDA->wdaState) )
13515 {
13516 VOS_ASSERT(0);
13517 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013518
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013519 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
13520 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070013521 {
13522 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013523 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013524 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013525
Jeff Johnson295189b2012-06-20 16:38:30 -070013526 /* call WDI shutdown */
13527 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070013528 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
13529 {
13530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13531 "error in WDA Stop" );
13532 status = VOS_STATUS_E_FAILURE;
13533 }
13534 /* WDI stop is synchrnous, shutdown is complete when it returns */
13535 pWDA->wdaState = WDA_STOP_STATE;
13536
Jeff Johnson295189b2012-06-20 16:38:30 -070013537 /* shutdown should perform the stop & close actions. */
13538 /* Destroy the event */
13539 status = vos_event_destroy(&pWDA->txFrameEvent);
13540 if(!VOS_IS_STATUS_SUCCESS(status))
13541 {
13542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13543 "VOS Event destroy failed - status = %d\n", status);
13544 status = VOS_STATUS_E_FAILURE;
13545 }
13546 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
13547 if(!VOS_IS_STATUS_SUCCESS(status))
13548 {
13549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13550 "VOS Event destroy failed - status = %d\n", status);
13551 status = VOS_STATUS_E_FAILURE;
13552 }
13553 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
13554 if(!VOS_IS_STATUS_SUCCESS(status))
13555 {
13556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13557 "VOS Event destroy failed - status = %d\n", status);
13558 status = VOS_STATUS_E_FAILURE;
13559 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013560 /* free WDA context */
13561 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
13562 if ( !VOS_IS_STATUS_SUCCESS(status) )
13563 {
13564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13565 "error in WDA close " );
13566 status = VOS_STATUS_E_FAILURE;
13567 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013568 return status;
13569}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013570
Jeff Johnsone7245742012-09-05 17:12:55 -070013571/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013572 * FUNCTION: WDA_setNeedShutdown
13573 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070013574 */
13575
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013576void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070013577{
13578 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013579 if(pWDA == NULL)
13580 {
13581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13582 "Could not get the WDA Context pointer" );
13583 return;
13584 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013585 pWDA->needShutdown = TRUE;
13586}
13587/*
13588 * FUNCTION: WDA_needShutdown
13589 * WDA needs a shutdown
13590 */
13591
13592v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
13593{
13594 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013595 if(pWDA == NULL)
13596 {
13597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13598 "Could not get the WDA Context pointer" );
13599 return 0;
13600 }
13601 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070013602}
13603
Mohit Khanna4a70d262012-09-11 16:30:12 -070013604#ifdef WLAN_FEATURE_11AC
13605/*
13606 * FUNCTION: WDA_SetBeaconFilterReqCallback
13607 *
13608 */
13609void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
13610{
13611 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013613 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013614 if(NULL == pWdaParams)
13615 {
13616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013617 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013618 VOS_ASSERT(0) ;
13619 return ;
13620 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013621
Mohit Khanna4a70d262012-09-11 16:30:12 -070013622 vos_mem_free(pWdaParams->wdaMsgParam) ;
13623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13624 vos_mem_free(pWdaParams) ;
13625 /*
13626 * No respone required for SetBeaconFilter req so just free the request
13627 * param here
13628 */
13629
13630 return ;
13631}
13632
13633VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
13634 tUpdateVHTOpMode *pData)
13635{
13636 WDI_Status status = WDI_STATUS_SUCCESS ;
13637 tWDA_ReqParams *pWdaParams ;
13638 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
13639 sizeof(WDI_UpdateVHTOpMode)) ;
13640 if(NULL == wdiTemp)
13641 {
13642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013643 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013644 VOS_ASSERT(0);
13645 return VOS_STATUS_E_NOMEM;
13646 }
13647 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13648 if(NULL == pWdaParams)
13649 {
13650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013651 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013652 VOS_ASSERT(0);
13653 vos_mem_free(wdiTemp);
13654 return VOS_STATUS_E_NOMEM;
13655 }
13656
13657 wdiTemp->opMode = pData->opMode;
13658 wdiTemp->staId = pData->staId;
13659
13660 pWdaParams->pWdaContext = pWDA;
13661 /* Store Req pointer, as this will be used for response */
13662 pWdaParams->wdaMsgParam = (void *)pData;
13663 /* store Params pass it to WDI */
13664 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
13665
13666 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
13667
13668 if(IS_WDI_STATUS_FAILURE(status))
13669 {
13670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13671 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
13672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13673 vos_mem_free(pWdaParams->wdaMsgParam);
13674 vos_mem_free(pWdaParams);
13675 }
13676 return CONVERT_WDI2VOS_STATUS(status) ;
13677}
13678#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013679
13680/*==========================================================================
13681 FUNCTION WDA_TransportChannelDebug
13682
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070013683 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013684 Display Transport Channel debugging information
13685 User may request to display DXE channel snapshot
13686 Or if host driver detects any abnormal stcuk may display
13687
13688 PARAMETERS
schang6295e542013-03-12 15:31:23 -070013689 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080013690 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013691 enableStallDetect : Enable stall detect feature
13692 This feature will take effect to data performance
13693 Not integrate till fully verification
13694
13695 RETURN VALUE
13696 NONE
13697
13698===========================================================================*/
13699void WDA_TransportChannelDebug
13700(
schang6295e542013-03-12 15:31:23 -070013701 tpAniSirGlobal pMac,
13702 v_BOOL_t displaySnapshot,
13703 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013704)
13705{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070013706 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013707 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013708}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070013709
13710/*==========================================================================
13711 FUNCTION WDA_SetEnableSSR
13712
13713 DESCRIPTION
13714 API to enable/disable SSR on WDI timeout
13715
13716 PARAMETERS
13717 enableSSR : enable/disable SSR
13718
13719 RETURN VALUE
13720 NONE
13721
13722===========================================================================*/
13723void WDA_SetEnableSSR(v_BOOL_t enableSSR)
13724{
13725 WDI_SetEnableSSR(enableSSR);
13726}