blob: 1dfd27007a8dfc896e1e0dc84097d27906f04c6a [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700148extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
149
Jeff Johnson295189b2012-06-20 16:38:30 -0700150/* forward declarations */
151void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
152 void *pBodyptr, tANI_U32 bodyVal) ;
153VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
154 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
156VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
157
158extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
159 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
160void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
161 tANI_U32 *pConfig) ;
162void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
163 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
164void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
165 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
166void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
167 void* pUserData ) ;
168static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
169static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
170void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800171void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700172void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef WLAN_FEATURE_VOWIFI_11R
174VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
175#endif /* WLAN_FEATURE_VOWIFI_11R */
176
Jeff Johnson295189b2012-06-20 16:38:30 -0700177void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
178void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
179VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef FEATURE_WLAN_SCAN_PNO
181static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
182static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
183static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
184#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700186VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
222VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
223 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700224#ifdef WLAN_FEATURE_11AC
225VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
226 tUpdateVHTOpMode *pData);
227#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700228/*
229 * FUNCTION: WDA_open
230 * Allocate the WDA context
231 */
232VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
233 tMacOpenParameters *pMacParams )
234{
235 tWDA_CbContext *wdaContext;
236 VOS_STATUS status;
237 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700238 /* Allocate WDA context */
239 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
240 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
241 if(!VOS_IS_STATUS_SUCCESS(status))
242 {
243 return VOS_STATUS_E_NOMEM;
244 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700245 /*__asm int 3;*/
246 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
247
248 /* Initialize data structures */
249 wdaContext->pVosContext = pVosContext;
250 wdaContext->wdaState = WDA_INIT_STATE;
251 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
252
253 /* Initialize WDA-WDI synchronization event */
254 status = vos_event_init(&wdaContext->wdaWdiEvent);
255 if(!VOS_IS_STATUS_SUCCESS(status))
256 {
257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
258 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800259 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700260 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700261 /* Init Frame transfer event */
262 status = vos_event_init(&wdaContext->txFrameEvent);
263 if(!VOS_IS_STATUS_SUCCESS(status))
264 {
265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
266 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800267 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 status = vos_event_init(&wdaContext->suspendDataTxEvent);
270 if(!VOS_IS_STATUS_SUCCESS(status))
271 {
272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
273 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800274 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
277 if(!VOS_IS_STATUS_SUCCESS(status))
278 {
279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
280 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800281 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700282 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700283 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700284 wdaContext->driverMode = pMacParams->driverType;
285 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
286 &wdiDevCapability, pMacParams->driverType))
287 {
288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
289 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800290 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 }
292 else
293 {
294 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
295 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
296 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700297 /* update max STA in WDA used for BA */
298 wdaContext->wdaMaxSta = pMacParams->maxStation;
299 /* store the frameTransRequired flag in wdaContext, to send this to HAL
300 * in WDA_Start
301 */
302 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
303 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700304 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800305
306error:
307 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
308 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700309}
310
Jeff Johnson295189b2012-06-20 16:38:30 -0700311/*
312 * FUNCTION: WDA_preStart
313 * Trigger DAL-AL to start CFG download
314 */
315VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
316{
317 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
318 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 /*
320 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
321 */
322 wdaMsg.type = WNI_CFG_DNLD_REQ ;
323 wdaMsg.bodyptr = NULL;
324 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 /* post the message.. */
326 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
327 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
328 {
329 vosStatus = VOS_STATUS_E_BADMSG;
330 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 return( vosStatus );
332}
Jeff Johnson295189b2012-06-20 16:38:30 -0700333/*
334 * FUNCTION: WDA_wdiStartCallback
335 * Once WDI_Start is finished, WDI start callback will be called by WDI
336 * to indicate completion of WDI_Start.
337 */
338void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
339 void *pVosContext)
340{
341 tWDA_CbContext *wdaContext;
342 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 if (NULL == pVosContext)
344 {
345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700346 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700347 return;
348 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700349 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
350 if (NULL == wdaContext)
351 {
352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700353 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 return;
355 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700356 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
357 {
358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700359 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700360 }
361 else
362 {
363 wdaContext->wdaState = WDA_START_STATE;
364 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 /* extract and save version information from the Start Response */
366 wdaContext->wcnssWlanCompiledVersion.major =
367 wdiRspParams->wlanCompiledVersion.major;
368 wdaContext->wcnssWlanCompiledVersion.minor =
369 wdiRspParams->wlanCompiledVersion.minor;
370 wdaContext->wcnssWlanCompiledVersion.version =
371 wdiRspParams->wlanCompiledVersion.version;
372 wdaContext->wcnssWlanCompiledVersion.revision =
373 wdiRspParams->wlanCompiledVersion.revision;
374 wdaContext->wcnssWlanReportedVersion.major =
375 wdiRspParams->wlanReportedVersion.major;
376 wdaContext->wcnssWlanReportedVersion.minor =
377 wdiRspParams->wlanReportedVersion.minor;
378 wdaContext->wcnssWlanReportedVersion.version =
379 wdiRspParams->wlanReportedVersion.version;
380 wdaContext->wcnssWlanReportedVersion.revision =
381 wdiRspParams->wlanReportedVersion.revision;
382 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
383 wdiRspParams->wcnssSoftwareVersion,
384 sizeof(wdaContext->wcnssSoftwareVersionString));
385 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
386 wdiRspParams->wcnssHardwareVersion,
387 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 /* Notify WDA_start that WDI_Start has completed */
389 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700390 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 {
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700393 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700395 return;
396}
397
Jeff Johnson295189b2012-06-20 16:38:30 -0700398/*
399 * FUNCTION: WDA_start
400 * Prepare TLV configuration and call WDI_Start.
401 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700402VOS_STATUS WDA_start(v_PVOID_t pVosContext)
403{
404 tWDA_CbContext *wdaContext;
405 VOS_STATUS status;
406 WDI_Status wdiStatus;
407 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700408 if (NULL == pVosContext)
409 {
410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700411 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700412 return VOS_STATUS_E_FAILURE;
413 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
415 if (NULL == wdaContext)
416 {
417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700418 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 return VOS_STATUS_E_FAILURE;
420 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 /* Non-FTM mode, WDA status for START must be INIT
422 * FTM mode, WDA Status for START can be INIT or STOP */
423 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
424 (WDA_STOP_STATE != wdaContext->wdaState) )
425 {
426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
427 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700428 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 return VOS_STATUS_E_FAILURE;
430 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 /* initialize the wdiStartParam. Note that we can create this on
432 the stack since we won't exit until WDI_Start() completes or
433 times out */
434 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700435 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* prepare the config TLV for the WDI */
437 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
438 if ( !VOS_IS_STATUS_SUCCESS(status) )
439 {
440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700441 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 return VOS_STATUS_E_FAILURE;
443 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 /* note from here onwards if an error occurs we must
445 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
447 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
448 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* initialize the WDA-WDI synchronization event */
450 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 /* call WDI start */
452 wdiStatus = WDI_Start(&wdiStartParam,
453 (WDI_StartRspCb)WDA_wdiStartCallback,
454 (v_VOID_t *)pVosContext);
455 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
456 {
457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700458 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 vos_mem_free(wdiStartParam.pConfigBuffer);
460 return VOS_STATUS_E_FAILURE;
461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 /* wait for WDI start to invoke our callback */
463 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
464 WDA_WDI_START_TIMEOUT );
465 if ( !VOS_IS_STATUS_SUCCESS(status) )
466 {
467 if ( VOS_STATUS_E_TIMEOUT == status )
468 {
469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700470 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 }
472 else
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
475 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700476 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 }
478 vos_mem_free(wdiStartParam.pConfigBuffer);
479 return VOS_STATUS_E_FAILURE;
480 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 /* we no longer need the config TLV */
483 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700484 /* if we are not in the START state then WDI_Start() failed */
485 if (WDA_START_STATE != wdaContext->wdaState)
486 {
487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700488 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 return VOS_STATUS_E_FAILURE;
490 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 /* FTM mode does not need to monitor BA activity */
492 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
493 {
494 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800495 if(VOS_STATUS_SUCCESS == status)
496 {
497 wdaContext->wdaTimersCreated = VOS_TRUE;
498 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700499 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700500 return status;
501}
502
Jeff Johnson295189b2012-06-20 16:38:30 -0700503/*
504 * FUNCTION: WDA_prepareConfigTLV
505 * Function to prepare CFG for DAL(WDA)
506 */
507VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
508 WDI_StartReqParamsType *wdiStartParams )
509{
510 /* get pMac to acess CFG data base */
511 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
512 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
513 tHalCfg *tlvStruct = NULL ;
514 tANI_U8 *tlvStructStart = NULL ;
515 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
516 v_PVOID_t *configParam;
517 tANI_U32 configParamSize;
518 tANI_U32 *configDataValue;
519 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 if ((NULL == pMac)||(NULL == wdaContext))
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 VOS_ASSERT(0);
525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
528 WNI_CFG_STA_ID_LEN +
529 WNI_CFG_EDCA_WME_ACBK_LEN +
530 WNI_CFG_EDCA_WME_ACBE_LEN +
531 WNI_CFG_EDCA_WME_ACVI_LEN +
532 WNI_CFG_EDCA_WME_ACVO_LEN +
533 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 /* malloc memory for all configs in one shot */
535 configParam = vos_mem_malloc(configParamSize);
536
537 if(NULL == configParam )
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 VOS_ASSERT(0) ;
542 return VOS_STATUS_E_NOMEM;
543 }
544 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 tlvStruct = (tHalCfg *)configParam;
547 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 /* TODO: Remove Later */
549 /* QWLAN_HAL_CFG_STA_ID */
550 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
551 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
552 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
553 eSIR_SUCCESS)
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
556 "Failed to get value for WNI_CFG_STA_ID");
557 goto handle_failure;
558 }
559 tlvStruct->length = strLength ;
560 /* calculate the pad bytes to have the CFG in aligned format */
561 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
562 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
564 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
566 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
567 tlvStruct->length = sizeof(tANI_U32);
568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
569 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
570 != eSIR_SUCCESS)
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
573 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
574 goto handle_failure;
575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
577 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
579 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
580 tlvStruct->length = sizeof(tANI_U32);
581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
582 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
583 eSIR_SUCCESS)
584 {
585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
586 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
587 goto handle_failure;
588 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
590 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
592 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
593 tlvStruct->length = sizeof(tANI_U32);
594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
595 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
596 != eSIR_SUCCESS)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
599 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
600 goto handle_failure;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
603 + sizeof(tHalCfg) + tlvStruct->length)) ;
604
605 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
606 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
610 configDataValue ) != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CAL_PERIOD */
619 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
623 != eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CAL_PERIOD");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_CAL_CONTROL */
632 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_CAL_CONTROL");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 /* QWLAN_HAL_CFG_PROXIMITY */
645 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
646 tlvStruct->length = sizeof(tANI_U32);
647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
648 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
649 != eSIR_SUCCESS)
650 {
651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
652 "Failed to get value for WNI_CFG_PROXIMITY");
653 goto handle_failure;
654 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
656 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
658 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
659 tlvStruct->length = sizeof(tANI_U32);
660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
661 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
662 != eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
666 goto handle_failure;
667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
669 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
671 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
672 tlvStruct->length = sizeof(tANI_U32);
673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
674 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
675 eSIR_SUCCESS)
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
679 goto handle_failure;
680 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
682 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
684 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
688 configDataValue ) != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
692 goto handle_failure;
693 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
697 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
701 eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
705 goto handle_failure;
706 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
708 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
710 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
714 eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
718 goto handle_failure;
719 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
721 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
723 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
724 tlvStruct->length = sizeof(tANI_U32);
725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
726 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
727 eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
731 goto handle_failure;
732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
734 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
736 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
740 configDataValue ) != eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
744 goto handle_failure;
745 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
747 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
749 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
753 configDataValue ) != eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length));
761
762 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
763 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
767 configDataValue ) != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
776 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length));
788
789 /* QWLAN_HAL_CFG_FIXED_RATE */
790 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_FIXED_RATE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length));
802
803 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
804 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
816
817 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
818 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
831 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
832 tlvStruct->length = sizeof(tANI_U32);
833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
834 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
835 configDataValue ) != eSIR_SUCCESS)
836 {
837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
838 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
839 goto handle_failure;
840 }
841 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
842 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
844 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
848 configDataValue ) != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
857 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
858 tlvStruct->length = sizeof(tANI_U32);
859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
860 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
861 configDataValue ) != eSIR_SUCCESS)
862 {
863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
864 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
865 goto handle_failure;
866 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
868 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700869 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
882
883#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
884 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
885 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
886 tlvStruct->length = sizeof(tANI_U32);
887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
888 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
889 configDataValue ) != eSIR_SUCCESS)
890 {
891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
892 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
893 goto handle_failure;
894 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700895 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
896 + sizeof(tHalCfg) + tlvStruct->length);
897#endif
898 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
899 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
900 tlvStruct->length = sizeof(tANI_U32);
901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
902 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
903 configDataValue ) != eSIR_SUCCESS)
904 {
905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
906 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
907 goto handle_failure;
908 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
910 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
912 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
913 tlvStruct->length = sizeof(tANI_U32);
914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
915 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
916 eSIR_SUCCESS)
917 {
918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
919 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
920 goto handle_failure;
921 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
923 + sizeof(tHalCfg) + tlvStruct->length);
924
925 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
926 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
927 tlvStruct->length = sizeof(tANI_U32);
928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
929 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
930 configDataValue ) != eSIR_SUCCESS)
931 {
932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
933 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
934 goto handle_failure;
935 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
937 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
939 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
940 tlvStruct->length = sizeof(tANI_U32);
941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
942 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
943 configDataValue ) != eSIR_SUCCESS)
944 {
945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
946 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
947 goto handle_failure;
948 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
950 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700951 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
952 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
953 tlvStruct->length = sizeof(tANI_U32);
954 configDataValue = (tANI_U32 *)(tlvStruct + 1);
955 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
956 configDataValue ) != eSIR_SUCCESS)
957 {
958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
959 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
960 goto handle_failure;
961 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
963 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700964 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
965 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
966 tlvStruct->length = sizeof(tANI_U32);
967 configDataValue = (tANI_U32 *)(tlvStruct + 1);
968 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
969 configDataValue ) != eSIR_SUCCESS)
970 {
971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
972 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
973 goto handle_failure;
974 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
976 + sizeof(tHalCfg) + tlvStruct->length);
977
978 /* QWLAN_HAL_CFG_STATS_PERIOD */
979 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
980 tlvStruct->length = sizeof(tANI_U32);
981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
982 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
983 eSIR_SUCCESS)
984 {
985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
986 "Failed to get value for WNI_CFG_STATS_PERIOD");
987 goto handle_failure;
988 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
990 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700991 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
992 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
993 tlvStruct->length = sizeof(tANI_U32);
994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
995 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
996 eSIR_SUCCESS)
997 {
998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
999 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1000 goto handle_failure;
1001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1005 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1009 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1011 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001012 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1013 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1014 tlvStruct->length = sizeof(tANI_U32);
1015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1016 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1017 != eSIR_SUCCESS)
1018 {
1019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1020 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1021 goto handle_failure;
1022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1024 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001025 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1026 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1027 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1029 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1030 &strLength) != eSIR_SUCCESS)
1031 {
1032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1033 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1034 goto handle_failure;
1035 }
1036 tlvStruct->length = strLength;
1037 /* calculate the pad bytes to have the CFG in aligned format */
1038 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1039 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1041 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1043 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1044 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1046 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1047 &strLength) != eSIR_SUCCESS)
1048 {
1049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1050 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1051 goto handle_failure;
1052 }
1053 tlvStruct->length = strLength;
1054 /* calculate the pad bytes to have the CFG in aligned format */
1055 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1056 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1058 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001059 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1060 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1061 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1062 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1063 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1064 &strLength) != eSIR_SUCCESS)
1065 {
1066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1067 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1068 goto handle_failure;
1069 }
1070 tlvStruct->length = strLength;
1071 /* calculate the pad bytes to have the CFG in aligned format */
1072 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1073 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001074 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1075 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001076 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1077 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1078 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1079 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1080 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1081 &strLength) != eSIR_SUCCESS)
1082 {
1083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1084 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1085 goto handle_failure;
1086 }
1087 tlvStruct->length = strLength;
1088 /* calculate the pad bytes to have the CFG in aligned format */
1089 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1090 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1092 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001093 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1094 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1095 tlvStruct->length = sizeof(tANI_U32);
1096 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1097 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1098 != eSIR_SUCCESS)
1099 {
1100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1101 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1102 goto handle_failure;
1103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1105 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001106 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1107 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1108 tlvStruct->length = sizeof(tANI_U32);
1109 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1110 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1111 != eSIR_SUCCESS)
1112 {
1113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1114 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1115 goto handle_failure;
1116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1118 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001119 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1120 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1121 tlvStruct->length = sizeof(tANI_U32);
1122 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1123 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1124 != eSIR_SUCCESS)
1125 {
1126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1127 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1128 goto handle_failure;
1129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1131 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1133 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1134 tlvStruct->length = sizeof(tANI_U32);
1135 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1136 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1137 != eSIR_SUCCESS)
1138 {
1139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1140 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1141 goto handle_failure;
1142 }
1143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1144 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001145 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1146 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1147 tlvStruct->length = sizeof(tANI_U32);
1148 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1149 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1150 != eSIR_SUCCESS)
1151 {
1152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1153 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1154 goto handle_failure;
1155 }
1156 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1157 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1159 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1160 tlvStruct->length = sizeof(tANI_U32);
1161 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1162 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1163 != eSIR_SUCCESS)
1164 {
1165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1166 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1167 goto handle_failure;
1168 }
1169 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1170 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001171 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1172 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1173 tlvStruct->length = sizeof(tANI_U32);
1174 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1175 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1176 != eSIR_SUCCESS)
1177 {
1178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1179 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1180 goto handle_failure;
1181 }
1182 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1183 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001184 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1185 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1186 tlvStruct->length = sizeof(tANI_U32);
1187 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1188 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1189 != eSIR_SUCCESS)
1190 {
1191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1192 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1193 goto handle_failure;
1194 }
1195 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1196 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1198 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1199 tlvStruct->length = sizeof(tANI_U32);
1200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1201 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1202 != eSIR_SUCCESS)
1203 {
1204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1205 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1206 goto handle_failure;
1207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1211 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1215 != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1219 goto handle_failure;
1220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1222 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1224 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1225 tlvStruct->length = sizeof(tANI_U32);
1226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1227 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1228 != eSIR_SUCCESS)
1229 {
1230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1231 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1232 goto handle_failure;
1233 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1235 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001236 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1237 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1238 * into FW, so the parameters are added here.
1239 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1241 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1242 tlvStruct->length = sizeof(tANI_U32);
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1248 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1249 tlvStruct->length = sizeof(tANI_U32);
1250 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1251 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1253 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1255 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1256 tlvStruct->length = sizeof(tANI_U32);
1257 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1258 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001261 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1262 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1266 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1267 + sizeof(tHalCfg) + tlvStruct->length) ;
1268
1269 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1270 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1271 tlvStruct->length = sizeof(tANI_U32);
1272 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1273 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length) ;
1276
1277 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1278 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1279 tlvStruct->length = sizeof(tANI_U32);
1280 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1281 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1282 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1283 + sizeof(tHalCfg) + tlvStruct->length) ;
1284
1285 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
1292
1293 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1294 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1298 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1299 + sizeof(tHalCfg) + tlvStruct->length) ;
1300
1301 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1302 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1306 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1307 + sizeof(tHalCfg) + tlvStruct->length) ;
1308
1309 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1310 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1314 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1315 + sizeof(tHalCfg) + tlvStruct->length) ;
1316
1317 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1318 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
1324
1325 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1326 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1327 tlvStruct->length = sizeof(tANI_U32);
1328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1329 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
1332
1333 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1334 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1335 tlvStruct->length = sizeof(tANI_U32);
1336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1337 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
1340
1341 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1342 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
1348
1349 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
1356
1357 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1358 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1359 tlvStruct->length = sizeof(tANI_U32);
1360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1361 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1362 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1363 + sizeof(tHalCfg) + tlvStruct->length) ;
1364
1365 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001366 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1370 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1371 wcnssCompiledApiVersion.minor,
1372 wcnssCompiledApiVersion.version,
1373 wcnssCompiledApiVersion.revision);
1374 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1375 + sizeof(tHalCfg) + tlvStruct->length) ;
1376
Jeff Johnsond13512a2012-07-17 11:42:19 -07001377 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1378 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1379 tlvStruct->length = sizeof(tANI_U32);
1380 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1381 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1382 configDataValue ) != eSIR_SUCCESS)
1383 {
1384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1385 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1386 goto handle_failure;
1387 }
1388
1389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
1391 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1392 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1393 tlvStruct->length = sizeof(tANI_U32);
1394 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1395 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1396 configDataValue ) != eSIR_SUCCESS)
1397 {
1398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1399 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1400 goto handle_failure;
1401 }
1402
1403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
1405
1406 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1407 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1408 tlvStruct->length = sizeof(tANI_U32);
1409 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1410 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1411 != eSIR_SUCCESS)
1412 {
1413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1414 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1415 goto handle_failure;
1416 }
1417
1418 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1419 + sizeof(tHalCfg) + tlvStruct->length) ;
1420
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001421 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1422 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1426 != eSIR_SUCCESS)
1427 {
1428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1429 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1430 goto handle_failure;
1431 }
1432
1433 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1434 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001435#ifdef WLAN_SOFTAP_VSTA_FEATURE
1436 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1437 tlvStruct->length = sizeof(tANI_U32);
1438 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1439 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1440 != eSIR_SUCCESS)
1441 {
1442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1443 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1444 goto handle_failure;
1445 }
1446
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449#endif
1450
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001451 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1452 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455
1456 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1457 != eSIR_SUCCESS)
1458 {
1459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1460 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1461 goto handle_failure;
1462 }
1463
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301467/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1468 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1472 configDataValue ) != eSIR_SUCCESS)
1473 {
1474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1475 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1476 goto handle_failure;
1477 }
1478
1479 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1480 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301481#ifdef FEATURE_WLAN_TDLS
1482 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1483 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1484 tlvStruct->length = sizeof(tANI_U32);
1485 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1486 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1487 configDataValue ) != eSIR_SUCCESS)
1488 {
1489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1490 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1491 goto handle_failure;
1492 }
1493 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1494 + sizeof(tHalCfg) + tlvStruct->length) ;
1495
1496 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1497 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1498 tlvStruct->length = sizeof(tANI_U32);
1499 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1500 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1501 configDataValue ) != eSIR_SUCCESS)
1502 {
1503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1504 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1505 goto handle_failure;
1506 }
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
1509 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1510 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1511 tlvStruct->length = sizeof(tANI_U32);
1512 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1513 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1514 configDataValue ) != eSIR_SUCCESS)
1515 {
1516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1517 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1518 goto handle_failure;
1519 }
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1523 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1524 tlvStruct->length = sizeof(tANI_U32);
1525 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1526 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1527 configDataValue ) != eSIR_SUCCESS)
1528 {
1529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1530 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1531 goto handle_failure;
1532 }
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
1535#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301536
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001537 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1538 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1539 tlvStruct->length = sizeof(tANI_U32);
1540 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1541 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1542 configDataValue ) != eSIR_SUCCESS)
1543 {
1544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1545 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1546 goto handle_failure;
1547 }
1548
1549 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1550 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001551 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001552#ifdef WLAN_DEBUG
1553 {
1554 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001555 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1556 "****** Dumping CFG TLV ***** ");
1557 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1558 {
1559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1560 "%02x %02x %02x %02x %02x %02x %02x %02x",
1561 tlvStructStart[i],
1562 tlvStructStart[i+1],
1563 tlvStructStart[i+2],
1564 tlvStructStart[i+3],
1565 tlvStructStart[i+4],
1566 tlvStructStart[i+5],
1567 tlvStructStart[i+6],
1568 tlvStructStart[i+7]);
1569 }
1570 /* Dump the bytes in the last line*/
1571 for (; i < wdiStartParams->usConfigBufferLen; i++)
1572 {
1573 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1574 "%02x ",tlvStructStart[i]);
1575 }
1576 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1577 "**************************** ");
1578 }
1579#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001580 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001581handle_failure:
1582 vos_mem_free(configParam);
1583 return VOS_STATUS_E_FAILURE;
1584}
Jeff Johnson295189b2012-06-20 16:38:30 -07001585/*
1586 * FUNCTION: WDA_wdiCompleteCB
1587 * call the voss call back function
1588 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001589void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001590{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001591 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1592 tWDA_CbContext *wdaContext;
1593
1594 if(NULL == pWdaParams)
1595 {
1596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001597 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001598 VOS_ASSERT(0) ;
1599 return ;
1600 }
1601
1602 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1603
Jeff Johnson295189b2012-06-20 16:38:30 -07001604 if (NULL == wdaContext)
1605 {
1606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001607 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001608 return ;
1609 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001610
Jeff Johnson295189b2012-06-20 16:38:30 -07001611 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001612 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001613 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001615 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001616 vos_mem_free(pWdaParams);
1617
Jeff Johnson295189b2012-06-20 16:38:30 -07001618 if(WDI_STATUS_SUCCESS != status)
1619 {
1620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1621 "WDI stop callback returned failure" );
1622 VOS_ASSERT(0) ;
1623 }
1624 else
1625 {
1626 wdaContext->wdaState = WDA_STOP_STATE;
1627 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001628
Jeff Johnson295189b2012-06-20 16:38:30 -07001629 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001630 vos_WDAComplete_cback(wdaContext->pVosContext);
1631
Jeff Johnson295189b2012-06-20 16:38:30 -07001632 return ;
1633}
Jeff Johnson295189b2012-06-20 16:38:30 -07001634/*
1635 * FUNCTION: WDA_stop
1636 * call WDI_stop
1637 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001638VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1639{
1640 WDI_Status wdiStatus;
1641 VOS_STATUS status = VOS_STATUS_SUCCESS;
1642 WDI_StopReqParamsType *wdiStopReq;
1643 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001644 tWDA_ReqParams *pWdaParams ;
1645
Jeff Johnson295189b2012-06-20 16:38:30 -07001646 if (NULL == pWDA)
1647 {
1648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001649 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001650 VOS_ASSERT(0);
1651 return VOS_STATUS_E_FAILURE;
1652 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001653 if (pWDA->wdiFailed == true)
1654 {
1655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001656 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001657 return VOS_STATUS_E_ALREADY;
1658 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001659
Jeff Johnson295189b2012-06-20 16:38:30 -07001660 /* FTM mode stay START_STATE */
1661 if( (WDA_READY_STATE != pWDA->wdaState) &&
1662 (WDA_INIT_STATE != pWDA->wdaState) &&
1663 (WDA_START_STATE != pWDA->wdaState) )
1664 {
1665 VOS_ASSERT(0);
1666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001667 wdiStopReq = (WDI_StopReqParamsType *)
1668 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1669 if(NULL == wdiStopReq)
1670 {
1671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001672 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001673 VOS_ASSERT(0);
1674 return VOS_STATUS_E_NOMEM;
1675 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001676
Jeff Johnson295189b2012-06-20 16:38:30 -07001677 wdiStopReq->wdiStopReason = reason;
1678 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001679
1680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1681 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001682 {
1683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001685 VOS_ASSERT(0);
1686 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001687 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001688 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001689
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001690 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1691 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001692 {
1693 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001694 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001695 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001696
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001697 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1698 pWdaParams->wdaMsgParam = NULL;
1699 pWdaParams->pWdaContext = pWDA;
1700
Jeff Johnson295189b2012-06-20 16:38:30 -07001701 /* call WDI stop */
1702 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001703 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1704
Jeff Johnson295189b2012-06-20 16:38:30 -07001705 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1706 {
1707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1708 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1710 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001711 status = VOS_STATUS_E_FAILURE;
1712 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001713 return status;
1714}
Jeff Johnson295189b2012-06-20 16:38:30 -07001715/*
1716 * FUNCTION: WDA_close
1717 * call WDI_close and free the WDA context
1718 */
1719VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1720{
Jeff Johnson43971f52012-07-17 12:26:56 -07001721 VOS_STATUS status = VOS_STATUS_SUCCESS;
1722 WDI_Status wstatus;
1723 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001724 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 if (NULL == wdaContext)
1726 {
1727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001728 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001729 return VOS_STATUS_E_FAILURE;
1730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001731 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1732 (WDA_STOP_STATE != wdaContext->wdaState))
1733 {
1734 VOS_ASSERT(0);
1735 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001736 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001737 wstatus = WDI_Close();
1738 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001739 {
1740 status = VOS_STATUS_E_FAILURE;
1741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001742 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001743 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001744 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1745 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001746 {
1747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1748 "WDI Sync Event destroy failed - status = %d\n", status);
1749 status = VOS_STATUS_E_FAILURE;
1750 }
1751
Jeff Johnson43971f52012-07-17 12:26:56 -07001752 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001753 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001754 {
1755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1756 "VOS Event destroy failed - status = %d\n", status);
1757 status = VOS_STATUS_E_FAILURE;
1758 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001759 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001760 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001761 {
1762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1763 "VOS Event destroy failed - status = %d\n", status);
1764 status = VOS_STATUS_E_FAILURE;
1765 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001766 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001767 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001768 {
1769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1770 "VOS Event destroy failed - status = %d\n", status);
1771 status = VOS_STATUS_E_FAILURE;
1772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001773 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001774 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001775 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001776 {
1777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1778 "error in WDA close " );
1779 status = VOS_STATUS_E_FAILURE;
1780 }
1781 return status;
1782}
Jeff Johnson295189b2012-06-20 16:38:30 -07001783/*
1784 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1785 * returns 1 if the compiled version is greater than or equal to the input version
1786 */
1787
1788uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1789{
1790 VOS_STATUS status = VOS_STATUS_SUCCESS;
1791 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1792 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001793 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001794 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1795 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1796 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1797 (compiledVersion.revision >= revision)))
1798 return 1;
1799 else
1800 return 0;
1801}
Jeff Johnson295189b2012-06-20 16:38:30 -07001802/*
1803 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1804 * returns 1 if the compiled version is greater than or equal to the input version
1805 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001806uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1807{
1808 VOS_STATUS status = VOS_STATUS_SUCCESS;
1809 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1810 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001811 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001812 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1813 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1814 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1815 (reportedVersion.revision >= revision)))
1816 return 1;
1817 else
1818 return 0;
1819}
Jeff Johnson295189b2012-06-20 16:38:30 -07001820/*
1821 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1822 * Returns the version of the WCNSS WLAN API with which the HOST
1823 * device driver was compiled
1824 */
1825VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1826 tSirVersionType *pVersion)
1827{
1828 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001829 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001830 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001831 if ((NULL == pvosGCtx) || (NULL == pVersion))
1832 {
1833 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001834 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001835 VOS_ASSERT(0);
1836 return VOS_STATUS_E_FAILURE;
1837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001838 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1839 if (NULL == pWDA )
1840 {
1841 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001842 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001843 VOS_ASSERT(0);
1844 return VOS_STATUS_E_FAILURE;
1845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001846 *pVersion = pWDA->wcnssWlanCompiledVersion;
1847 return VOS_STATUS_SUCCESS;
1848}
Jeff Johnson295189b2012-06-20 16:38:30 -07001849/*
1850 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1851 * Returns the version of the WCNSS WLAN API with which the WCNSS
1852 * device driver was compiled
1853 */
1854VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1855 tSirVersionType *pVersion)
1856{
1857 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001858 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001859 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001860 if ((NULL == pvosGCtx) || (NULL == pVersion))
1861 {
1862 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001863 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001864 VOS_ASSERT(0);
1865 return VOS_STATUS_E_FAILURE;
1866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001867 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1868 if (NULL == pWDA )
1869 {
1870 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001871 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001872 VOS_ASSERT(0);
1873 return VOS_STATUS_E_FAILURE;
1874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001875 *pVersion = pWDA->wcnssWlanReportedVersion;
1876 return VOS_STATUS_SUCCESS;
1877}
Jeff Johnson295189b2012-06-20 16:38:30 -07001878/*
1879 * FUNCTION: WDA_GetWcnssSoftwareVersion
1880 * Returns the WCNSS Software version string
1881 */
1882VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1883 tANI_U8 *pVersion,
1884 tANI_U32 versionBufferSize)
1885{
1886 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001888 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 if ((NULL == pvosGCtx) || (NULL == pVersion))
1890 {
1891 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001892 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001893 VOS_ASSERT(0);
1894 return VOS_STATUS_E_FAILURE;
1895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001896 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1897 if (NULL == pWDA )
1898 {
1899 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001900 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001901 VOS_ASSERT(0);
1902 return VOS_STATUS_E_FAILURE;
1903 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001904 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1905 return VOS_STATUS_SUCCESS;
1906}
Jeff Johnson295189b2012-06-20 16:38:30 -07001907/*
1908 * FUNCTION: WDA_GetWcnssHardwareVersion
1909 * Returns the WCNSS Hardware version string
1910 */
1911VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1912 tANI_U8 *pVersion,
1913 tANI_U32 versionBufferSize)
1914{
1915 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001916 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001917 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001918 if ((NULL == pvosGCtx) || (NULL == pVersion))
1919 {
1920 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001921 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001922 VOS_ASSERT(0);
1923 return VOS_STATUS_E_FAILURE;
1924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001925 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1926 if (NULL == pWDA )
1927 {
1928 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001929 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001930 VOS_ASSERT(0);
1931 return VOS_STATUS_E_FAILURE;
1932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001933 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1934 return VOS_STATUS_SUCCESS;
1935}
Jeff Johnson295189b2012-06-20 16:38:30 -07001936/*
1937 * FUNCTION: WDA_WniCfgDnld
1938 * Trigger CFG Download
1939 */
1940VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1941{
1942 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001944 v_VOID_t *pFileImage = NULL;
1945 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001946 v_VOID_t *pCfgBinary = NULL;
1947 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001948 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07001949
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 if (NULL == pMac )
1951 {
1952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001953 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001954 VOS_ASSERT(0);
1955 return VOS_STATUS_E_FAILURE;
1956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001957 /* get the number of bytes in the CFG Binary... */
1958 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1959 &cbFileImageSize );
1960 if ( VOS_STATUS_E_NOMEM != vosStatus )
1961 {
1962 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1963 "Error obtaining binary size" );
1964 goto fail;
1965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001966 // malloc a buffer to read in the Configuration binary file.
1967 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001968 if ( NULL == pFileImage )
1969 {
1970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1971 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1972 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001973 vosStatus = VOS_STATUS_E_NOMEM;
1974 goto fail;
1975 }
1976
1977 /* Get the entire CFG file image... */
1978 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1979 &cbFileImageSize );
1980 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1981 {
1982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1983 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1984 cbFileImageSize );
1985 goto fail;
1986 }
1987
1988 /*
1989 * Validate the binary image. This function will return a pointer
1990 * and length where the CFG binary is located within the binary image file.
1991 */
1992 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1993 &pCfgBinary, &cbCfgBinarySize );
1994 if ( VOS_FALSE == bStatus )
1995 {
1996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1997 "Error: Cannot find STA CFG in binary image file" );
1998 vosStatus = VOS_STATUS_E_FAILURE;
1999 goto fail;
2000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002001 /*
2002 * TODO: call the config download function
2003 * for now calling the existing cfg download API
2004 */
2005 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002006 vosStatus = VOS_STATUS_SUCCESS;
2007
2008 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002009
2010fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002011 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002012 return vosStatus;
2013}
Jeff Johnson295189b2012-06-20 16:38:30 -07002014/* -----------------------------------------------------------------
2015 * WDI interface
2016 * -----------------------------------------------------------------
2017 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002018/*
2019 * FUNCTION: WDA_suspendDataTxCallback
2020 * call back function called from TL after suspend Transmission
2021 */
2022VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2023 v_U8_t* ucSTAId,
2024 VOS_STATUS vosStatus)
2025{
2026 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002028 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002029 if (NULL == pWDA )
2030 {
2031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002032 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002033 VOS_ASSERT(0);
2034 return VOS_STATUS_E_FAILURE;
2035 }
2036 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2037 {
2038 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2039 }
2040 else
2041 {
2042 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 /* Trigger the event to bring the WDA TL suspend function to come
2045 * out of wait*/
2046 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2047 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2048 {
2049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2050 "NEW VOS Event Set failed - status = %d \n", vosStatus);
2051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002052 /* If TL suspended had timedout before this callback was called, resume back
2053 * TL.*/
2054 if (pWDA->txSuspendTimedOut)
2055 {
2056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2057 "Late TLSuspendCallback, resuming TL back again\n");
2058 WDA_ResumeDataTx(pWDA);
2059 pWDA->txSuspendTimedOut = FALSE;
2060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002061 return VOS_STATUS_SUCCESS;
2062}
Jeff Johnson295189b2012-06-20 16:38:30 -07002063/*
2064 * FUNCTION: WDA_suspendDataTx
2065 * Update TL to suspend the data Transmission
2066 */
2067VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2068{
2069 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2070 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002071
2072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002073 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002074 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002075 if (pWDA->txSuspendTimedOut)
2076 {
2077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2078 "TL suspend timedout previously, CB not called yet\n");
2079 return status;
2080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 /* Reset the event to be not signalled */
2082 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2083 if(!VOS_IS_STATUS_SUCCESS(status))
2084 {
2085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2086 "VOS Event reset failed - status = %d\n",status);
2087 return VOS_STATUS_E_FAILURE;
2088 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002089 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002090 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002091 WDA_SuspendDataTxCallback);
2092 if(status != VOS_STATUS_SUCCESS)
2093 {
2094 return status;
2095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 /* Wait for the event to be set by the TL, to get the response of
2097 * suspending the TX queues, this event should be set by the Callback
2098 * function called by TL*/
2099 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2100 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2101 if(!VOS_IS_STATUS_SUCCESS(status))
2102 {
2103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2104 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002105 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 /* Set this flag to true when TL suspend times out, so that when TL
2107 * suspend eventually happens and calls the callback, TL can be resumed
2108 * right away by looking at this flag when true.*/
2109 pWDA->txSuspendTimedOut = TRUE;
2110 }
2111 else
2112 {
2113 pWDA->txSuspendTimedOut = FALSE;
2114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2116 {
2117 status = VOS_STATUS_SUCCESS;
2118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002119 return status;
2120}
Jeff Johnson295189b2012-06-20 16:38:30 -07002121/*
2122 * FUNCTION: WDA_resumeDataTx
2123 * Update TL to resume the data Transmission
2124 */
2125VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2126{
2127 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002128
2129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002130 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002131
2132 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 return status;
2134}
Jeff Johnson295189b2012-06-20 16:38:30 -07002135/*
2136 * FUNCTION: WDA_InitScanReqCallback
2137 * Trigger Init SCAN callback
2138 */
2139void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2140{
2141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2142 tWDA_CbContext *pWDA;
2143 tInitScanParams *pWDA_ScanParam ;
2144 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002146 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002147 if(NULL == pWdaParams)
2148 {
2149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002150 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002151 VOS_ASSERT(0) ;
2152 return ;
2153 }
2154 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2155 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002156 if(NULL == pWDA_ScanParam)
2157 {
2158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002159 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002160 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2162 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002163 return ;
2164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002165 if(WDI_STATUS_SUCCESS != wdiStatus)
2166 {
2167 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 if(VOS_STATUS_SUCCESS != status)
2169 {
2170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002171 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002172 }
2173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002174 /* free WDI command buffer */
2175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002177
Jeff Johnson295189b2012-06-20 16:38:30 -07002178
2179 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002180 /* without converting the Status to Failure or Success Just
2181 pass the same status to lim */
2182 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002183 /* send SCAN RSP message back to PE */
2184 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 return ;
2186}
2187
2188/*
2189 * FUNCTION: WDA_ProcessInitScanReq
2190 * Trigger Init SCAN in DAL
2191 */
2192VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2193 tInitScanParams *initScanParams)
2194{
2195 WDI_Status status = WDI_STATUS_SUCCESS ;
2196 WDI_InitScanReqParamsType *wdiInitScanParam =
2197 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2198 sizeof(WDI_InitScanReqParamsType)) ;
2199 tWDA_ReqParams *pWdaParams;
2200 tANI_U8 i = 0;
2201
2202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002203 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 if(NULL == wdiInitScanParam)
2205 {
2206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002207 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002208 VOS_ASSERT(0);
2209 return VOS_STATUS_E_NOMEM;
2210 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002211 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2212 if(NULL == pWdaParams)
2213 {
2214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002215 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 VOS_ASSERT(0);
2217 vos_mem_free(wdiInitScanParam);
2218 return VOS_STATUS_E_NOMEM;
2219 }
2220
2221 /* Copy init Scan params to WDI structure */
2222 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2223 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2224 sizeof(tSirMacAddr)) ;
2225 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2226 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2227 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2229 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002230 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2231 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2233 {
2234 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2235 initScanParams->scanEntry.bssIdx[i] ;
2236 }
2237
2238 /* if Frame length, copy macMgmtHdr or WDI structure */
2239 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2240 {
2241 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2242 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2243 }
2244 wdiInitScanParam->wdiReqStatusCB = NULL ;
2245
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 /* Store Init Req pointer, as this will be used for response */
2247 pWdaParams->pWdaContext = pWDA;
2248 pWdaParams->wdaMsgParam = initScanParams;
2249 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 /* first try to suspend TX */
2251 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002252 if(WDI_STATUS_SUCCESS != status)
2253 {
2254 goto handleWdiFailure;
2255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002256 /* call DAL API to pass init scan request to DAL */
2257 status = WDI_InitScanReq(wdiInitScanParam,
2258 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002259 if(IS_WDI_STATUS_FAILURE(status))
2260 {
2261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2262 "error in WDA Init Scan, Resume Tx " );
2263 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 VOS_ASSERT(0) ;
2265
2266 goto handleWdiFailure;
2267 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002268 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002269handleWdiFailure:
2270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2271 "Failure in WDI Api, free all the memory " );
2272 /* free WDI command buffer */
2273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2274 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002275 /* send Failure to PE */
2276 initScanParams->status = eSIR_FAILURE ;
2277 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 return CONVERT_WDI2VOS_STATUS(status) ;
2279}
2280
Jeff Johnson295189b2012-06-20 16:38:30 -07002281/*
2282 * FUNCTION: WDA_StartScanReqCallback
2283 * send Start SCAN RSP back to PE
2284 */
2285void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2286 void* pUserData)
2287{
2288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2289 tWDA_CbContext *pWDA;
2290 tStartScanParams *pWDA_ScanParam;
2291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002292 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 if(NULL == pWdaParams)
2294 {
2295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002296 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 VOS_ASSERT(0) ;
2298 return ;
2299 }
2300 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2301 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 if(NULL == pWDA_ScanParam)
2303 {
2304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002305 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002306 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002307 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 return ;
2309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2311 {
2312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002313 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002315 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 return ;
2317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2319 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002320
Jeff Johnson295189b2012-06-20 16:38:30 -07002321
2322 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002323 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002324 /* send SCAN RSP message back to PE */
2325 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 return ;
2327}
2328
Jeff Johnson295189b2012-06-20 16:38:30 -07002329/*
2330 * FUNCTION: WDA_ProcessStartScanReq
2331 * Trigger start SCAN in WDI
2332 */
2333VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2334 tStartScanParams *startScanParams)
2335{
2336 WDI_Status status = WDI_STATUS_SUCCESS;
2337 WDI_StartScanReqParamsType *wdiStartScanParams =
2338 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2339 sizeof(WDI_StartScanReqParamsType)) ;
2340 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002342 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 if(NULL == wdiStartScanParams)
2344 {
2345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002347 VOS_ASSERT(0);
2348 return VOS_STATUS_E_NOMEM;
2349 }
2350 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2351 if(NULL == pWdaParams)
2352 {
2353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002354 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002355 VOS_ASSERT(0);
2356 vos_mem_free(wdiStartScanParams);
2357 return VOS_STATUS_E_NOMEM;
2358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 /* Copy init Scan params to WDI structure */
2360 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2361 wdiStartScanParams->wdiReqStatusCB = NULL ;
2362
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 /* Store Init Req pointer, as this will be used for response */
2364 /* store Params pass it to WDI */
2365 pWdaParams->pWdaContext = pWDA;
2366 pWdaParams->wdaMsgParam = startScanParams;
2367 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 /* call DAL API to pass init scan request to DAL */
2369 status = WDI_StartScanReq(wdiStartScanParams,
2370 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 /* failure returned by WDI API */
2372 if(IS_WDI_STATUS_FAILURE(status))
2373 {
2374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2375 "Failure in Start Scan WDI API, free all the memory "
2376 "It should be due to previous abort scan." );
2377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2378 vos_mem_free(pWdaParams) ;
2379 startScanParams->status = eSIR_FAILURE ;
2380 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2381 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002382 return CONVERT_WDI2VOS_STATUS(status) ;
2383}
Jeff Johnson295189b2012-06-20 16:38:30 -07002384/*
2385 * FUNCTION: WDA_EndScanReqCallback
2386 * END SCAN callback
2387 */
2388void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2389{
2390 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2391 tWDA_CbContext *pWDA;
2392 tEndScanParams *endScanParam;
2393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002394 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 if(NULL == pWdaParams)
2396 {
2397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002398 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 VOS_ASSERT(0) ;
2400 return ;
2401 }
2402 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2403 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 if(NULL == endScanParam)
2405 {
2406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002407 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2410 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002411 return ;
2412 }
2413
2414 /* Free WDI command buffer */
2415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2416 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002418 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002419 /* send response back to PE */
2420 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2421 return ;
2422}
2423
Jeff Johnson295189b2012-06-20 16:38:30 -07002424/*
2425 * FUNCTION: WDA_ProcessEndScanReq
2426 * Trigger END SCAN in WDI
2427 */
2428VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2429 tEndScanParams *endScanParams)
2430{
2431 WDI_Status status = WDI_STATUS_SUCCESS;
2432 WDI_EndScanReqParamsType *wdiEndScanParams =
2433 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2434 sizeof(WDI_EndScanReqParamsType)) ;
2435 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002437 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 if(NULL == wdiEndScanParams)
2439 {
2440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002441 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002442 VOS_ASSERT(0);
2443 return VOS_STATUS_E_NOMEM;
2444 }
2445 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2446 if(NULL == pWdaParams)
2447 {
2448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002449 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 VOS_ASSERT(0);
2451 vos_mem_free(wdiEndScanParams);
2452 return VOS_STATUS_E_NOMEM;
2453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 /* Copy init Scan params to WDI structure */
2455 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2456 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002457 /* Store Init Req pointer, as this will be used for response */
2458 /* store Params pass it to WDI */
2459 pWdaParams->pWdaContext = pWDA;
2460 pWdaParams->wdaMsgParam = endScanParams;
2461 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002462 /* call DAL API to pass init scan request to DAL */
2463 status = WDI_EndScanReq(wdiEndScanParams,
2464 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002465 if(IS_WDI_STATUS_FAILURE(status))
2466 {
2467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2468 "Failure in End Scan WDI API, free all the memory "
2469 "It should be due to previous abort scan." );
2470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2471 vos_mem_free(pWdaParams) ;
2472 endScanParams->status = eSIR_FAILURE ;
2473 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 return CONVERT_WDI2VOS_STATUS(status) ;
2476}
Jeff Johnson295189b2012-06-20 16:38:30 -07002477/*
2478 * FUNCTION: WDA_FinishScanReqCallback
2479 * Trigger Finish SCAN callback
2480 */
2481void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2482{
2483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2484 tWDA_CbContext *pWDA;
2485 tFinishScanParams *finishScanParam;
2486 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002488 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 if(NULL == pWdaParams)
2490 {
2491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002492 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 VOS_ASSERT(0) ;
2494 return ;
2495 }
2496
2497 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2498 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 if(NULL == finishScanParam)
2500 {
2501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002502 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002503 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2505 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 return ;
2507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2509 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 /*
2511 * Now Resume TX, if we reached here means, TX is already suspended, we
2512 * have to resume it unconditionaly
2513 */
2514 status = WDA_ResumeDataTx(pWDA) ;
2515
2516 if(VOS_STATUS_SUCCESS != status)
2517 {
2518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002519 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002521 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2523 return ;
2524}
Jeff Johnson295189b2012-06-20 16:38:30 -07002525/*
2526 * FUNCTION: WDA_ProcessFinshScanReq
2527 * Trigger Finish SCAN in WDI
2528 */
2529VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2530 tFinishScanParams *finishScanParams)
2531{
2532 WDI_Status status = WDI_STATUS_SUCCESS;
2533 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2534 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2535 sizeof(WDI_FinishScanReqParamsType)) ;
2536 tWDA_ReqParams *pWdaParams ;
2537 tANI_U8 i = 0;
2538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002539 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 if(NULL == wdiFinishScanParams)
2541 {
2542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002543 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 VOS_ASSERT(0);
2545 return VOS_STATUS_E_NOMEM;
2546 }
2547 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2548 if(NULL == pWdaParams)
2549 {
2550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002551 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 VOS_ASSERT(0);
2553 vos_mem_free(wdiFinishScanParams);
2554 return VOS_STATUS_E_NOMEM;
2555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002556 /* Copy init Scan params to WDI structure */
2557 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2558 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2559 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002560 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2561 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2562 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2563 finishScanParams->frameLength ;
2564 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2565 finishScanParams->currentOperChannel ;
2566 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2567 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2568 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2570 {
2571 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2572 finishScanParams->scanEntry.bssIdx[i] ;
2573 }
2574
2575
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 /* if Frame length, copy macMgmtHdr ro WDI structure */
2577 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2578 {
2579 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2580 &finishScanParams->macMgmtHdr,
2581 sizeof(WDI_MacMgmtHdr)) ;
2582 }
2583 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002584 /* Store Init Req pointer, as this will be used for response */
2585 /* store Params pass it to WDI */
2586 pWdaParams->pWdaContext = pWDA;
2587 pWdaParams->wdaMsgParam = finishScanParams;
2588 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 /* call DAL API to pass init scan request to DAL */
2590 status = WDI_FinishScanReq(wdiFinishScanParams,
2591 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002592
Jeff Johnson295189b2012-06-20 16:38:30 -07002593
2594 /*
2595 * WDI API returns failure..
2596 */
2597 if(IS_WDI_STATUS_FAILURE( status))
2598 {
2599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2600 "Failure in Finish Scan WDI API, free all the memory " );
2601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2602 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 finishScanParams->status = eSIR_FAILURE ;
2604 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 return CONVERT_WDI2VOS_STATUS(status) ;
2607}
Jeff Johnson295189b2012-06-20 16:38:30 -07002608/*---------------------------------------------------------------------
2609 * ASSOC API's
2610 *---------------------------------------------------------------------
2611 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002612/*
2613 * FUNCTION: WDA_JoinReqCallback
2614 * Trigger Init SCAN callback
2615 */
2616void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2617{
2618 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2619 tWDA_CbContext *pWDA;
2620 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002622 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002623 if(NULL == pWdaParams)
2624 {
2625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002626 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 VOS_ASSERT(0) ;
2628 return ;
2629 }
2630 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2631 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2633 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 /* reset macBSSID */
2635 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 /* reset macSTASelf */
2637 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002638 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 return ;
2641}
Jeff Johnson295189b2012-06-20 16:38:30 -07002642/*
2643 * FUNCTION: WDA_ProcessJoinReq
2644 * Trigger Join REQ in WDI
2645 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002646VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2647 tSwitchChannelParams* joinReqParam)
2648{
2649 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 WDI_JoinReqParamsType *wdiJoinReqParam =
2651 (WDI_JoinReqParamsType *)vos_mem_malloc(
2652 sizeof(WDI_JoinReqParamsType)) ;
2653 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002655 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 if(NULL == wdiJoinReqParam)
2657 {
2658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002659 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002661 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 return VOS_STATUS_E_NOMEM;
2663 }
2664 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2665 if(NULL == pWdaParams)
2666 {
2667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002668 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 VOS_ASSERT(0);
2670 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002671 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002672 return VOS_STATUS_E_NOMEM;
2673 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002674
2675 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2676 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2677 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2678 {
2679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2680 "%s: received join request when BSSID or self-STA is NULL "
2681 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002682 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002683 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2684 VOS_ASSERT(0);
2685 vos_mem_free(wdiJoinReqParam);
2686 vos_mem_free(pWdaParams);
2687 joinReqParam->status = eSIR_FAILURE ;
2688 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2689 return VOS_STATUS_E_INVAL;
2690 }
2691
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 /* copy the BSSID for pWDA */
2693 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2694 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002695 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2696 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2698 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002699#ifdef WLAN_FEATURE_VOWIFI
2700 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2701 joinReqParam->maxTxPower ;
2702#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2704 joinReqParam->localPowerConstraint ;
2705#endif
2706 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2707 joinReqParam->secondaryChannelOffset ;
2708 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2709
2710 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002711 /* Store Init Req pointer, as this will be used for response */
2712 /* store Params pass it to WDI */
2713 pWdaParams->pWdaContext = pWDA;
2714 pWdaParams->wdaMsgParam = joinReqParam;
2715 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 status = WDI_JoinReq(wdiJoinReqParam,
2717 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 if(IS_WDI_STATUS_FAILURE(status))
2719 {
2720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2721 "Failure in Join WDI API, free all the memory " );
2722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2723 vos_mem_free(pWdaParams) ;
2724 joinReqParam->status = eSIR_FAILURE ;
2725 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2726 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 return CONVERT_WDI2VOS_STATUS(status) ;
2728}
Jeff Johnson295189b2012-06-20 16:38:30 -07002729/*
2730 * FUNCTION: WDA_SwitchChannelReqCallback
2731 * send Switch channel RSP back to PE
2732 */
2733void WDA_SwitchChannelReqCallback(
2734 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2735{
2736 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2737 tWDA_CbContext *pWDA;
2738 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002740 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002741 if(NULL == pWdaParams)
2742 {
2743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002744 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 VOS_ASSERT(0) ;
2746 return ;
2747 }
2748 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2749 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2750
2751#ifdef WLAN_FEATURE_VOWIFI
2752 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2753#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2755 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002757 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002758 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 return ;
2760}
Jeff Johnson295189b2012-06-20 16:38:30 -07002761/*
2762 * FUNCTION: WDA_ProcessChannelSwitchReq
2763 * Request to WDI to switch channel REQ params.
2764 */
2765VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2766 tSwitchChannelParams *pSwitchChanParams)
2767{
2768 WDI_Status status = WDI_STATUS_SUCCESS ;
2769 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2770 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2771 sizeof(WDI_SwitchChReqParamsType)) ;
2772 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002774 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 if(NULL == wdiSwitchChanParam)
2776 {
2777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 VOS_ASSERT(0);
2780 return VOS_STATUS_E_NOMEM;
2781 }
2782 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2783 if(NULL == pWdaParams)
2784 {
2785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002787 VOS_ASSERT(0);
2788 vos_mem_free(wdiSwitchChanParam);
2789 return VOS_STATUS_E_NOMEM;
2790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2792#ifndef WLAN_FEATURE_VOWIFI
2793 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2794 pSwitchChanParams->localPowerConstraint;
2795#endif
2796 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2797 pSwitchChanParams->secondaryChannelOffset;
2798 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 /* Store req pointer, as this will be used for response */
2800 /* store Params pass it to WDI */
2801 pWdaParams->pWdaContext = pWDA;
2802 pWdaParams->wdaMsgParam = pSwitchChanParams;
2803 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002804#ifdef WLAN_FEATURE_VOWIFI
2805 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2806 = pSwitchChanParams->maxTxPower;
2807 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2808 pSwitchChanParams ->selfStaMacAddr,
2809 sizeof(tSirMacAddr));
2810#endif
2811 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2812 pSwitchChanParams->bssId,
2813 sizeof(tSirMacAddr));
2814
2815 status = WDI_SwitchChReq(wdiSwitchChanParam,
2816 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 if(IS_WDI_STATUS_FAILURE(status))
2818 {
2819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2820 "Failure in process channel switch Req WDI API, free all the memory " );
2821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2822 vos_mem_free(pWdaParams) ;
2823 pSwitchChanParams->status = eSIR_FAILURE ;
2824 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2825 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002826 return CONVERT_WDI2VOS_STATUS(status) ;
2827}
Jeff Johnson295189b2012-06-20 16:38:30 -07002828/*
2829 * FUNCTION: WDA_ConfigBssReqCallback
2830 * config BSS Req Callback, called by WDI
2831 */
2832void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2833 ,void* pUserData)
2834{
2835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2836 tWDA_CbContext *pWDA;
2837 tAddBssParams *configBssReqParam;
2838 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002840 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 if(NULL == pWdaParams)
2842 {
2843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002844 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 VOS_ASSERT(0) ;
2846 return ;
2847 }
2848 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2849 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2850 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002851 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002852 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2854 {
2855 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2856 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2858 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2859 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2860
2861 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2862 {
2863 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2864 {
2865 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2866 staConfigBssParam->staType = STA_ENTRY_BSSID;
2867 }
2868 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2869 (staConfigBssParam->staType == STA_ENTRY_SELF))
2870 {
2871 /* This is the 1st add BSS Req for the BTAMP STA */
2872 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2873 staConfigBssParam->staType = STA_ENTRY_BSSID;
2874 }
2875 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2876 (staConfigBssParam->staType == STA_ENTRY_PEER))
2877 {
2878 /* This is the 2nd ADD BSS Request that is sent
2879 * on the BTAMP STA side. The Sta type is
2880 * set to STA_ENTRY_PEER here.*/
2881 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2882 }
2883 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2884 (staConfigBssParam->staType == STA_ENTRY_SELF))
2885 {
2886 /* statype is already set by PE.
2887 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2888 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2889 staConfigBssParam->staType = STA_ENTRY_BSSID;
2890 }
2891 else
2892 {
2893 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2894 staConfigBssParam->staType = STA_ENTRY_PEER;
2895 }
2896 }
2897 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2898 {
2899 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2900 staConfigBssParam->staType = STA_ENTRY_SELF;
2901 }
2902 else
2903 {
2904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2905 "Invalid operation mode specified");
2906 VOS_ASSERT(0);
2907 }
2908
2909 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2914 sizeof(tSirMacAddr));
2915 staConfigBssParam->txChannelWidthSet =
2916 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2918 staConfigBssParam->htCapable)
2919 {
2920 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2921 wdiConfigBssRsp->ucBSSIdx;
2922 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2923 WDA_VALID_STA_INDEX ;
2924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2926 wdiConfigBssRsp->ucBSSIdx,
2927 wdiConfigBssRsp->ucSTAIdx))
2928 {
2929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002930 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 VOS_ASSERT(0) ;
2932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2934 {
2935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002936 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 VOS_ASSERT(0) ;
2938 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002939#ifdef WLAN_FEATURE_VOWIFI
2940 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2941#endif
2942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2944 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 return ;
2947}
Jeff Johnson295189b2012-06-20 16:38:30 -07002948/*
2949 * FUNCTION: WDA_UpdateEdcaParamsForAC
2950 * Update WDI EDCA params with PE edca params
2951 */
2952void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2953 WDI_EdcaParamRecord *wdiEdcaParam,
2954 tSirMacEdcaParamRecord *macEdcaParam)
2955{
2956 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2957 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2958 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2959 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2960 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2961 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2962}
Jeff Johnson295189b2012-06-20 16:38:30 -07002963/*
2964 * FUNCTION: WDA_ProcessConfigBssReq
2965 * Configure BSS before starting Assoc with AP
2966 */
2967VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2968 tAddBssParams* configBssReqParam)
2969{
2970 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05302971 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002974 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05302975 if (NULL == configBssReqParam)
2976 {
2977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2978 "%s: configBssReqParam is NULL", __func__);
2979 return VOS_STATUS_E_INVAL;
2980 }
2981
2982 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2983 sizeof(WDI_ConfigBSSReqParamsType)) ;
2984
Jeff Johnson295189b2012-06-20 16:38:30 -07002985 if(NULL == wdiConfigBssReqParam)
2986 {
2987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 VOS_ASSERT(0);
2990 return VOS_STATUS_E_NOMEM;
2991 }
2992 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2993 if(NULL == pWdaParams)
2994 {
2995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002996 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 VOS_ASSERT(0);
2998 vos_mem_free(wdiConfigBssReqParam);
2999 return VOS_STATUS_E_NOMEM;
3000 }
Kiran4a17ebe2013-01-31 10:43:43 -08003001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3002 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003004 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3005 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003006 /* Store Init Req pointer, as this will be used for response */
3007 /* store Params pass it to WDI */
3008 pWdaParams->pWdaContext = pWDA;
3009 pWdaParams->wdaMsgParam = configBssReqParam;
3010 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3012 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 if(IS_WDI_STATUS_FAILURE(status))
3014 {
3015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3016 "Failure in Config BSS WDI API, free all the memory " );
3017 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3018 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003019 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 return CONVERT_WDI2VOS_STATUS(status) ;
3023}
Jeff Johnson295189b2012-06-20 16:38:30 -07003024#ifdef ENABLE_HAL_COMBINED_MESSAGES
3025/*
3026 * FUNCTION: WDA_PostAssocReqCallback
3027 * Post ASSOC req callback, send RSP back to PE
3028 */
3029void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3030 void* pUserData)
3031{
3032 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3033 tPostAssocParams *postAssocReqParam =
3034 (tPostAssocParams *)pWDA->wdaMsgParam ;
3035 /*STA context within the BSS Params*/
3036 tAddStaParams *staPostAssocParam =
3037 &postAssocReqParam->addBssParams.staContext ;
3038 /*STA Params for self STA*/
3039 tAddStaParams *selfStaPostAssocParam =
3040 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003042 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003044 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3046 {
3047 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3048 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3049 sizeof(tSirMacAddr)) ;
3050 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3051 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3052 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003053 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3054 }
3055 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3056 pWDA->wdaWdiApiMsgParam = NULL;
3057 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 return ;
3060}
Jeff Johnson295189b2012-06-20 16:38:30 -07003061/*
3062 * FUNCTION: WDA_ProcessPostAssocReq
3063 * Trigger POST ASSOC processing in WDI
3064 */
3065VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3066 tPostAssocParams *postAssocReqParam)
3067{
Jeff Johnson295189b2012-06-20 16:38:30 -07003068 WDI_Status status = WDI_STATUS_SUCCESS ;
3069
3070 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3071 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3072 sizeof(WDI_PostAssocReqParamsType)) ;
3073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003074 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003075
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 if(NULL == wdiPostAssocReqParam)
3077 {
3078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 VOS_ASSERT(0);
3081 return VOS_STATUS_E_NOMEM;
3082 }
3083
3084 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3085 {
3086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003087 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 VOS_ASSERT(0);
3089 return VOS_STATUS_E_FAILURE;
3090 }
3091
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 /* update BSS params into WDI structure */
3093 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3094 &postAssocReqParam->addBssParams) ;
3095 /* update STA params into WDI structure */
3096 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3097 &postAssocReqParam->addStaParams) ;
3098
3099 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3100 postAssocReqParam->addBssParams.highPerformance;
3101 WDA_UpdateEdcaParamsForAC(pWDA,
3102 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3103 &postAssocReqParam->addBssParams.acbe);
3104 WDA_UpdateEdcaParamsForAC(pWDA,
3105 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3106 &postAssocReqParam->addBssParams.acbk);
3107 WDA_UpdateEdcaParamsForAC(pWDA,
3108 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3109 &postAssocReqParam->addBssParams.acvi);
3110 WDA_UpdateEdcaParamsForAC(pWDA,
3111 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3112 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 /* Store Init Req pointer, as this will be used for response */
3114 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 /* store Params pass it to WDI */
3116 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003117 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3118 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 if(IS_WDI_STATUS_FAILURE(status))
3120 {
3121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3122 "Failure in Post Assoc WDI API, free all the memory " );
3123 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3124 pWDA->wdaWdiApiMsgParam = NULL;
3125 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3128 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 return CONVERT_WDI2VOS_STATUS(status) ;
3130}
3131#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003132/*
3133 * FUNCTION: WDA_AddStaReqCallback
3134 * ADD STA req callback, send RSP back to PE
3135 */
3136void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3137 void* pUserData)
3138{
3139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3140 tWDA_CbContext *pWDA;
3141 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003143 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 if(NULL == pWdaParams)
3145 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 VOS_ASSERT(0) ;
3148 return ;
3149 }
3150 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3151 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003152 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003153 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3155 {
3156 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3157 /*TODO: UMAC structure doesn't have these fields*/
3158 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3159 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3160 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3161 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3162 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3163 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003164#ifdef FEATURE_WLAN_TDLS
3165 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3166 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3167#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003169#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003170 {
3171 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3172 wdiConfigStaRsp->ucBssIdx;
3173 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3174 WDA_VALID_STA_INDEX ;
3175 }
3176 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3177 {
3178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003179 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 VOS_ASSERT(0) ;
3181 return ;
3182 }
3183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3185 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 return ;
3188}
Jeff Johnson295189b2012-06-20 16:38:30 -07003189/*
3190 * FUNCTION: WDA_ConfigStaReq
3191 * Trigger Config STA processing in WDI
3192 */
3193VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3194 tAddStaParams *addStaReqParam)
3195{
Jeff Johnson295189b2012-06-20 16:38:30 -07003196 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3198 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3199 sizeof(WDI_ConfigSTAReqParamsType)) ;
3200 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003202 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(NULL == wdiConfigStaReqParam)
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_ASSERT(0);
3208 return VOS_STATUS_E_NOMEM;
3209 }
3210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3211 if(NULL == pWdaParams)
3212 {
3213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003214 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 VOS_ASSERT(0);
3216 vos_mem_free(wdiConfigStaReqParam);
3217 return VOS_STATUS_E_NOMEM;
3218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 /* update STA params into WDI structure */
3221 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3222 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 /* Store Init Req pointer, as this will be used for response */
3224 /* store Params pass it to WDI */
3225 pWdaParams->pWdaContext = pWDA;
3226 pWdaParams->wdaMsgParam = addStaReqParam;
3227 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3229 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003230 if(IS_WDI_STATUS_FAILURE(status))
3231 {
3232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3233 "Failure in Config STA WDI API, free all the memory " );
3234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3235 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 return CONVERT_WDI2VOS_STATUS(status) ;
3240}
Jeff Johnson295189b2012-06-20 16:38:30 -07003241/*
3242 * FUNCTION: WDA_DelBSSReqCallback
3243 * Dens DEL BSS RSP back to PE
3244 */
3245void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3246 void* pUserData)
3247{
3248 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3249 tWDA_CbContext *pWDA;
3250 tDeleteBssParams *delBssReqParam;
3251 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003253 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003254 if(NULL == pWdaParams)
3255 {
3256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003257 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 VOS_ASSERT(0) ;
3259 return ;
3260 }
3261 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3262 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003263 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003264 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3265 {
3266 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3267 sizeof(tSirMacAddr)) ;
3268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3270 {
3271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003272 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 VOS_ASSERT(0) ;
3274 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3276 {
3277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003278 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003279 VOS_ASSERT(0) ;
3280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3282 {
3283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003284 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 VOS_ASSERT(0) ;
3286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3288 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 /* reset the the system role*/
3290 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3291
3292 /* Reset the BA related information */
3293 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3294 {
3295 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3296 {
3297 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3298 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3299 /* Reset framesTxed counters here */
3300 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3301 {
3302 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3303 }
3304 }
3305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 return ;
3308}
3309
Jeff Johnson295189b2012-06-20 16:38:30 -07003310/*
3311 * FUNCTION: WDA_ProcessDelBssReq
3312 * Init DEL BSS req with WDI
3313 */
3314VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3315 tDeleteBssParams *delBssParam)
3316{
3317 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3319 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3320 sizeof(WDI_DelBSSReqParamsType)) ;
3321 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003323 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 if(NULL == wdiDelBssReqParam)
3325 {
3326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003327 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 VOS_ASSERT(0);
3329 return VOS_STATUS_E_NOMEM;
3330 }
3331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3332 if(NULL == pWdaParams)
3333 {
3334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 VOS_ASSERT(0);
3337 vos_mem_free(wdiDelBssReqParam);
3338 return VOS_STATUS_E_NOMEM;
3339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3341 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3342
3343 /* Store Init Req pointer, as this will be used for response */
3344 /* store Params pass it to WDI */
3345 pWdaParams->pWdaContext = pWDA;
3346 pWdaParams->wdaMsgParam = delBssParam;
3347 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 status = WDI_DelBSSReq(wdiDelBssReqParam,
3349 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 if(IS_WDI_STATUS_FAILURE(status))
3351 {
3352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3353 "Failure in Del BSS WDI API, free all the memory " );
3354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3355 vos_mem_free(pWdaParams) ;
3356 delBssParam->status = eSIR_FAILURE ;
3357 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 return CONVERT_WDI2VOS_STATUS(status) ;
3360}
Jeff Johnson295189b2012-06-20 16:38:30 -07003361/*
3362 * FUNCTION: WDA_DelSTAReqCallback
3363 * Dens DEL STA RSP back to PE
3364 */
3365void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3366 void* pUserData)
3367{
3368 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3369 tWDA_CbContext *pWDA;
3370 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003372 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 if(NULL == pWdaParams)
3374 {
3375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003376 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003377 VOS_ASSERT(0) ;
3378 return ;
3379 }
3380 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3381 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003382 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3384 {
3385 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3386 {
3387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003388 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 VOS_ASSERT(0) ;
3390 }
3391 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3392 }
3393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3394 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 /*Reset the BA information corresponding to this STAIdx */
3396 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3397 WDA_INVALID_STA_INDEX;
3398 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3399
3400 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003401 return ;
3402}
Jeff Johnson295189b2012-06-20 16:38:30 -07003403/*
3404 * FUNCTION: WDA_ProcessDelStaReq
3405 * Init DEL STA req with WDI
3406 */
3407VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3408 tDeleteStaParams *delStaParam)
3409{
3410 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3412 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3413 sizeof(WDI_DelSTAReqParamsType)) ;
3414 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003416 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 if(NULL == wdiDelStaReqParam)
3418 {
3419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003420 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 VOS_ASSERT(0);
3422 return VOS_STATUS_E_NOMEM;
3423 }
3424 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3425 if(NULL == pWdaParams)
3426 {
3427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003429 VOS_ASSERT(0);
3430 vos_mem_free(wdiDelStaReqParam);
3431 return VOS_STATUS_E_NOMEM;
3432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003433 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3434 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003435 /* Store Init Req pointer, as this will be used for response */
3436 /* store Params pass it to WDI */
3437 pWdaParams->pWdaContext = pWDA;
3438 pWdaParams->wdaMsgParam = delStaParam;
3439 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 status = WDI_DelSTAReq(wdiDelStaReqParam,
3441 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003442 if(IS_WDI_STATUS_FAILURE(status))
3443 {
3444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3445 "Failure in Del STA WDI API, free all the memory status = %d",
3446 status );
3447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3448 vos_mem_free(pWdaParams) ;
3449 delStaParam->status = eSIR_FAILURE ;
3450 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 return CONVERT_WDI2VOS_STATUS(status) ;
3453}
Jeff Johnson295189b2012-06-20 16:38:30 -07003454void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3455{
3456 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3457 tWDA_CbContext *pWDA;
3458 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003460 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003461 if(NULL == pWdaParams)
3462 {
3463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003464 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 VOS_ASSERT(0) ;
3466 return ;
3467 }
3468 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3469 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3471 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3473 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3474 pwdiAddSTASelfRsp->macSelfSta,
3475 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 return ;
3478}
Jeff Johnson295189b2012-06-20 16:38:30 -07003479/*
3480 * FUNCTION: WDA_ProcessAddStaSelfReq
3481 *
3482 */
3483VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3484{
3485 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003486 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3488 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3489 sizeof(WDI_AddSTASelfReqParamsType)) ;
3490 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003492 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 if( NULL == wdiAddStaSelfReq )
3494 {
3495 VOS_ASSERT( 0 );
3496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003497 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 return( VOS_STATUS_E_NOMEM );
3499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 if( NULL == pWdaParams )
3502 {
3503 VOS_ASSERT( 0 );
3504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003505 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 vos_mem_free(wdiAddStaSelfReq) ;
3507 return( VOS_STATUS_E_NOMEM );
3508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003511 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003512 /* Store Init Req pointer, as this will be used for response */
3513 /* store Params pass it to WDI */
3514 pWdaParams->pWdaContext = pWDA;
3515 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3516 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003517 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003518
Jeff Johnson43971f52012-07-17 12:26:56 -07003519 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 {
3521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3522 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003523 wstatus );
3524 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3526 vos_mem_free(pWdaParams) ;
3527 pAddStaSelfReq->status = eSIR_FAILURE ;
3528 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3529 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003530 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003531}
Jeff Johnson295189b2012-06-20 16:38:30 -07003532/*
3533 * FUNCTION: WDA_DelSTASelfRespCallback
3534 *
3535 */
3536void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3537 wdiDelStaSelfRspParams , void* pUserData)
3538{
3539 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3540 tWDA_CbContext *pWDA;
3541 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003543 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 if (NULL == pWdaParams)
3545 {
3546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003547 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003548 VOS_ASSERT(0);
3549 return;
3550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3552 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003553 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003554 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003555
3556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3557 vos_mem_free(pWdaParams) ;
3558
3559 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 return ;
3561}
Jeff Johnson295189b2012-06-20 16:38:30 -07003562/*
3563 * FUNCTION: WDA_DelSTASelfReqCallback
3564 *
3565 */
3566void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3567 void* pUserData)
3568{
3569 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3570 tWDA_CbContext *pWDA;
3571 tDelStaSelfParams *delStaSelfParams;
3572
3573 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303574 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003575 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003576
3577 if (NULL == pWdaParams)
3578 {
3579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003580 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 VOS_ASSERT(0);
3582 return;
3583 }
3584
3585 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3586 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3587
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003588 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003589
3590 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3591 {
3592 VOS_ASSERT(0);
3593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3594 vos_mem_free(pWdaParams) ;
3595 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3596 }
3597
3598 return ;
3599}
3600
3601/*
3602 * FUNCTION: WDA_DelSTASelfReq
3603 * Trigger Config STA processing in WDI
3604 */
3605VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3606 tDelStaSelfParams* pDelStaSelfReqParam)
3607{
3608 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003609 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003610 tWDA_ReqParams *pWdaParams = NULL;
3611 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3612 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3613 sizeof(WDI_DelSTASelfReqParamsType)) ;
3614
Jeff Johnson295189b2012-06-20 16:38:30 -07003615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003616 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 if( NULL == wdiDelStaSelfReq )
3618 {
3619 VOS_ASSERT( 0 );
3620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003621 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003622 return( VOS_STATUS_E_NOMEM );
3623 }
3624
3625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3626 if( NULL == pWdaParams )
3627 {
3628 VOS_ASSERT( 0 );
3629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003630 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003631 vos_mem_free(wdiDelStaSelfReq) ;
3632 return( VOS_STATUS_E_NOMEM );
3633 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003634 pWdaParams->pWdaContext = pWDA;
3635 /* Store param pointer as passed in by caller */
3636 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3637 /* store Params pass it to WDI */
3638 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003639 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3640 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3641
3642 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3643 wdiDelStaSelfReq->pUserData = pWdaParams;
3644
Jeff Johnson43971f52012-07-17 12:26:56 -07003645 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003646 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3647
Jeff Johnson43971f52012-07-17 12:26:56 -07003648 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 {
3650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3651 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3652 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003653 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3655 vos_mem_free(pWdaParams) ;
3656 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3657 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3658 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003659 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003660}
3661
Jeff Johnson295189b2012-06-20 16:38:30 -07003662/*
3663 * FUNCTION: WDA_SendMsg
3664 * Send Message back to PE
3665 */
3666void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3667 void *pBodyptr, tANI_U32 bodyVal)
3668{
3669 tSirMsgQ msg = {0} ;
3670 tANI_U32 status = VOS_STATUS_SUCCESS ;
3671 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 msg.type = msgType;
3673 msg.bodyval = bodyVal;
3674 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003675 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 if (VOS_STATUS_SUCCESS != status)
3677 {
3678 if(NULL != pBodyptr)
3679 {
3680 vos_mem_free(pBodyptr);
3681 }
3682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003683 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 VOS_ASSERT(0) ;
3685 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 return ;
3687}
Jeff Johnson295189b2012-06-20 16:38:30 -07003688/*
3689 * FUNCTION: WDA_UpdateBSSParams
3690 * Translated WDA/PE BSS info into WDI BSS info..
3691 */
3692void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3693 WDI_ConfigBSSReqInfoType *wdiBssParams,
3694 tAddBssParams *wdaBssParams)
3695{
3696 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 /* copy bssReq Params to WDI structure */
3698 vos_mem_copy(wdiBssParams->macBSSID,
3699 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3700 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3701 sizeof(tSirMacAddr)) ;
3702 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3703 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3704 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 wdiBssParams->ucShortSlotTimeSupported =
3706 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3708 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3709 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3710 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3711 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3712
3713 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3714 wdiBssParams->ucTXOPProtectionFullSupport =
3715 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003716 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3717 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003718 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003719 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3720 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3721 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3722 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3723
Chet Lanctot186b5732013-03-18 10:26:30 -07003724 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3725
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 /* copy SSID into WDI structure */
3727 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3728 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3729 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003730 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3731 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003732 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003733#ifdef WLAN_FEATURE_VOWIFI
3734 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3735#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003736 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003737 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003738#ifdef WLAN_FEATURE_VOWIFI_11R
3739 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 if(wdiBssParams->bExtSetStaKeyParamValid)
3741 {
3742 /* copy set STA key params to WDI structure */
3743 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3744 wdaBssParams->extSetStaKeyParam.staIdx;
3745 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3746 wdaBssParams->extSetStaKeyParam.encType;
3747 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3748 wdaBssParams->extSetStaKeyParam.wepType;
3749 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3750 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003751 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3752 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003753 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3755 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3756 {
3757 WDA_GetWepKeysFromCfg( pWDA,
3758 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3759 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3760 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3761 }
3762 else
3763 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3765 keyIndex++)
3766 {
3767 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3768 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3769 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3770 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3771 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3772 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003773 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3774 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3775 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3776 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3777 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3778 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3779 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3780 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3783 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 }
3785 }
3786 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3787 }
3788 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3789 {
3790 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3791 sizeof(wdaBssParams->extSetStaKeyParam) );
3792 }
3793#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003794#ifdef WLAN_FEATURE_11AC
3795 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3796 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3797#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003798
3799 return ;
3800}
Jeff Johnson295189b2012-06-20 16:38:30 -07003801/*
3802 * FUNCTION: WDA_UpdateSTAParams
3803 * Translated WDA/PE BSS info into WDI BSS info..
3804 */
3805void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3806 WDI_ConfigStaReqInfoType *wdiStaParams,
3807 tAddStaParams *wdaStaParams)
3808{
3809 tANI_U8 i = 0;
3810 /* Update STA params */
3811 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3812 sizeof(tSirMacAddr)) ;
3813 wdiStaParams->usAssocId = wdaStaParams->assocId;
3814 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003815 wdiStaParams->staIdx = wdaStaParams->staIdx;
3816
Jeff Johnson295189b2012-06-20 16:38:30 -07003817 wdiStaParams->ucShortPreambleSupported =
3818 wdaStaParams->shortPreambleSupported;
3819 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3820 sizeof(tSirMacAddr)) ;
3821 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3822
3823 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3824
3825 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3826 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3827 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3828 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3829 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3830 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3831 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3832
3833 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3834 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003835 wdiStaParams->wdiSupportedRates.opRateMode =
3836 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003837 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3838 {
3839 wdiStaParams->wdiSupportedRates.llbRates[i] =
3840 wdaStaParams->supportedRates.llbRates[i];
3841 }
3842 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3843 {
3844 wdiStaParams->wdiSupportedRates.llaRates[i] =
3845 wdaStaParams->supportedRates.llaRates[i];
3846 }
3847 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3848 {
3849 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3850 wdaStaParams->supportedRates.aniLegacyRates[i];
3851 }
3852 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3853 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003854#ifdef WLAN_FEATURE_11AC
3855 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3856 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3857 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3858 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3859#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003860 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3861 {
3862 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3863 wdaStaParams->supportedRates.supportedMCSSet[i];
3864 }
3865 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3866 wdaStaParams->supportedRates.rxHighestDataRate;
3867
3868 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3869
3870 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3871
3872 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3873 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3874 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3875
3876 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3877 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3878 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3879 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003881#ifdef WLAN_FEATURE_11AC
3882 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3883 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003884 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003885#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003886 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3887 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003888 return ;
3889}
Jeff Johnson295189b2012-06-20 16:38:30 -07003890/*
3891 * -------------------------------------------------------------------------
3892 * CFG update to WDI
3893 * -------------------------------------------------------------------------
3894 */
3895
3896 /*
3897 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3898 * Convert the WNI CFG ID to HAL CFG ID
3899 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003900static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003901{
3902 switch(wniCfgId)
3903 {
3904 case WNI_CFG_STA_ID:
3905 return QWLAN_HAL_CFG_STA_ID;
3906 case WNI_CFG_CURRENT_TX_ANTENNA:
3907 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3908 case WNI_CFG_CURRENT_RX_ANTENNA:
3909 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3910 case WNI_CFG_LOW_GAIN_OVERRIDE:
3911 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3912 case WNI_CFG_POWER_STATE_PER_CHAIN:
3913 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3914 case WNI_CFG_CAL_PERIOD:
3915 return QWLAN_HAL_CFG_CAL_PERIOD;
3916 case WNI_CFG_CAL_CONTROL:
3917 return QWLAN_HAL_CFG_CAL_CONTROL;
3918 case WNI_CFG_PROXIMITY:
3919 return QWLAN_HAL_CFG_PROXIMITY;
3920 case WNI_CFG_NETWORK_DENSITY:
3921 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3922 case WNI_CFG_MAX_MEDIUM_TIME:
3923 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3924 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3925 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3926 case WNI_CFG_RTS_THRESHOLD:
3927 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3928 case WNI_CFG_SHORT_RETRY_LIMIT:
3929 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3930 case WNI_CFG_LONG_RETRY_LIMIT:
3931 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3932 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3933 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3934 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3935 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3936 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3937 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3938 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3939 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3940 case WNI_CFG_FIXED_RATE:
3941 return QWLAN_HAL_CFG_FIXED_RATE;
3942 case WNI_CFG_RETRYRATE_POLICY:
3943 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3944 case WNI_CFG_RETRYRATE_SECONDARY:
3945 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3946 case WNI_CFG_RETRYRATE_TERTIARY:
3947 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3948 case WNI_CFG_FORCE_POLICY_PROTECTION:
3949 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3950 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3951 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3952 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3953 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3954 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3955 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3956 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3957 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3958 case WNI_CFG_MAX_BA_SESSIONS:
3959 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3960 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3961 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3962 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3963 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3964 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3965 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3966 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3967 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3968 case WNI_CFG_STATS_PERIOD:
3969 return QWLAN_HAL_CFG_STATS_PERIOD;
3970 case WNI_CFG_CFP_MAX_DURATION:
3971 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3972#if 0 /*This is not part of CFG*/
3973 case WNI_CFG_FRAME_TRANS_ENABLED:
3974 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3975#endif
3976 case WNI_CFG_DTIM_PERIOD:
3977 return QWLAN_HAL_CFG_DTIM_PERIOD;
3978 case WNI_CFG_EDCA_WME_ACBK:
3979 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3980 case WNI_CFG_EDCA_WME_ACBE:
3981 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3982 case WNI_CFG_EDCA_WME_ACVI:
3983 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3984 case WNI_CFG_EDCA_WME_ACVO:
3985 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3986#if 0
3987 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3988 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3989 case WNI_CFG_TELE_BCN_TRANS_LI:
3990 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3991 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3992 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3993 case WNI_CFG_TELE_BCN_MAX_LI:
3994 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3995 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3996 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3997#endif
3998 case WNI_CFG_ENABLE_CLOSE_LOOP:
3999 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004000 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4001 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 default:
4003 {
4004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4005 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
4006 wniCfgId);
4007 return VOS_STATUS_E_INVAL;
4008 }
4009 }
4010}
Jeff Johnson295189b2012-06-20 16:38:30 -07004011/*
4012 * FUNCTION: WDA_UpdateCfgCallback
4013 *
4014 */
4015void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4016{
4017 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4018 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4019 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004021 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004022 /*
4023 * currently there is no response message is expected between PE and
4024 * WDA, Failure return from WDI is a ASSERT condition
4025 */
4026 if(WDI_STATUS_SUCCESS != wdiStatus)
4027 {
4028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004029 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4031 }
4032
4033 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4034 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4035 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 return ;
4037}
Jeff Johnson295189b2012-06-20 16:38:30 -07004038/*
4039 * FUNCTION: WDA_UpdateCfg
4040 *
4041 */
4042VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4043{
4044
4045 WDI_Status status = WDI_STATUS_SUCCESS ;
4046 tANI_U32 val =0;
4047 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4048 tHalCfg *configData;
4049 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4050 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004052 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004053 if (NULL == pMac )
4054 {
4055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004056 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 return VOS_STATUS_E_FAILURE;
4058 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004059 if(WDA_START_STATE != pWDA->wdaState)
4060 {
4061 return VOS_STATUS_E_FAILURE;
4062 }
4063
4064 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4065 {
4066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004067 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 VOS_ASSERT(0);
4069 return VOS_STATUS_E_FAILURE;
4070 }
4071
4072 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4073 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004074 if(NULL == wdiCfgReqParam)
4075 {
4076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004078 VOS_ASSERT(0);
4079 return VOS_STATUS_E_NOMEM;
4080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4082 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 if(NULL == wdiCfgReqParam->pConfigBuffer)
4084 {
4085 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004086 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 vos_mem_free(wdiCfgReqParam);
4088 VOS_ASSERT(0);
4089 return VOS_STATUS_E_NOMEM;
4090 }
4091
4092 /*convert the WNI CFG Id to HAL CFG Id*/
4093 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4094 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4095
4096 /*TODO: revisit this for handling string parameters */
4097 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4098 &val) != eSIR_SUCCESS)
4099 {
4100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4101 "Failed to cfg get id %d\n", cfgParam->bodyval);
4102 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4103 vos_mem_free(wdiCfgReqParam);
4104 return eSIR_FAILURE;
4105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4107 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4108 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4109 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4110 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4111
4112 /* store Params pass it to WDI */
4113 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004114#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4115 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4116 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004117 if(IS_WDI_STATUS_FAILURE(status))
4118 {
4119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4120 "Failure in Update CFG WDI API, free all the memory " );
4121 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4122 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4123 pWDA->wdaWdiCfgApiMsgParam = NULL;
4124 /* Failure is not expected */
4125 VOS_ASSERT(0) ;
4126 }
4127#else
4128 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4129 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4130 pWDA->wdaWdiCfgApiMsgParam = NULL;
4131#endif
4132 return CONVERT_WDI2VOS_STATUS(status) ;
4133}
4134
Jeff Johnson295189b2012-06-20 16:38:30 -07004135VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4136 v_U8_t *pDefaultKeyId,
4137 v_U8_t *pNumKeys,
4138 WDI_KeysType *pWdiKeys )
4139{
4140 v_U32_t i, j, defKeyId = 0;
4141 v_U32_t val = SIR_MAC_KEY_LENGTH;
4142 VOS_STATUS status = WDI_STATUS_SUCCESS;
4143 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 if (NULL == pMac )
4145 {
4146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004147 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 return VOS_STATUS_E_FAILURE;
4149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4151 &defKeyId ))
4152 {
4153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4154 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4155 }
4156
4157 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 /* Need to extract ALL of the configured WEP Keys */
4159 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4160 {
4161 val = SIR_MAC_KEY_LENGTH;
4162 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4163 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4164 pWdiKeys[j].key,
4165 &val ))
4166 {
4167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4168 "WEP Key index [%d] may not configured in CFG\n",i);
4169 }
4170 else
4171 {
4172 pWdiKeys[j].keyId = (tANI_U8) i;
4173 /*
4174 * Actually, a DC (Don't Care) because
4175 * this is determined (and set) by PE/MLME
4176 */
4177 pWdiKeys[j].unicast = 0;
4178 /*
4179 * Another DC (Don't Care)
4180 */
4181 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4182 /* Another DC (Don't Care). Unused for WEP */
4183 pWdiKeys[j].paeRole = 0;
4184 /* Determined from wlan_cfgGetStr() above.*/
4185 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004186 j++;
4187 *pNumKeys = (tANI_U8) j;
4188 }
4189 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 return status;
4191}
Jeff Johnson295189b2012-06-20 16:38:30 -07004192/*
4193 * FUNCTION: WDA_SetBssKeyReqCallback
4194 * send SET BSS key RSP back to PE
4195 */
4196void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4197{
4198 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4199 tWDA_CbContext *pWDA;
4200 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004202 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004203 if(NULL == pWdaParams)
4204 {
4205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004206 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004207 VOS_ASSERT(0) ;
4208 return ;
4209 }
4210 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4211 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4213 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004214 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004215 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 return ;
4217}
Jeff Johnson295189b2012-06-20 16:38:30 -07004218/*
4219 * FUNCTION: WDA_ProcessSetBssKeyReq
4220 * Request to WDI for programming the BSS key( key for
4221 * broadcast/multicast frames Encryption)
4222 */
4223VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4224 tSetBssKeyParams *setBssKeyParams )
4225{
4226 WDI_Status status = WDI_STATUS_SUCCESS ;
4227 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4228 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4229 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4230 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004231 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004233 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004234 if(NULL == wdiSetBssKeyParam)
4235 {
4236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004237 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 VOS_ASSERT(0);
4239 return VOS_STATUS_E_NOMEM;
4240 }
4241 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4242 if(NULL == pWdaParams)
4243 {
4244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004246 VOS_ASSERT(0);
4247 vos_mem_free(wdiSetBssKeyParam);
4248 return VOS_STATUS_E_NOMEM;
4249 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 /* copy set BSS params to WDI structure */
4252 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4253 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4254 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 if(setBssKeyParams->encType != eSIR_ED_NONE)
4256 {
4257 if( setBssKeyParams->numKeys == 0 &&
4258 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4259 setBssKeyParams->encType == eSIR_ED_WEP104))
4260 {
4261 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4263 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4264 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4265 }
4266 else
4267 {
4268 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4269 {
4270 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4271 setBssKeyParams->key[keyIndex].keyId;
4272 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4273 setBssKeyParams->key[keyIndex].unicast;
4274 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4275 setBssKeyParams->key[keyIndex].keyDirection;
4276 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4277 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4278 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4279 setBssKeyParams->key[keyIndex].paeRole;
4280 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4281 setBssKeyParams->key[keyIndex].keyLength;
4282 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4283 setBssKeyParams->key[keyIndex].key,
4284 SIR_MAC_MAX_KEY_LENGTH);
4285 }
4286 }
4287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4289 setBssKeyParams->singleTidRc;
4290 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004291 /* Store set key pointer, as this will be used for response */
4292 /* store Params pass it to WDI */
4293 pWdaParams->pWdaContext = pWDA;
4294 pWdaParams->wdaMsgParam = setBssKeyParams;
4295 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4297 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4298
4299 if(IS_WDI_STATUS_FAILURE(status))
4300 {
4301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4302 "Failure in Set BSS Key Req WDI API, free all the memory " );
4303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4304 vos_mem_free(pWdaParams) ;
4305 setBssKeyParams->status = eSIR_FAILURE ;
4306 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 return CONVERT_WDI2VOS_STATUS(status) ;
4309}
Jeff Johnson295189b2012-06-20 16:38:30 -07004310/*
4311 * FUNCTION: WDA_RemoveBssKeyReqCallback
4312 * send SET BSS key RSP back to PE
4313 */
4314void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4315{
4316 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4317 tWDA_CbContext *pWDA;
4318 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004320 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 if(NULL == pWdaParams)
4322 {
4323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004324 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004325 VOS_ASSERT(0) ;
4326 return ;
4327 }
4328 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4329 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4331 vos_mem_free(pWdaParams) ;
4332
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004333 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004334 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 return ;
4336}
Jeff Johnson295189b2012-06-20 16:38:30 -07004337/*
4338 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4339 * Request to WDI to remove the BSS key( key for broadcast/multicast
4340 * frames Encryption)
4341 */
4342VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4343 tRemoveBssKeyParams *removeBssKeyParams )
4344{
4345 WDI_Status status = WDI_STATUS_SUCCESS ;
4346 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4347 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4348 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4349 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004351 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 if(NULL == wdiRemoveBssKeyParam)
4353 {
4354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004355 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 VOS_ASSERT(0);
4357 return VOS_STATUS_E_NOMEM;
4358 }
4359 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4360 if(NULL == pWdaParams)
4361 {
4362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004363 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004364 VOS_ASSERT(0);
4365 vos_mem_free(wdiRemoveBssKeyParam);
4366 return VOS_STATUS_E_NOMEM;
4367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004368 /* copy Remove BSS key params to WDI structure*/
4369 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4370 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4371 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4372 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4373 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 /* Store remove key pointer, as this will be used for response */
4375 /* store Params pass it to WDI */
4376 pWdaParams->pWdaContext = pWDA;
4377 pWdaParams->wdaMsgParam = removeBssKeyParams;
4378 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004379 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4380 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004381 if(IS_WDI_STATUS_FAILURE(status))
4382 {
4383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4384 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4386 vos_mem_free(pWdaParams) ;
4387 removeBssKeyParams->status = eSIR_FAILURE ;
4388 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 return CONVERT_WDI2VOS_STATUS(status) ;
4391}
Jeff Johnson295189b2012-06-20 16:38:30 -07004392/*
4393 * FUNCTION: WDA_SetBssKeyReqCallback
4394 * send SET BSS key RSP back to PE
4395 */
4396void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4397{
4398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4399 tWDA_CbContext *pWDA;
4400 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004402 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 if(NULL == pWdaParams)
4404 {
4405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004406 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004407 VOS_ASSERT(0) ;
4408 return ;
4409 }
4410 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4411 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4413 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004414 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 return ;
4417}
Jeff Johnson295189b2012-06-20 16:38:30 -07004418/*
4419 * FUNCTION: WDA_ProcessSetStaKeyReq
4420 * Request to WDI for programming the STA key( key for Unicast frames
4421 * Encryption)
4422 */
4423VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4424 tSetStaKeyParams *setStaKeyParams )
4425{
4426 WDI_Status status = WDI_STATUS_SUCCESS ;
4427 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4428 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4429 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4430 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004431 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004433 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 if(NULL == wdiSetStaKeyParam)
4435 {
4436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004437 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004438 VOS_ASSERT(0);
4439 return VOS_STATUS_E_NOMEM;
4440 }
4441 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4442 if(NULL == pWdaParams)
4443 {
4444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004445 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 VOS_ASSERT(0);
4447 vos_mem_free(wdiSetStaKeyParam);
4448 return VOS_STATUS_E_NOMEM;
4449 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004450 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 /* copy set STA key params to WDI structure */
4453 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4454 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4455 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4456 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 if(setStaKeyParams->encType != eSIR_ED_NONE)
4458 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004459 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4461 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4462 {
4463 WDA_GetWepKeysFromCfg( pWDA,
4464 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4465 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4466 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4467 }
4468 else
4469 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004470 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4471 keyIndex++)
4472 {
4473 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4474 setStaKeyParams->key[keyIndex].keyId;
4475 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4476 setStaKeyParams->key[keyIndex].unicast;
4477 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4478 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004479 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4480 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4481 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4482 setStaKeyParams->key[keyIndex].paeRole;
4483 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4484 setStaKeyParams->key[keyIndex].keyLength;
4485 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4486 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4487 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4488 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4489 {
4490 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4491 }
4492 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004493 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4494 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 }
4496 }
4497 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4498 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 /* Store set key pointer, as this will be used for response */
4500 /* store Params pass it to WDI */
4501 pWdaParams->pWdaContext = pWDA;
4502 pWdaParams->wdaMsgParam = setStaKeyParams;
4503 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4505 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004506 if(IS_WDI_STATUS_FAILURE(status))
4507 {
4508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4509 "Failure in set STA Key Req WDI API, free all the memory " );
4510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4511 vos_mem_free(pWdaParams) ;
4512 setStaKeyParams->status = eSIR_FAILURE ;
4513 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4514 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 return CONVERT_WDI2VOS_STATUS(status) ;
4516}
Jeff Johnson295189b2012-06-20 16:38:30 -07004517/*
4518 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4519 * send SET Bcast STA key RSP back to PE
4520 */
4521void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4522{
4523 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4524 tWDA_CbContext *pWDA;
4525 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004527 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 if(NULL == pWdaParams)
4529 {
4530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004531 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 VOS_ASSERT(0) ;
4533 return ;
4534 }
4535 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4536 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4538 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004539 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004540 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 return ;
4542}
4543
Jeff Johnson295189b2012-06-20 16:38:30 -07004544/*
4545 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4546 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4547 * Encryption)
4548 */
4549VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4550 tSetStaKeyParams *setStaKeyParams )
4551{
4552 WDI_Status status = WDI_STATUS_SUCCESS ;
4553 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4554 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4555 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4556 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004559 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004560 if(NULL == wdiSetStaKeyParam)
4561 {
4562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 VOS_ASSERT(0);
4565 return VOS_STATUS_E_NOMEM;
4566 }
4567 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4568 if(NULL == pWdaParams)
4569 {
4570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004571 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 VOS_ASSERT(0);
4573 vos_mem_free(wdiSetStaKeyParam);
4574 return VOS_STATUS_E_NOMEM;
4575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004577 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 /* copy set STA key params to WDI structure */
4579 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4580 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4581 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4582 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004583 if(setStaKeyParams->encType != eSIR_ED_NONE)
4584 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004585 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4586 keyIndex++)
4587 {
4588 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4589 setStaKeyParams->key[keyIndex].keyId;
4590 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4591 setStaKeyParams->key[keyIndex].unicast;
4592 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4593 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004594 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4595 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4596 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4597 setStaKeyParams->key[keyIndex].paeRole;
4598 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4599 setStaKeyParams->key[keyIndex].keyLength;
4600 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4601 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4604 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 }
4606 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004607 /* Store set key pointer, as this will be used for response */
4608 /* store Params pass it to WDI */
4609 pWdaParams->pWdaContext = pWDA;
4610 pWdaParams->wdaMsgParam = setStaKeyParams;
4611 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4613 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 if(IS_WDI_STATUS_FAILURE(status))
4615 {
4616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4617 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4619 vos_mem_free(pWdaParams) ;
4620 setStaKeyParams->status = eSIR_FAILURE ;
4621 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4622 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 return CONVERT_WDI2VOS_STATUS(status) ;
4624}
Jeff Johnson295189b2012-06-20 16:38:30 -07004625/*
4626 * FUNCTION: WDA_RemoveStaKeyReqCallback
4627 * send SET BSS key RSP back to PE
4628 */
4629void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4630{
4631 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4632 tWDA_CbContext *pWDA;
4633 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004635 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004636 if(NULL == pWdaParams)
4637 {
4638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004639 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004640 VOS_ASSERT(0) ;
4641 return ;
4642 }
4643 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4644 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4646 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004647 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 return ;
4650}
4651
Jeff Johnson295189b2012-06-20 16:38:30 -07004652/*
4653 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4654 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4655 */
4656VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4657 tRemoveStaKeyParams *removeStaKeyParams )
4658{
4659 WDI_Status status = WDI_STATUS_SUCCESS ;
4660 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4661 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4662 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4663 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004665 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004666 if(NULL == wdiRemoveStaKeyParam)
4667 {
4668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004669 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 VOS_ASSERT(0);
4671 return VOS_STATUS_E_NOMEM;
4672 }
4673 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4674 if(NULL == pWdaParams)
4675 {
4676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004677 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004678 VOS_ASSERT(0);
4679 vos_mem_free(wdiRemoveStaKeyParam);
4680 return VOS_STATUS_E_NOMEM;
4681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004682 /* copy remove STA key params to WDI structure*/
4683 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4684 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4685 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4686 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4687 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004688 /* Store remove key pointer, as this will be used for response */
4689 /* store Params pass it to WDI */
4690 pWdaParams->pWdaContext = pWDA;
4691 pWdaParams->wdaMsgParam = removeStaKeyParams;
4692 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4694 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004695 if(IS_WDI_STATUS_FAILURE(status))
4696 {
4697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4698 "Failure in remove STA Key Req WDI API, free all the memory " );
4699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4700 vos_mem_free(pWdaParams) ;
4701 removeStaKeyParams->status = eSIR_FAILURE ;
4702 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4703 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 return CONVERT_WDI2VOS_STATUS(status) ;
4705}
Jeff Johnson295189b2012-06-20 16:38:30 -07004706/*
4707 * FUNCTION: WDA_IsHandleSetLinkStateReq
4708 * Update the WDA state and return the status to handle this message or not
4709 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004710WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4711 tWDA_CbContext *pWDA,
4712 tLinkStateParams *linkStateParams)
4713{
4714 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 switch(linkStateParams->state)
4716 {
4717 case eSIR_LINK_PREASSOC_STATE:
4718 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4719 /*
4720 * set the WDA state to PRE ASSOC
4721 * copy the BSSID into pWDA to use it in join request and return,
4722 * No need to handle these messages.
4723 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004724 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4725 {
4726 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004728 }
4729 else
4730 {
4731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004732 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004733 VOS_ASSERT(0);
4734 }
4735
4736 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4737 {
4738 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004740 }
4741 else
4742 {
4743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004744 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004745 VOS_ASSERT(0);
4746 }
4747
Jeff Johnson295189b2012-06-20 16:38:30 -07004748 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4749 *channel and after ) so reset the WDA state to ready when the second
4750 * time UMAC issue the link state with PREASSOC
4751 */
4752 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4753 {
4754 /* RESET WDA state back to WDA_READY_STATE */
4755 pWDA->wdaState = WDA_READY_STATE;
4756 }
4757 else
4758 {
4759 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4760 }
4761 //populate linkState info in WDACbCtxt
4762 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004764 default:
4765 if(pWDA->wdaState != WDA_READY_STATE)
4766 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004767 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4768 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4769 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4770 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4771 *the ASSERT in WDA_Stop during module unload.*/
4772 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4773 {
4774 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004775 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004776 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004777 else
4778 {
4779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004780 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004781 status = WDA_IGNORE_SET_LINK_STATE;
4782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 }
4784 break;
4785 }
4786
4787 return status;
4788}
Jeff Johnson295189b2012-06-20 16:38:30 -07004789/*
4790 * FUNCTION: WDA_SetLinkStateCallback
4791 * call back function for set link state from WDI
4792 */
4793void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4794{
4795 tWDA_CbContext *pWDA;
4796 tLinkStateParams *linkStateParams;
4797 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004799 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 if(NULL == pWdaParams)
4801 {
4802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004803 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004804 VOS_ASSERT(0) ;
4805 return ;
4806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004809 /*
4810 * In STA mode start the BA activity check timer after association
4811 * and in AP mode start BA activity check timer after BSS start */
4812 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4813 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004814 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4815 ((status == WDI_STATUS_SUCCESS) &&
4816 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004817 {
4818 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 /*
4822 * No respone required for WDA_SET_LINK_STATE so free the request
4823 * param here
4824 */
4825 if( pWdaParams != NULL )
4826 {
4827 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4828 {
4829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4830 }
4831 vos_mem_free(pWdaParams);
4832 }
4833 return ;
4834}
Jeff Johnson295189b2012-06-20 16:38:30 -07004835/*
4836 * FUNCTION: WDA_ProcessSetLinkState
4837 * Request to WDI to set the link status.
4838 */
4839VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4840 tLinkStateParams *linkStateParams)
4841{
4842 WDI_Status status = WDI_STATUS_SUCCESS ;
4843 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4844 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4845 sizeof(WDI_SetLinkReqParamsType)) ;
4846 tWDA_ReqParams *pWdaParams ;
4847 tpAniSirGlobal pMac;
4848 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4849
4850 if(NULL == pMac)
4851 {
4852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004853 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004855 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 return VOS_STATUS_E_FAILURE;
4857 }
4858
4859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004860 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 if(NULL == wdiSetLinkStateParam)
4862 {
4863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 VOS_ASSERT(0);
4866 return VOS_STATUS_E_NOMEM;
4867 }
4868 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4869 if(NULL == pWdaParams)
4870 {
4871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004872 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 VOS_ASSERT(0);
4874 vos_mem_free(wdiSetLinkStateParam);
4875 return VOS_STATUS_E_NOMEM;
4876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 if(WDA_IGNORE_SET_LINK_STATE ==
4878 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4879 {
4880 status = WDI_STATUS_E_FAILURE;
4881 }
4882 else
4883 {
4884 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4885 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4887 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4889 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 pWdaParams->pWdaContext = pWDA;
4891 /* Store remove key pointer, as this will be used for response */
4892 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 /* store Params pass it to WDI */
4894 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4895 /* Stop Timer only other than GO role and concurrent session */
4896 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07004897 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004898 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4899 {
4900 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004902 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4903 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
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 set link state Req WDI API, free all the memory " );
4908 }
4909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 if(IS_WDI_STATUS_FAILURE(status))
4911 {
4912 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004913 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004914 vos_mem_free(pWdaParams);
4915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004916 return CONVERT_WDI2VOS_STATUS(status) ;
4917}
Jeff Johnson295189b2012-06-20 16:38:30 -07004918/*
4919 * FUNCTION: WDA_GetStatsReqParamsCallback
4920 * send the response to PE with Stats received from WDI
4921 */
4922void WDA_GetStatsReqParamsCallback(
4923 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4924 void* pUserData)
4925{
4926 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4927 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4928
4929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004930 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004931 pGetPEStatsRspParams =
4932 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4933 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4934
4935 if(NULL == pGetPEStatsRspParams)
4936 {
4937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 VOS_ASSERT(0);
4940 return;
4941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4943 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4944 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4945 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004946
4947 //Fill the Session Id Properly in PE
4948 pGetPEStatsRspParams->sessionId = 0;
4949 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004950 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4952 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 vos_mem_copy( pGetPEStatsRspParams + 1,
4954 wdiGetStatsRsp + 1,
4955 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 /* send response to UMAC*/
4957 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4958
4959 return;
4960}
4961
Jeff Johnson295189b2012-06-20 16:38:30 -07004962/*
4963 * FUNCTION: WDA_ProcessGetStatsReq
4964 * Request to WDI to get the statistics
4965 */
4966VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4967 tAniGetPEStatsReq *pGetStatsParams)
4968{
4969 WDI_Status status = WDI_STATUS_SUCCESS ;
4970 WDI_GetStatsReqParamsType wdiGetStatsParam;
4971 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004973 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004974 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4975 pGetStatsParams->staId;
4976 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4977 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 status = WDI_GetStatsReq(&wdiGetStatsParam,
4980 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 if(IS_WDI_STATUS_FAILURE(status))
4982 {
4983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4984 "Failure in Get Stats Req WDI API, free all the memory " );
4985 pGetPEStatsRspParams =
4986 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4987 if(NULL == pGetPEStatsRspParams)
4988 {
4989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004990 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004991 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004992 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004993 return VOS_STATUS_E_NOMEM;
4994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4996 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4997 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4998 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4999 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5000 (void *)pGetPEStatsRspParams, 0) ;
5001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005002 /* Free the request message */
5003 vos_mem_free(pGetStatsParams);
5004 return CONVERT_WDI2VOS_STATUS(status);
5005}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005006
5007#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5008/*
5009 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5010 * send the response to PE with roam Rssi received from WDI
5011 */
5012void WDA_GetRoamRssiReqParamsCallback(
5013 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5014 void* pUserData)
5015{
5016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5017 tWDA_CbContext *pWDA = NULL;
5018 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5019 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5021 "<------ %s " ,__func__);
5022 if(NULL == pWdaParams)
5023 {
5024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5025 "%s: pWdaParams received NULL", __func__);
5026 VOS_ASSERT(0) ;
5027 return ;
5028 }
5029 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5030 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5031
5032 if(NULL == pGetRoamRssiReqParams)
5033 {
5034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5035 "%s: pGetRoamRssiReqParams received NULL", __func__);
5036 VOS_ASSERT(0);
5037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5038 vos_mem_free(pWdaParams);
5039 return ;
5040 }
5041 pGetRoamRssiRspParams =
5042 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5043
5044 if(NULL == pGetRoamRssiRspParams)
5045 {
5046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5047 "%s: VOS MEM Alloc Failure", __func__);
5048 VOS_ASSERT(0);
5049 return;
5050 }
5051 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5052 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005053 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005054 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5055 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5056
5057 /* Assign get roam rssi req (backup) in to the response */
5058 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5059
5060 /* free WDI command buffer */
5061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5062 vos_mem_free(pWdaParams) ;
5063
5064 /* send response to UMAC*/
5065 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5066
5067 return;
5068}
5069
5070
5071
5072/*
5073 * FUNCTION: WDA_ProcessGetRoamRssiReq
5074 * Request to WDI to get the statistics
5075 */
5076VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5077 tAniGetRssiReq *pGetRoamRssiParams)
5078{
5079 WDI_Status status = WDI_STATUS_SUCCESS ;
5080 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5081 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5082 tWDA_ReqParams *pWdaParams = NULL;
5083
5084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5085 "------> %s " ,__func__);
5086 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5087 pGetRoamRssiParams->staId;
5088 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5089
5090 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5091 if(NULL == pWdaParams)
5092 {
5093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5094 "%s: VOS MEM Alloc Failure", __func__);
5095 VOS_ASSERT(0);
5096 return VOS_STATUS_E_NOMEM;
5097 }
5098
5099 /* Store Init Req pointer, as this will be used for response */
5100 pWdaParams->pWdaContext = pWDA;
5101
5102 /* Take Get roam Rssi req backup as it stores the callback to be called after
5103 receiving the response */
5104 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5105 pWdaParams->wdaWdiApiMsgParam = NULL;
5106
5107 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5108 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5109 if(IS_WDI_STATUS_FAILURE(status))
5110 {
5111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5112 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5113 pGetRoamRssiRspParams =
5114 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5115 if(NULL == pGetRoamRssiRspParams)
5116 {
5117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5118 "%s: VOS MEM Alloc Failure", __func__);
5119 VOS_ASSERT(0);
5120 vos_mem_free(pGetRoamRssiParams);
5121 vos_mem_free(pWdaParams);
5122 return VOS_STATUS_E_NOMEM;
5123 }
5124 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5125 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5126 pGetRoamRssiRspParams->rssi = 0;
5127 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5128 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5129 (void *)pGetRoamRssiRspParams, 0) ;
5130 }
5131 return CONVERT_WDI2VOS_STATUS(status);
5132}
5133#endif
5134
5135
Jeff Johnson295189b2012-06-20 16:38:30 -07005136/*
5137 * FUNCTION: WDA_UpdateEDCAParamCallback
5138 * call back function for Update EDCA params from WDI
5139 */
5140void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5141{
5142 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5143 tEdcaParams *pEdcaParams;
5144
5145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005146 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 if(NULL == pWdaParams)
5148 {
5149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005150 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 VOS_ASSERT(0) ;
5152 return ;
5153 }
5154 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5156 vos_mem_free(pWdaParams);
5157 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 return ;
5159}
Jeff Johnson295189b2012-06-20 16:38:30 -07005160/*
5161 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5162 * Request to WDI to Update the EDCA params.
5163 */
5164VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5165 tEdcaParams *pEdcaParams)
5166{
5167 WDI_Status status = WDI_STATUS_SUCCESS ;
5168 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5169 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5170 sizeof(WDI_UpdateEDCAParamsType)) ;
5171 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005173 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 if(NULL == wdiEdcaParam)
5175 {
5176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005177 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005179 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 return VOS_STATUS_E_NOMEM;
5181 }
5182 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5183 if(NULL == pWdaParams)
5184 {
5185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 VOS_ASSERT(0);
5188 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005189 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005190 return VOS_STATUS_E_NOMEM;
5191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005192 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5193 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5194 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5195 &pEdcaParams->acbe);
5196 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5197 &pEdcaParams->acbk);
5198 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5199 &pEdcaParams->acvi);
5200 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5201 &pEdcaParams->acvo);
5202 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005203 pWdaParams->pWdaContext = pWDA;
5204 /* Store remove key pointer, as this will be used for response */
5205 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 /* store Params pass it to WDI */
5207 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005208 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5209 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005210 if(IS_WDI_STATUS_FAILURE(status))
5211 {
5212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5213 "Failure in Update EDCA Params WDI API, free all the memory " );
5214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5215 vos_mem_free(pWdaParams);
5216 vos_mem_free(pEdcaParams);
5217 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005218 return CONVERT_WDI2VOS_STATUS(status) ;
5219}
Jeff Johnson295189b2012-06-20 16:38:30 -07005220/*
5221 * FUNCTION: WDA_AddBAReqCallback
5222 * send ADD BA RSP back to PE
5223 */
5224void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5225 void* pUserData)
5226{
5227 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5228 tWDA_CbContext *pWDA;
5229 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005231 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005232 if(NULL == pWdaParams)
5233 {
5234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005235 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005236 VOS_ASSERT(0) ;
5237 return ;
5238 }
5239 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5240 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5242 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005243 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005245 return ;
5246}
5247
Jeff Johnson295189b2012-06-20 16:38:30 -07005248/*
5249 * FUNCTION: WDA_ProcessAddBAReq
5250 * Request to WDI to Update the ADDBA REQ params.
5251 */
5252VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5253 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5254{
Jeff Johnson43971f52012-07-17 12:26:56 -07005255 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005256 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5257 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5258 sizeof(WDI_AddBAReqParamsType)) ;
5259 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005261 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 if(NULL == wdiAddBAReqParam)
5263 {
5264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005265 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005266 VOS_ASSERT(0);
5267 return VOS_STATUS_E_NOMEM;
5268 }
5269 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5270 if(NULL == pWdaParams)
5271 {
5272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005273 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 VOS_ASSERT(0);
5275 vos_mem_free(wdiAddBAReqParam);
5276 return VOS_STATUS_E_NOMEM;
5277 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005278 do
5279 {
5280 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 wdiAddBaInfo->ucSTAIdx = staIdx ;
5282 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5283 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005284 } while(0) ;
5285 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 pWdaParams->pWdaContext = pWDA;
5287 /* store Params pass it to WDI */
5288 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5289 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005290 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5291 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005292
Jeff Johnson43971f52012-07-17 12:26:56 -07005293 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005294 {
5295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005296 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5297 status = CONVERT_WDI2VOS_STATUS(wstatus);
5298 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 vos_mem_free(pWdaParams);
5300 pAddBAReqParams->status = eSIR_FAILURE;
5301 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5302 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005303 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005304}
Jeff Johnson295189b2012-06-20 16:38:30 -07005305/*
5306 * FUNCTION: WDA_AddBASessionReqCallback
5307 * send ADD BA SESSION RSP back to PE/(or TL)
5308 */
5309void WDA_AddBASessionReqCallback(
5310 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5311{
5312 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5313 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5314 tWDA_CbContext *pWDA;
5315 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005317 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 if(NULL == pWdaParams)
5319 {
5320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005321 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 VOS_ASSERT(0) ;
5323 return ;
5324 }
5325 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5326 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005327 if( NULL == pAddBAReqParams )
5328 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005330 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5333 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 return ;
5335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5337 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005338 /*
5339 * if WDA in update TL state, update TL with BA session parama and send
5340 * another request to HAL(/WDI) (ADD_BA_REQ)
5341 */
5342
5343 if((VOS_STATUS_SUCCESS ==
5344 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5345 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5346 {
5347 /* Update TL with BA info received from HAL/WDI */
5348 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5349 wdiAddBaSession->usBaSessionID,
5350 wdiAddBaSession->ucSTAIdx,
5351 wdiAddBaSession->ucBaTID,
5352 wdiAddBaSession->ucBaBufferSize,
5353 wdiAddBaSession->ucWinSize,
5354 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5356 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5357 }
5358 else
5359 {
5360 pAddBAReqParams->status =
5361 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5362
5363 /* Setting Flag to indicate that Set BA is success */
5364 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5365 {
5366 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5367 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5368 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5369 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 /*Reset the WDA state to READY */
5373 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 return ;
5375}
5376
Jeff Johnson295189b2012-06-20 16:38:30 -07005377/*
5378 * FUNCTION: WDA_ProcessAddBASessionReq
5379 * Request to WDI to Update the ADDBA REQ params.
5380 */
5381VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5382 tAddBAParams *pAddBAReqParams)
5383{
5384 WDI_Status status = WDI_STATUS_SUCCESS ;
5385 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5386 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5387 sizeof(WDI_AddBASessionReqParamsType)) ;
5388 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005389 WLANTL_STAStateType tlSTAState = 0;
5390
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005392 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005393 if(NULL == wdiAddBASessionReqParam)
5394 {
5395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 VOS_ASSERT(0);
5398 return VOS_STATUS_E_NOMEM;
5399 }
5400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5401 if(NULL == pWdaParams)
5402 {
5403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005404 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005405 VOS_ASSERT(0);
5406 vos_mem_free(wdiAddBASessionReqParam);
5407 return VOS_STATUS_E_NOMEM;
5408 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005409 /*
5410 * Populate ADD BA parameters and pass these paarmeters to WDI.
5411 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5412 * the state to track if these is BA recipient case or BA initiator
5413 * case.
5414 */
5415 do
5416 {
5417 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5418 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5419 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5420 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5421 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5422 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5423 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005424 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5426 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5427 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5428 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5429 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005430 /* check the BA direction and update state accordingly */
5431 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5432 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5433 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5434
5435 }while(0) ;
5436 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 pWdaParams->pWdaContext = pWDA;
5438 /* Store ADD BA pointer, as this will be used for response */
5439 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5440 /* store Params pass it to WDI */
5441 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005442
5443 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5444 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5445 */
5446 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5447 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5448 {
5449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5450 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5451 status = WDI_STATUS_E_NOT_ALLOWED;
5452 pAddBAReqParams->status =
5453 CONVERT_WDI2SIR_STATUS(status) ;
5454 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5455 /*Reset the WDA state to READY */
5456 pWDA->wdaState = WDA_READY_STATE;
5457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5458 vos_mem_free(pWdaParams);
5459
5460 return CONVERT_WDI2VOS_STATUS(status) ;
5461 }
5462
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5464 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 if(IS_WDI_STATUS_FAILURE(status))
5466 {
5467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005468 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5470 "Send ADD BA failure response to PE\n");
5471 pAddBAReqParams->status =
5472 CONVERT_WDI2SIR_STATUS(status) ;
5473 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005474 /*Reset the WDA state to READY */
5475 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 vos_mem_free(pWdaParams);
5478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005479 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005480}
Jeff Johnson295189b2012-06-20 16:38:30 -07005481/*
5482 * FUNCTION: WDA_DelBANotifyTL
5483 * send DEL BA IND to TL
5484 */
5485void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5486 tDelBAParams *pDelBAReqParams)
5487{
5488 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5489 //tSirMsgQ msg;
5490 vos_msg_t vosMsg;
5491 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 if(NULL == pDelBAInd)
5493 {
5494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005496 VOS_ASSERT(0) ;
5497 return;
5498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5500 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5501 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5502 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005503
Jeff Johnson295189b2012-06-20 16:38:30 -07005504
5505 vosMsg.type = WDA_DELETEBA_IND;
5506 vosMsg.bodyptr = pDelBAInd;
5507 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5508 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5509 {
5510 vosStatus = VOS_STATUS_E_BADMSG;
5511 }
5512}
Jeff Johnson295189b2012-06-20 16:38:30 -07005513/*
5514 * FUNCTION: WDA_DelBAReqCallback
5515 * send DEL BA RSP back to PE
5516 */
5517void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5518{
5519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5520 tWDA_CbContext *pWDA;
5521 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005523 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 if(NULL == pWdaParams)
5525 {
5526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005527 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 VOS_ASSERT(0) ;
5529 return ;
5530 }
5531 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5532 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005533 /* Notify TL about DEL BA in case of recipinet */
5534 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5535 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5536 {
5537 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005539 /*
5540 * No respone required for WDA_DELBA_IND so just free the request
5541 * param here
5542 */
5543 vos_mem_free(pDelBAReqParams);
5544 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5545 vos_mem_free(pWdaParams);
5546 return ;
5547}
5548
Jeff Johnson295189b2012-06-20 16:38:30 -07005549/*
5550 * FUNCTION: WDA_ProcessDelBAReq
5551 * Request to WDI to Update the DELBA REQ params.
5552 */
5553VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5554 tDelBAParams *pDelBAReqParams)
5555{
5556 WDI_Status status = WDI_STATUS_SUCCESS ;
5557 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5558 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5559 sizeof(WDI_DelBAReqParamsType)) ;
5560 tWDA_ReqParams *pWdaParams ;
5561 tANI_U16 staIdx = 0;
5562 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005564 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 if(NULL == wdiDelBAReqParam)
5566 {
5567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005568 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005569 VOS_ASSERT(0);
5570 return VOS_STATUS_E_NOMEM;
5571 }
5572 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5573 if(NULL == pWdaParams)
5574 {
5575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005576 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005577 VOS_ASSERT(0);
5578 vos_mem_free(wdiDelBAReqParam);
5579 return VOS_STATUS_E_NOMEM;
5580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005581 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5582 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5583 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5584 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005585 pWdaParams->pWdaContext = pWDA;
5586 /* Store DEL BA pointer, as this will be used for response */
5587 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005588 /* store Params pass it to WDI */
5589 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5591 * maintained in WDA, so that WDA can retry for another BA session
5592 */
5593 staIdx = pDelBAReqParams->staIdx;
5594 tid = pDelBAReqParams->baTID;
5595 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005596 status = WDI_DelBAReq(wdiDelBAReqParam,
5597 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 if(IS_WDI_STATUS_FAILURE(status))
5599 {
5600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5601 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5603 vos_mem_free(pWdaParams->wdaMsgParam);
5604 vos_mem_free(pWdaParams);
5605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005607}
Jeff Johnson295189b2012-06-20 16:38:30 -07005608/*
5609 * FUNCTION: WDA_AddTSReqCallback
5610 * send ADD TS RSP back to PE
5611 */
5612void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5613{
5614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5615 tWDA_CbContext *pWDA;
5616 tAddTsParams *pAddTsReqParams;
5617
5618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005619 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005620 if(NULL == pWdaParams)
5621 {
5622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005623 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005624 VOS_ASSERT(0) ;
5625 return ;
5626 }
5627 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5628 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5630 vos_mem_free(pWdaParams);
5631
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005632 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 return ;
5635}
5636
Jeff Johnson295189b2012-06-20 16:38:30 -07005637/*
5638 * FUNCTION: WDA_ProcessAddTSReq
5639 * Request to WDI to Update the ADD TS REQ params.
5640 */
5641VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5642 tAddTsParams *pAddTsReqParams)
5643{
5644 WDI_Status status = WDI_STATUS_SUCCESS ;
5645 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5646 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5647 sizeof(WDI_AddTSReqParamsType)) ;
5648 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005650 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 if(NULL == wdiAddTSReqParam)
5652 {
5653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005654 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 VOS_ASSERT(0);
5656 return VOS_STATUS_E_NOMEM;
5657 }
5658 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5659 if(NULL == pWdaParams)
5660 {
5661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005662 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 VOS_ASSERT(0);
5664 vos_mem_free(wdiAddTSReqParam);
5665 return VOS_STATUS_E_NOMEM;
5666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005667 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5668 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005669 //TS IE
5670 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5671 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5672 pAddTsReqParams->tspec.length;
5673
5674 //TS IE : TS INFO : TRAFFIC
5675 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5676 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5677 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5678 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5679 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5680 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5681 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5682 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5683 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5684 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5685 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5686 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5687 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5688 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5689 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5690 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5691
5692 //TS IE : TS INFO : SCHEDULE
5693 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5694 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5695 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5696 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005697 //TS IE
5698 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5699 pAddTsReqParams->tspec.nomMsduSz;
5700 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5701 pAddTsReqParams->tspec.maxMsduSz;
5702 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5703 pAddTsReqParams->tspec.minSvcInterval;
5704 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5705 pAddTsReqParams->tspec.maxSvcInterval;
5706 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5707 pAddTsReqParams->tspec.inactInterval;
5708 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5709 pAddTsReqParams->tspec.suspendInterval;
5710 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5711 pAddTsReqParams->tspec.svcStartTime;
5712 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5713 pAddTsReqParams->tspec.minDataRate;
5714 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5715 pAddTsReqParams->tspec.meanDataRate;
5716 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5717 pAddTsReqParams->tspec.peakDataRate;
5718 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5719 pAddTsReqParams->tspec.maxBurstSz;
5720 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5721 pAddTsReqParams->tspec.delayBound;
5722 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5723 pAddTsReqParams->tspec.minPhyRate;
5724 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5725 pAddTsReqParams->tspec.surplusBw;
5726 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5727 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 /* TODO: tAddTsParams doesn't have the following fields */
5729#if 0
5730 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5731 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5732 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5733 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5734#endif
5735 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5736
5737 pWdaParams->pWdaContext = pWDA;
5738 /* Store ADD TS pointer, as this will be used for response */
5739 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 /* store Params pass it to WDI */
5741 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 status = WDI_AddTSReq(wdiAddTSReqParam,
5743 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 if(IS_WDI_STATUS_FAILURE(status))
5745 {
5746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5747 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5749 vos_mem_free(pWdaParams);
5750 pAddTsReqParams->status = eSIR_FAILURE ;
5751 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5752 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005753 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005754}
5755
Jeff Johnson295189b2012-06-20 16:38:30 -07005756/*
5757 * FUNCTION: WDA_DelTSReqCallback
5758 * send DEL TS RSP back to PE
5759 */
5760void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5761{
5762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005764 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5766 vos_mem_free(pWdaParams->wdaMsgParam) ;
5767 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005768 /*
5769 * No respone required for WDA_DEL_TS_REQ so just free the request
5770 * param here
5771 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 return ;
5773}
5774
Jeff Johnson295189b2012-06-20 16:38:30 -07005775/*
5776 * FUNCTION: WDA_ProcessDelTSReq
5777 * Request to WDI to Update the DELTS REQ params.
5778 */
5779VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5780 tDelTsParams *pDelTSReqParams)
5781{
5782 WDI_Status status = WDI_STATUS_SUCCESS ;
5783 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5784 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5785 sizeof(WDI_DelTSReqParamsType)) ;
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 == wdiDelTSReqParam)
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(wdiDelTSReqParam);
5803 return VOS_STATUS_E_NOMEM;
5804 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005805 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5806 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5807 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5808 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5809 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005810 pWdaParams->pWdaContext = pWDA;
5811 /* Store DEL TS pointer, as this will be used for response */
5812 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005813 /* store Params pass it to WDI */
5814 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 status = WDI_DelTSReq(wdiDelTSReqParam,
5816 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 if(IS_WDI_STATUS_FAILURE(status))
5818 {
5819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5820 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5822 vos_mem_free(pWdaParams->wdaMsgParam);
5823 vos_mem_free(pWdaParams);
5824 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005825 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005826}
Jeff Johnson295189b2012-06-20 16:38:30 -07005827/*
5828 * FUNCTION: WDA_UpdateBeaconParamsCallback
5829 * Free the memory. No need to send any response to PE in this case
5830 */
5831void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5832{
5833 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005835 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 if(NULL == pWdaParams)
5837 {
5838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005839 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005840 VOS_ASSERT(0) ;
5841 return ;
5842 }
5843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5844 vos_mem_free(pWdaParams->wdaMsgParam) ;
5845 vos_mem_free(pWdaParams);
5846 /*
5847 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5848 * param here
5849 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005850 return ;
5851}
Jeff Johnson295189b2012-06-20 16:38:30 -07005852/*
5853 * FUNCTION: WDA_ProcessUpdateBeaconParams
5854 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5855 */
5856VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5857 tUpdateBeaconParams *pUpdateBeaconParams)
5858{
5859 WDI_Status status = WDI_STATUS_SUCCESS ;
5860 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5861 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5862 sizeof(WDI_UpdateBeaconParamsType)) ;
5863 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005865 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005866 if(NULL == wdiUpdateBeaconParams)
5867 {
5868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 VOS_ASSERT(0);
5871 return VOS_STATUS_E_NOMEM;
5872 }
5873 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5874 if(NULL == pWdaParams)
5875 {
5876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005877 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 VOS_ASSERT(0);
5879 vos_mem_free(wdiUpdateBeaconParams);
5880 return VOS_STATUS_E_NOMEM;
5881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005882 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5883 pUpdateBeaconParams->bssIdx;
5884 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5885 pUpdateBeaconParams->fShortPreamble;
5886 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5887 pUpdateBeaconParams->fShortSlotTime;
5888 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5889 pUpdateBeaconParams->beaconInterval;
5890 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5891 pUpdateBeaconParams->llaCoexist;
5892 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5893 pUpdateBeaconParams->llbCoexist;
5894 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5895 pUpdateBeaconParams->llgCoexist;
5896 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5897 pUpdateBeaconParams->ht20MhzCoexist;
5898 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5899 pUpdateBeaconParams->llnNonGFCoexist;
5900 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5901 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5902 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5903 pUpdateBeaconParams->fRIFSMode;
5904 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5905 pUpdateBeaconParams->paramChangeBitmap;
5906 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5907
5908 pWdaParams->pWdaContext = pWDA;
5909 /* Store UpdateBeacon Req pointer, as this will be used for response */
5910 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 /* store Params pass it to WDI */
5912 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005913 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5914 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5915 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 if(IS_WDI_STATUS_FAILURE(status))
5917 {
5918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5919 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5921 vos_mem_free(pWdaParams->wdaMsgParam);
5922 vos_mem_free(pWdaParams);
5923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005925}
Jeff Johnson295189b2012-06-20 16:38:30 -07005926#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005927/*
5928 * FUNCTION: WDA_TSMStatsReqCallback
5929 * send TSM Stats RSP back to PE
5930 */
5931void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5932{
5933 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5934 tWDA_CbContext *pWDA = NULL;
5935 tTSMStats *pTsmRspParams = NULL;
5936
5937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005938 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 if(NULL == pWdaParams)
5940 {
5941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005942 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005943 VOS_ASSERT(0) ;
5944 return ;
5945 }
5946 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5947 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 if( NULL == pTsmRspParams )
5949 {
5950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005951 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 VOS_ASSERT( 0 );
5953 return ;
5954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5956 vos_mem_free(pWdaParams);
5957
5958 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5959 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5960 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5961 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5962 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5963 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5964 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5965 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5966 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5967 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005969 return ;
5970}
5971
5972
Jeff Johnson295189b2012-06-20 16:38:30 -07005973/*
5974 * FUNCTION: WDA_ProcessTsmStatsReq
5975 * Request to WDI to get the TSM Stats params.
5976 */
5977VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5978 tTSMStats *pTsmStats)
5979{
5980 WDI_Status status = WDI_STATUS_SUCCESS ;
5981 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5982 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005984 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005985 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5986 sizeof(WDI_TSMStatsReqParamsType));
5987 if(NULL == wdiTSMReqParam)
5988 {
5989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005990 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 VOS_ASSERT(0);
5992 return VOS_STATUS_E_NOMEM;
5993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005994 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5995 if(NULL == pWdaParams)
5996 {
5997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005999 VOS_ASSERT(0);
6000 vos_mem_free(wdiTSMReqParam);
6001 return VOS_STATUS_E_NOMEM;
6002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6004 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6005 pTsmStats->bssId,
6006 sizeof(wpt_macAddr));
6007 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6008
6009 pWdaParams->pWdaContext = pWDA;
6010 /* Store TSM Stats pointer, as this will be used for response */
6011 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 /* store Params pass it to WDI */
6013 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 status = WDI_TSMStatsReq(wdiTSMReqParam,
6015 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006016 if(IS_WDI_STATUS_FAILURE(status))
6017 {
6018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6019 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
6020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6021 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08006022 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006024 return CONVERT_WDI2VOS_STATUS(status) ;
6025}
6026#endif
6027/*
6028 * FUNCTION: WDA_SendBeaconParamsCallback
6029 * No need to send any response to PE in this case
6030 */
6031void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6032{
6033
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006035 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006036 return ;
6037}
Jeff Johnson295189b2012-06-20 16:38:30 -07006038/*
6039 * FUNCTION: WDA_ProcessSendBeacon
6040 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6041 * start beacon trasmission
6042 */
6043VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6044 tSendbeaconParams *pSendbeaconParams)
6045{
6046 WDI_Status status = WDI_STATUS_SUCCESS ;
6047 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006049 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006050 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6051 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6052 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6053 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6055 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306056 /* p2pIeOffset should be atleast greater than timIeOffset */
6057 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6058 (pSendbeaconParams->p2pIeOffset <
6059 pSendbeaconParams->timIeOffset))
6060 {
6061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6062 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6063 VOS_ASSERT( 0 );
6064 return WDI_STATUS_E_FAILURE;
6065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6067 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 /* Copy the beacon template to local buffer */
6069 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6070 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6071 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6072
Jeff Johnson295189b2012-06-20 16:38:30 -07006073 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6074 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 if(IS_WDI_STATUS_FAILURE(status))
6076 {
6077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6078 "Failure in SEND BEACON REQ Params WDI API" );
6079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 vos_mem_free(pSendbeaconParams);
6081 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082}
Jeff Johnson295189b2012-06-20 16:38:30 -07006083/*
6084 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6085 * No need to send any response to PE in this case
6086 */
6087void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6088{
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006090 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 return ;
6092}
6093
Jeff Johnson295189b2012-06-20 16:38:30 -07006094/*
6095 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6096 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6097 * send probe response
6098 */
6099VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6100 tSendProbeRespParams *pSendProbeRspParams)
6101{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006102 WDI_Status status = WDI_STATUS_SUCCESS;
6103 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6104 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006106 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006107
6108 if (!wdiSendProbeRspParam)
6109 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6110
Jeff Johnson295189b2012-06-20 16:38:30 -07006111 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006112 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006114 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006116 /* Copy the Probe Response template to local buffer */
6117 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006118 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 pSendProbeRspParams->pProbeRespTemplate,
6120 pSendProbeRspParams->probeRespTemplateLen);
6121 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006122 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006123 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6124 WDI_PROBE_REQ_BITMAP_IE_LEN);
6125
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006126 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006127
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006128 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 if(IS_WDI_STATUS_FAILURE(status))
6131 {
6132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6133 "Failure in SEND Probe RSP Params WDI API" );
6134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006136 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006137 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006138}
Jeff Johnson295189b2012-06-20 16:38:30 -07006139#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6140/*
6141 * FUNCTION: WDA_SetMaxTxPowerCallBack
6142 * send the response to PE with power value received from WDI
6143 */
6144void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6145 void* pUserData)
6146{
6147 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6148 tWDA_CbContext *pWDA = NULL;
6149 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6150
6151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006152 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 if(NULL == pWdaParams)
6154 {
6155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006156 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006157 VOS_ASSERT(0) ;
6158 return ;
6159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6161 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 if( NULL == pMaxTxPowerParams )
6163 {
6164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006165 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006166 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6168 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 return ;
6170 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006171
Jeff Johnson295189b2012-06-20 16:38:30 -07006172
6173 /*need to free memory for the pointers used in the
6174 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6176 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006178
Jeff Johnson295189b2012-06-20 16:38:30 -07006179
6180 /* send response to UMAC*/
6181 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6182
6183 return;
6184}
Jeff Johnson295189b2012-06-20 16:38:30 -07006185/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006186 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006187 * Request to WDI to send set Max Tx Power Request
6188 */
6189 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6190 tMaxTxPowerParams *MaxTxPowerParams)
6191{
6192 WDI_Status status = WDI_STATUS_SUCCESS;
6193 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6194 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006195
Jeff Johnson295189b2012-06-20 16:38:30 -07006196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006197 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006198
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6200 sizeof(WDI_SetMaxTxPowerParamsType));
6201 if(NULL == wdiSetMaxTxPowerParams)
6202 {
6203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006204 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 VOS_ASSERT(0);
6206 return VOS_STATUS_E_NOMEM;
6207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006208 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6209 if(NULL == pWdaParams)
6210 {
6211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006212 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 vos_mem_free(wdiSetMaxTxPowerParams);
6214 VOS_ASSERT(0);
6215 return VOS_STATUS_E_NOMEM;
6216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 /* Copy.Max.Tx.Power Params to WDI structure */
6218 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6219 MaxTxPowerParams->bssId,
6220 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6222 MaxTxPowerParams->selfStaMacAddr,
6223 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006224 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6225 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 pWdaParams->pWdaContext = pWDA;
6228 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006229 /* store Params pass it to WDI */
6230 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006231 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6232 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 if(IS_WDI_STATUS_FAILURE(status))
6234 {
6235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6236 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6237 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6238 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006239 /* send response to UMAC*/
6240 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 }
6242 return CONVERT_WDI2VOS_STATUS(status);
6243
6244}
Jeff Johnson295189b2012-06-20 16:38:30 -07006245#endif
schang86c22c42013-03-13 18:41:24 -07006246
6247/*
6248 * FUNCTION: WDA_SetTxPowerCallBack
6249 * send the response to PE with power value received from WDI
6250 */
6251void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6252 void* pUserData)
6253{
6254 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6255 tWDA_CbContext *pWDA = NULL;
6256 tSirSetTxPowerReq *pTxPowerParams = NULL;
6257
6258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6259 "<------ %s ", __func__);
6260 if(NULL == pWdaParams)
6261 {
6262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6263 "%s: pWdaParams received NULL", __func__);
6264 VOS_ASSERT(0) ;
6265 return ;
6266 }
6267 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6268 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6269 if(NULL == pTxPowerParams)
6270 {
6271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6272 "%s: pTxPowerParams received NULL " ,__func__);
6273 VOS_ASSERT(0);
6274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6275 vos_mem_free(pWdaParams);
6276 return ;
6277 }
6278
6279 /*need to free memory for the pointers used in the
6280 WDA Process.Set Max Tx Power Req function*/
6281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6282 vos_mem_free(pWdaParams);
6283
6284 /* send response to UMAC*/
6285 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6286 return;
6287}
6288
6289/*
6290 * FUNCTION: WDA_ProcessSetTxPowerReq
6291 * Request to WDI to send set Tx Power Request
6292 */
6293 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6294 tSirSetTxPowerReq *txPowerParams)
6295{
6296 WDI_Status status = WDI_STATUS_SUCCESS;
6297 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6298 tWDA_ReqParams *pWdaParams = NULL;
6299
6300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6301 "------> %s ", __func__);
6302
6303 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6304 sizeof(WDI_SetTxPowerParamsType));
6305 if(NULL == wdiSetTxPowerParams)
6306 {
6307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6308 "%s: VOS MEM Alloc Failure", __func__);
6309 VOS_ASSERT(0);
6310 return VOS_STATUS_E_NOMEM;
6311 }
6312 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6313 if(NULL == pWdaParams)
6314 {
6315 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6316 "%s: VOS MEM Alloc Failure", __func__);
6317 vos_mem_free(wdiSetTxPowerParams);
6318 VOS_ASSERT(0);
6319 return VOS_STATUS_E_NOMEM;
6320 }
6321 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6322 txPowerParams->bssIdx;
6323 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6324 txPowerParams->mwPower;
6325 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6326 pWdaParams->pWdaContext = pWDA;
6327 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6328 /* store Params pass it to WDI */
6329 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6330 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6331 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6332 if(IS_WDI_STATUS_FAILURE(status))
6333 {
6334 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6335 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6337 vos_mem_free(pWdaParams);
6338 /* send response to UMAC*/
6339 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6340 }
6341 return CONVERT_WDI2VOS_STATUS(status);
6342}
6343
Jeff Johnson295189b2012-06-20 16:38:30 -07006344/*
6345 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6346 * Free the memory. No need to send any response to PE in this case
6347 */
6348void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6349{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006350 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6351
Jeff Johnson295189b2012-06-20 16:38:30 -07006352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006353 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006354
6355 if(NULL == pWdaParams)
6356 {
6357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006358 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006359 VOS_ASSERT(0) ;
6360 return ;
6361 }
6362
6363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6364 vos_mem_free(pWdaParams->wdaMsgParam) ;
6365 vos_mem_free(pWdaParams);
6366
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 /*
6368 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6369 * so just free the request param here
6370 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006371 return ;
6372}
6373
Jeff Johnson295189b2012-06-20 16:38:30 -07006374/*
6375 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6376 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6377 */
6378VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6379 tP2pPsParams *pP2pPsConfigParams)
6380{
6381 WDI_Status status = WDI_STATUS_SUCCESS ;
6382 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6383 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6384 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006385 tWDA_ReqParams *pWdaParams = NULL;
6386
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006388 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 if(NULL == wdiSetP2PGONOAReqParam)
6390 {
6391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006392 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006393 VOS_ASSERT(0);
6394 return VOS_STATUS_E_NOMEM;
6395 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006396
6397 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6398 if(NULL == pWdaParams)
6399 {
6400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006401 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006402 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006403 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006404 VOS_ASSERT(0);
6405 return VOS_STATUS_E_NOMEM;
6406 }
6407
Jeff Johnson295189b2012-06-20 16:38:30 -07006408 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6409 pP2pPsConfigParams->opp_ps;
6410 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6411 pP2pPsConfigParams->ctWindow;
6412 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6413 pP2pPsConfigParams->count;
6414 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6415 pP2pPsConfigParams->duration;
6416 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6417 pP2pPsConfigParams->interval;
6418 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6419 pP2pPsConfigParams->single_noa_duration;
6420 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6421 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006422
Jeff Johnson295189b2012-06-20 16:38:30 -07006423 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6424 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006425 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6426
Jeff Johnson295189b2012-06-20 16:38:30 -07006427 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006428 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6429 pWdaParams->pWdaContext = pWDA;
6430
Jeff Johnson295189b2012-06-20 16:38:30 -07006431 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006432 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6433
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 if(IS_WDI_STATUS_FAILURE(status))
6435 {
6436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6437 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6439 vos_mem_free(pWdaParams->wdaMsgParam);
6440 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006441 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006442 return CONVERT_WDI2VOS_STATUS(status);
6443
Jeff Johnson295189b2012-06-20 16:38:30 -07006444}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306445
6446#ifdef FEATURE_WLAN_TDLS
6447/*
6448 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6449 * Free the memory. No need to send any response to PE in this case
6450 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306451void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6452 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306453{
6454 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6455 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306456 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306457
6458
6459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6460 "<------ %s " ,__func__);
6461 if(NULL == pWdaParams)
6462 {
6463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6464 "%s: pWdaParams received NULL", __func__);
6465 VOS_ASSERT(0) ;
6466 return ;
6467 }
6468 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6469
6470 if(NULL == pWdaParams)
6471 {
6472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6473 "%s: pWdaParams received NULL", __func__);
6474 VOS_ASSERT(0) ;
6475 return ;
6476 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306477 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6478 if( NULL == pTdlsLinkEstablishParams )
6479 {
6480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6481 "%s: pTdlsLinkEstablishParams "
6482 "received NULL " ,__func__);
6483 VOS_ASSERT(0);
6484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6485 vos_mem_free(pWdaParams);
6486 return ;
6487 }
6488 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6489 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306491 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306492 /* send response to UMAC*/
6493 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6494
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306495 return ;
6496}
6497
6498VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6499 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6500{
6501 WDI_Status status = WDI_STATUS_SUCCESS ;
6502 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6503 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6504 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6505 tWDA_ReqParams *pWdaParams = NULL;
6506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6507 "------> %s " ,__func__);
6508 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6509 {
6510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6511 "%s: VOS MEM Alloc Failure", __func__);
6512 VOS_ASSERT(0);
6513 return VOS_STATUS_E_NOMEM;
6514 }
6515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6516 if(NULL == pWdaParams)
6517 {
6518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6519 "%s: VOS MEM Alloc Failure", __func__);
6520 vos_mem_free(pTdlsLinkEstablishParams);
6521 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6522 VOS_ASSERT(0);
6523 return VOS_STATUS_E_NOMEM;
6524 }
6525 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306526 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306527 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306528 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306529 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306530 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306531 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306532 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306533 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306534 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306535
6536 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6537 /* Store msg pointer from PE, as this will be used for response */
6538 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6539 /* store Params pass it to WDI */
6540 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6541 pWdaParams->pWdaContext = pWDA;
6542
6543 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6544 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6545 WDA_SetTDLSLinkEstablishReqParamsCallback,
6546 pWdaParams);
6547 if(IS_WDI_STATUS_FAILURE(status))
6548 {
6549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6550 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6552 vos_mem_free(pWdaParams->wdaMsgParam);
6553 vos_mem_free(pWdaParams);
6554 }
6555 return CONVERT_WDI2VOS_STATUS(status);
6556}
6557#endif
6558
6559
Jeff Johnson295189b2012-06-20 16:38:30 -07006560#ifdef WLAN_FEATURE_VOWIFI_11R
6561/*
6562 * FUNCTION: WDA_AggrAddTSReqCallback
6563 * send ADD AGGREGATED TS RSP back to PE
6564 */
6565void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6566{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6568 tWDA_CbContext *pWDA;
6569 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006570 int i;
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__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006573 if(NULL == pWdaParams)
6574 {
6575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006576 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006577 VOS_ASSERT(0) ;
6578 return ;
6579 }
6580
6581 pWDA = pWdaParams->pWdaContext;
6582 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006583
6584 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6585 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006586 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006588 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006589
6590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6591 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006592 return ;
6593}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006594/*
6595 * FUNCTION: WDA_ProcessAddTSReq
6596 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6597 */
6598VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6599 tAggrAddTsParams *pAggrAddTsReqParams)
6600{
6601 WDI_Status status = WDI_STATUS_SUCCESS ;
6602 int i;
6603 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006604 tWDA_ReqParams *pWdaParams = NULL;
6605
6606
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006608 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6610 sizeof(WDI_AggrAddTSReqParamsType)) ;
6611 if(NULL == wdiAggrAddTSReqParam)
6612 {
6613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006614 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006615 VOS_ASSERT(0);
6616 return VOS_STATUS_E_NOMEM;
6617 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006618
6619
6620 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6621 if(NULL == pWdaParams)
6622 {
6623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006624 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006625 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006626 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006627 VOS_ASSERT(0);
6628 return VOS_STATUS_E_NOMEM;
6629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006630 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6631 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6632 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6634 {
6635 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6636 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6637 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006638 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6639 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6640 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6641 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6642 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6643 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6644 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6645 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6646 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6647 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6648 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6649 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6650 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6651 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6652 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6653 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6655 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006656 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6657 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6658 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6659 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6660 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6661 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6662 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6663 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6664 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6665 pAggrAddTsReqParams->tspec[i].inactInterval;
6666 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6667 pAggrAddTsReqParams->tspec[i].suspendInterval;
6668 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6669 pAggrAddTsReqParams->tspec[i].svcStartTime;
6670 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6671 pAggrAddTsReqParams->tspec[i].minDataRate;
6672 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6673 pAggrAddTsReqParams->tspec[i].meanDataRate;
6674 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6675 pAggrAddTsReqParams->tspec[i].peakDataRate;
6676 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6677 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6678 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6679 pAggrAddTsReqParams->tspec[i].delayBound;
6680 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6681 pAggrAddTsReqParams->tspec[i].minPhyRate;
6682 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6683 pAggrAddTsReqParams->tspec[i].surplusBw;
6684 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6685 pAggrAddTsReqParams->tspec[i].mediumTime;
6686 }
6687
6688 /* TODO: tAggrAddTsParams doesn't have the following fields */
6689#if 0
6690 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6691 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6692 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6693 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6694#endif
6695 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6696
6697 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006698 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006700 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6701
6702 pWdaParams->pWdaContext = pWDA;
6703
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006705 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6706
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 if(IS_WDI_STATUS_FAILURE(status))
6708 {
6709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6710 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6712 vos_mem_free(pWdaParams);
6713
6714 /* send the failure response back to PE*/
6715 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6716 {
6717 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6718 }
6719
6720 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6721 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006723 return CONVERT_WDI2VOS_STATUS(status) ;
6724}
6725#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006726/*
6727 * FUNCTION: WDA_EnterImpsReqCallback
6728 * send Enter IMPS RSP back to PE
6729 */
6730void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6731{
6732 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006734 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006735 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 return ;
6737}
Jeff Johnson295189b2012-06-20 16:38:30 -07006738/*
6739 * FUNCTION: WDA_ProcessEnterImpsReq
6740 * Request to WDI to Enter IMPS power state.
6741 */
6742VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6743{
6744 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006746 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 if(IS_WDI_STATUS_FAILURE(status))
6749 {
6750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6751 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006752 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 return CONVERT_WDI2VOS_STATUS(status) ;
6755}
Jeff Johnson295189b2012-06-20 16:38:30 -07006756/*
6757 * FUNCTION: WDA_ExitImpsReqCallback
6758 * send Exit IMPS RSP back to PE
6759 */
6760void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6761{
6762 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006764 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006765 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 return ;
6767}
Jeff Johnson295189b2012-06-20 16:38:30 -07006768/*
6769 * FUNCTION: WDA_ProcessExitImpsReq
6770 * Request to WDI to Exit IMPS power state.
6771 */
6772VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6773{
6774 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006776 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 if(IS_WDI_STATUS_FAILURE(status))
6779 {
6780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6781 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006782 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 return CONVERT_WDI2VOS_STATUS(status) ;
6785}
Jeff Johnson295189b2012-06-20 16:38:30 -07006786/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006787 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 * send Enter BMPS RSP back to PE
6789 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006790void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006791{
6792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6793 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006794 tEnterBmpsParams *pEnterBmpsRspParams;
6795
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006797 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 if(NULL == pWdaParams)
6799 {
6800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006801 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006802 VOS_ASSERT(0) ;
6803 return ;
6804 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006805
6806 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6807 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6808
6809 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006810 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006811
6812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006813 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006814 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6815
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 return ;
6817}
Jeff Johnson295189b2012-06-20 16:38:30 -07006818/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006819 * FUNCTION: WDA_EnterBmpsReqCallback
6820 * Free memory and send Enter BMPS RSP back to PE.
6821 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
6822 */
6823void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6824{
6825 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6826 tWDA_CbContext *pWDA;
6827 tEnterBmpsParams *pEnterBmpsRspParams;
6828
6829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6830 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6831
6832 if(NULL == pWdaParams)
6833 {
6834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6835 "%s: pWdaParams received NULL", __func__);
6836 VOS_ASSERT(0);
6837 return;
6838 }
6839
6840 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6841 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6842 pEnterBmpsRspParams->status = wdiStatus;
6843
6844 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6845 {
6846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6847 vos_mem_free(pWdaParams);
6848 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
6849 }
6850
6851 return;
6852}
6853/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 * FUNCTION: WDA_ProcessEnterBmpsReq
6855 * Request to WDI to Enter BMPS power state.
6856 */
6857VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6858 tEnterBmpsParams *pEnterBmpsReqParams)
6859{
6860 WDI_Status status = WDI_STATUS_SUCCESS;
6861 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6862 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006864 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006865 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6866 {
6867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006868 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 VOS_ASSERT(0);
6870 return VOS_STATUS_E_FAILURE;
6871 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6873 if (NULL == wdiEnterBmpsReqParams)
6874 {
6875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006876 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006878 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6879 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 return VOS_STATUS_E_NOMEM;
6881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6883 if (NULL == pWdaParams)
6884 {
6885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006886 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006887 VOS_ASSERT(0);
6888 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006889 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6890 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 return VOS_STATUS_E_NOMEM;
6892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6894 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6895 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6896 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 // For CCX and 11R Roaming
6898 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6899 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6900 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07006901 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
6902 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006903
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 /* Store param pointer as passed in by caller */
6905 /* store Params pass it to WDI */
6906 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006907 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006908 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006909 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006910 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006911 if (IS_WDI_STATUS_FAILURE(status))
6912 {
6913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6914 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006916 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006918 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006920 return CONVERT_WDI2VOS_STATUS(status);
6921}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006922
6923
6924static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6925 WDI_Status wdiStatus,
6926 tExitBmpsParams *pExitBmpsReqParams)
6927{
6928 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6929
6930 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6931}
6932
6933
Jeff Johnson295189b2012-06-20 16:38:30 -07006934/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006935 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 * send Exit BMPS RSP back to PE
6937 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006938void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006939{
6940 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6941 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006942 tExitBmpsParams *pExitBmpsRspParams;
6943
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006945 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 if(NULL == pWdaParams)
6947 {
6948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006949 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006950 VOS_ASSERT(0) ;
6951 return ;
6952 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006953
6954 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6955 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6956
6957 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006958 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006959
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6961 vos_mem_free(pWdaParams) ;
6962
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006963 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 return ;
6965}
Jeff Johnson295189b2012-06-20 16:38:30 -07006966/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006967 * FUNCTION: WDA_ExitBmpsReqCallback
6968 * Free memory and send Exit BMPS RSP back to PE.
6969 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
6970 */
6971void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6972{
6973 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6974 tWDA_CbContext *pWDA;
6975 tExitBmpsParams *pExitBmpsRspParams;
6976
6977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6978 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6979
6980 if(NULL == pWdaParams)
6981 {
6982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6983 "%s: pWdaParams received NULL", __func__);
6984 VOS_ASSERT(0);
6985 return;
6986 }
6987
6988 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6989 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6990 pExitBmpsRspParams->status = wdiStatus;
6991
6992 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6993 {
6994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6995 vos_mem_free(pWdaParams);
6996 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
6997 }
6998
6999 return;
7000}
7001/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007002 * FUNCTION: WDA_ProcessExitBmpsReq
7003 * Request to WDI to Exit BMPS power state.
7004 */
7005VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7006 tExitBmpsParams *pExitBmpsReqParams)
7007{
7008 WDI_Status status = WDI_STATUS_SUCCESS ;
7009 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7010 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7011 sizeof(WDI_ExitBmpsReqParamsType)) ;
7012 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007014 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007015 if(NULL == wdiExitBmpsReqParams)
7016 {
7017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007018 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007020 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 return VOS_STATUS_E_NOMEM;
7022 }
7023 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7024 if(NULL == pWdaParams)
7025 {
7026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007027 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 VOS_ASSERT(0);
7029 vos_mem_free(wdiExitBmpsReqParams);
7030 return VOS_STATUS_E_NOMEM;
7031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007033
7034 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7035
Yue Ma7f44bbe2013-04-12 11:47:39 -07007036 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7037 wdiExitBmpsReqParams->pUserData = pWdaParams;
7038
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 /* Store param pointer as passed in by caller */
7040 /* store Params pass it to WDI */
7041 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7042 pWdaParams->pWdaContext = pWDA;
7043 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007045 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 if(IS_WDI_STATUS_FAILURE(status))
7047 {
7048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7049 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7051 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007052 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007054 return CONVERT_WDI2VOS_STATUS(status) ;
7055}
Jeff Johnson295189b2012-06-20 16:38:30 -07007056/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007057 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 * send Enter UAPSD RSP back to PE
7059 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007060void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007061{
7062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7063 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007064 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007066 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 if(NULL == pWdaParams)
7068 {
7069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007070 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007071 VOS_ASSERT(0) ;
7072 return ;
7073 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007074
7075 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7076 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7077
7078 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007079 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007080
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7082 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007083 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007084 return ;
7085}
Jeff Johnson295189b2012-06-20 16:38:30 -07007086/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007087 * FUNCTION: WDA_EnterUapsdReqCallback
7088 * Free memory and send Enter UAPSD RSP back to PE.
7089 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7090 */
7091void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7092{
7093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7094 tWDA_CbContext *pWDA;
7095 tUapsdParams *pEnterUapsdRsqParams;
7096
7097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7098 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7099
7100 if(NULL == pWdaParams)
7101 {
7102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7103 "%s: pWdaParams received NULL", __func__);
7104 VOS_ASSERT(0);
7105 return;
7106 }
7107
7108 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7109 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7110 pEnterUapsdRsqParams->status = wdiStatus;
7111
7112 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7113 {
7114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7115 vos_mem_free(pWdaParams);
7116 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7117 }
7118
7119 return;
7120}
7121/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007122 * FUNCTION: WDA_ProcessEnterUapsdReq
7123 * Request to WDI to Enter UAPSD power state.
7124 */
7125VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7126 tUapsdParams *pEnterUapsdReqParams)
7127{
7128 WDI_Status status = WDI_STATUS_SUCCESS ;
7129 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7130 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7131 sizeof(WDI_EnterUapsdReqParamsType)) ;
7132 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007134 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 if(NULL == wdiEnterUapsdReqParams)
7136 {
7137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007138 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 VOS_ASSERT(0);
7140 return VOS_STATUS_E_NOMEM;
7141 }
7142 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7143 if(NULL == pWdaParams)
7144 {
7145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 VOS_ASSERT(0);
7148 vos_mem_free(wdiEnterUapsdReqParams);
7149 return VOS_STATUS_E_NOMEM;
7150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7152 pEnterUapsdReqParams->beDeliveryEnabled;
7153 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7154 pEnterUapsdReqParams->beTriggerEnabled;
7155 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7156 pEnterUapsdReqParams->bkDeliveryEnabled;
7157 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7158 pEnterUapsdReqParams->bkTriggerEnabled;
7159 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7160 pEnterUapsdReqParams->viDeliveryEnabled;
7161 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7162 pEnterUapsdReqParams->viTriggerEnabled;
7163 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7164 pEnterUapsdReqParams->voDeliveryEnabled;
7165 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7166 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007167 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007168
Yue Ma7f44bbe2013-04-12 11:47:39 -07007169 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7170 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007171
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 /* Store param pointer as passed in by caller */
7173 /* store Params pass it to WDI */
7174 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7175 pWdaParams->pWdaContext = pWDA;
7176 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007178 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 if(IS_WDI_STATUS_FAILURE(status))
7180 {
7181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7182 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7183 vos_mem_free(pWdaParams->wdaMsgParam) ;
7184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7185 vos_mem_free(pWdaParams) ;
7186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007187 return CONVERT_WDI2VOS_STATUS(status) ;
7188}
Jeff Johnson295189b2012-06-20 16:38:30 -07007189/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007190 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 * send Exit UAPSD RSP back to PE
7192 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007193void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007194{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007195
7196 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7197 tWDA_CbContext *pWDA;
7198 tExitUapsdParams *pExitUapsdRspParams;
7199
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007201 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007202 if(NULL == pWdaParams)
7203 {
7204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007205 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007206 VOS_ASSERT(0);
7207 return;
7208 }
7209
7210 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7211 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7212
7213 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007214 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007215
7216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7217 vos_mem_free(pWdaParams) ;
7218
7219 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 return ;
7221}
Jeff Johnson295189b2012-06-20 16:38:30 -07007222/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007223 * FUNCTION: WDA_ExitUapsdReqCallback
7224 * Free memory and send Exit UAPSD RSP back to PE.
7225 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7226 */
7227void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7228{
7229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7230 tWDA_CbContext *pWDA;
7231 tExitUapsdParams *pExitUapsdRspParams;
7232
7233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7234 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7235
7236 if(NULL == pWdaParams)
7237 {
7238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7239 "%s: pWdaParams received NULL", __func__);
7240 VOS_ASSERT(0);
7241 return;
7242 }
7243
7244 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7245 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7246 pExitUapsdRspParams->status = wdiStatus;
7247
7248 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7249 {
7250 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7251 vos_mem_free(pWdaParams);
7252 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7253 }
7254
7255 return;
7256}
7257/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007258 * FUNCTION: WDA_ProcessExitUapsdReq
7259 * Request to WDI to Exit UAPSD power state.
7260 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007261VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7262 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007263{
7264 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007265 tWDA_ReqParams *pWdaParams ;
7266 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7267 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7268 sizeof(WDI_ExitUapsdReqParamsType)) ;
7269
Jeff Johnson295189b2012-06-20 16:38:30 -07007270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007271 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007272
7273 if(NULL == wdiExitUapsdReqParams)
7274 {
7275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007276 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007277 VOS_ASSERT(0);
7278 return VOS_STATUS_E_NOMEM;
7279 }
7280 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7281 if(NULL == pWdaParams)
7282 {
7283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007284 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007285 VOS_ASSERT(0);
7286 vos_mem_free(wdiExitUapsdReqParams);
7287 return VOS_STATUS_E_NOMEM;
7288 }
7289
7290 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007291 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7292 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007293
7294 /* Store param pointer as passed in by caller */
7295 /* store Params pass it to WDI */
7296 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7297 pWdaParams->pWdaContext = pWDA;
7298 pWdaParams->wdaMsgParam = pExitUapsdParams;
7299
Yue Ma7f44bbe2013-04-12 11:47:39 -07007300 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007301 if(IS_WDI_STATUS_FAILURE(status))
7302 {
7303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7304 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007305 vos_mem_free(pWdaParams->wdaMsgParam) ;
7306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7307 vos_mem_free(pWdaParams) ;
7308
Jeff Johnson295189b2012-06-20 16:38:30 -07007309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007310 return CONVERT_WDI2VOS_STATUS(status) ;
7311}
7312
Jeff Johnson295189b2012-06-20 16:38:30 -07007313/*
7314 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7315 *
7316 */
7317void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7318{
7319 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007321 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007322 if(NULL == pWdaParams)
7323 {
7324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007325 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007326 VOS_ASSERT(0) ;
7327 return ;
7328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 if( pWdaParams != NULL )
7330 {
7331 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7332 {
7333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7334 }
7335 if( pWdaParams->wdaMsgParam != NULL )
7336 {
7337 vos_mem_free(pWdaParams->wdaMsgParam) ;
7338 }
7339 vos_mem_free(pWdaParams) ;
7340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007341 return ;
7342}
Jeff Johnson295189b2012-06-20 16:38:30 -07007343/*
7344 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7345 * Request to WDI to set the power save params at start.
7346 */
7347VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7348 tSirPowerSaveCfg *pPowerSaveCfg)
7349{
7350 WDI_Status status = WDI_STATUS_SUCCESS ;
7351 tHalCfg *tlvStruct = NULL ;
7352 tANI_U8 *tlvStructStart = NULL ;
7353 v_PVOID_t *configParam;
7354 tANI_U32 configParamSize;
7355 tANI_U32 *configDataValue;
7356 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7357 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007359 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007360 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7361 {
7362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007363 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007364 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007365 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 return VOS_STATUS_E_FAILURE;
7367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007368 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7369 if (NULL == wdiPowerSaveCfg)
7370 {
7371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007372 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007374 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007375 return VOS_STATUS_E_NOMEM;
7376 }
7377 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7378 if(NULL == pWdaParams)
7379 {
7380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007382 VOS_ASSERT(0);
7383 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007384 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 return VOS_STATUS_E_NOMEM;
7386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7388 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007389 if(NULL == configParam)
7390 {
7391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007392 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007393 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007394 vos_mem_free(pWdaParams);
7395 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007396 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007397 return VOS_STATUS_E_NOMEM;
7398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 vos_mem_set(configParam, configParamSize, 0);
7400 wdiPowerSaveCfg->pConfigBuffer = configParam;
7401 tlvStruct = (tHalCfg *)configParam;
7402 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7404 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7405 tlvStruct->length = sizeof(tANI_U32);
7406 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7407 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7409 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7411 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7412 tlvStruct->length = sizeof(tANI_U32);
7413 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7414 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7416 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7418 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7419 tlvStruct->length = sizeof(tANI_U32);
7420 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7421 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007422 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7423 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007424 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7425 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7426 tlvStruct->length = sizeof(tANI_U32);
7427 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7428 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7430 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007431 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7432 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7433 tlvStruct->length = sizeof(tANI_U32);
7434 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7435 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7437 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7439 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7440 tlvStruct->length = sizeof(tANI_U32);
7441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7442 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7444 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7446 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7447 tlvStruct->length = sizeof(tANI_U32);
7448 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7449 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007450 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7451 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007452 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7453 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7454 tlvStruct->length = sizeof(tANI_U32);
7455 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7456 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7457 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7458 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7460 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7461 tlvStruct->length = sizeof(tANI_U32);
7462 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7463 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7464 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7465 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7467 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7468 tlvStruct->length = sizeof(tANI_U32);
7469 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7470 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7472 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007473 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7474 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7475 tlvStruct->length = sizeof(tANI_U32);
7476 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7477 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7479 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007480 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007481 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 /* store Params pass it to WDI */
7483 pWdaParams->wdaMsgParam = configParam;
7484 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7485 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007486 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7487 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 if(IS_WDI_STATUS_FAILURE(status))
7489 {
7490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7491 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7492 vos_mem_free(pWdaParams->wdaMsgParam);
7493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7494 vos_mem_free(pWdaParams);
7495 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007497 return CONVERT_WDI2VOS_STATUS(status);
7498}
Jeff Johnson295189b2012-06-20 16:38:30 -07007499/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007500 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007501 *
7502 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007503void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007504{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007505 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7506
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007508 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007509
7510 if(NULL == pWdaParams)
7511 {
7512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7513 "%s: pWdaParams received NULL", __func__);
7514 VOS_ASSERT(0);
7515 return ;
7516 }
7517
7518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007519 vos_mem_free(pWdaParams);
7520
Jeff Johnson295189b2012-06-20 16:38:30 -07007521 return ;
7522}
Jeff Johnson295189b2012-06-20 16:38:30 -07007523/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007524 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7525 * Free memory.
7526 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7527 */
7528void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7529{
7530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7531
7532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7533 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7534
7535 if(NULL == pWdaParams)
7536 {
7537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7538 "%s: pWdaParams received NULL", __func__);
7539 VOS_ASSERT(0);
7540 return;
7541 }
7542
7543 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7544 {
7545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7546 vos_mem_free(pWdaParams);
7547 }
7548
7549 return;
7550}
7551/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007552 * FUNCTION: WDA_SetUapsdAcParamsReq
7553 * Request to WDI to set the UAPSD params for an ac (sta mode).
7554 */
7555VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7556 tUapsdInfo *pUapsdInfo)
7557{
7558 WDI_Status status = WDI_STATUS_SUCCESS;
7559 tWDA_CbContext *pWDA = NULL ;
7560 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7561 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7562 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7563 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007565 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007566 if(NULL == wdiUapsdParams)
7567 {
7568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007569 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 VOS_ASSERT(0);
7571 return VOS_STATUS_E_NOMEM;
7572 }
7573 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7574 if(NULL == pWdaParams)
7575 {
7576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 VOS_ASSERT(0);
7579 vos_mem_free(wdiUapsdParams);
7580 return VOS_STATUS_E_NOMEM;
7581 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007582 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7583 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7584 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7585 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7586 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7587 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007588 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7589 wdiUapsdParams->pUserData = pWdaParams;
7590
Jeff Johnson295189b2012-06-20 16:38:30 -07007591 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 pWdaParams->pWdaContext = pWDA;
7593 /* Store param pointer as passed in by caller */
7594 pWdaParams->wdaMsgParam = pUapsdInfo;
7595 /* store Params pass it to WDI */
7596 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007597 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007598 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007599 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007600 if(IS_WDI_STATUS_FAILURE(status))
7601 {
7602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7603 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7605 vos_mem_free(pWdaParams);
7606 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7608 return VOS_STATUS_SUCCESS;
7609 else
7610 return VOS_STATUS_E_FAILURE;
7611
Jeff Johnson295189b2012-06-20 16:38:30 -07007612}
7613/*
7614 * FUNCTION: WDA_ClearUapsdAcParamsReq
7615 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7616 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7617 * and again enter the UPASD with the modified params. Hence the disable
7618 * function was kept empty.
7619 *
7620 */
7621VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7622{
7623 /* do nothing */
7624 return VOS_STATUS_SUCCESS;
7625}
Jeff Johnson295189b2012-06-20 16:38:30 -07007626/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007627 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007628 *
7629 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007630void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007631{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007632 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7633
Jeff Johnson295189b2012-06-20 16:38:30 -07007634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007635 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007636
7637 if(NULL == pWdaParams)
7638 {
7639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007640 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007641 VOS_ASSERT(0) ;
7642 return ;
7643 }
7644
7645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7646 vos_mem_free(pWdaParams->wdaMsgParam);
7647 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007648
Jeff Johnson295189b2012-06-20 16:38:30 -07007649 //print a msg, nothing else to do
7650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007651 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007652 return ;
7653}
Jeff Johnson295189b2012-06-20 16:38:30 -07007654/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007655 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7656 * Free memory.
7657 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7658 */
7659void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7660{
7661 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7662
7663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7664 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7665
7666 if(NULL == pWdaParams)
7667 {
7668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7669 "%s: pWdaParams received NULL", __func__);
7670 VOS_ASSERT(0);
7671 return;
7672 }
7673
7674 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7675 {
7676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7677 vos_mem_free(pWdaParams->wdaMsgParam);
7678 vos_mem_free(pWdaParams);
7679 }
7680
7681 return;
7682}
7683/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007684 * FUNCTION: WDA_UpdateUapsdParamsReq
7685 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7686 */
7687VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7688 tUpdateUapsdParams* pUpdateUapsdInfo)
7689{
7690 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007691 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007692 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7693 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7694 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007695 tWDA_ReqParams *pWdaParams = NULL;
7696
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007698 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007699 if(NULL == wdiUpdateUapsdParams)
7700 {
7701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007702 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007703 VOS_ASSERT(0);
7704 return VOS_STATUS_E_NOMEM;
7705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007706 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7707 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7708 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007709 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7710 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007711
7712 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7713 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007714 {
7715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007716 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007717 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007718 vos_mem_free(pUpdateUapsdInfo);
7719 vos_mem_free(wdiUpdateUapsdParams);
7720 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007722 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007723 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007724 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007725 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7726 pWdaParams->pWdaContext = pWDA;
7727
Jeff Johnson43971f52012-07-17 12:26:56 -07007728 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007729 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007730 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007731
Jeff Johnson43971f52012-07-17 12:26:56 -07007732 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007733 {
7734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7735 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007736 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7738 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007739 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007740 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007741 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007742}
Jeff Johnson295189b2012-06-20 16:38:30 -07007743/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007744 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 *
7746 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007747void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007748{
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(WDI_STATUS_SUCCESS != wdiStatus)
7753 {
7754 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007755 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007757 if(NULL == pWdaParams)
7758 {
7759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007760 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007761 VOS_ASSERT(0) ;
7762 return ;
7763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7765 vos_mem_free(pWdaParams->wdaMsgParam);
7766 vos_mem_free(pWdaParams);
7767 return ;
7768}
Jeff Johnson295189b2012-06-20 16:38:30 -07007769/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007770 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7771 * Free memory.
7772 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7773 */
7774void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7775{
7776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7777
7778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7779 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7780
7781 if(NULL == pWdaParams)
7782 {
7783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7784 "%s: pWdaParams received NULL", __func__);
7785 VOS_ASSERT(0);
7786 return;
7787 }
7788
7789 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7790 {
7791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7792 vos_mem_free(pWdaParams->wdaMsgParam);
7793 vos_mem_free(pWdaParams);
7794 }
7795
7796 return;
7797}
7798/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7800 *
7801 */
7802VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7803 tSirWlanSetRxpFilters *pWlanSuspendParam)
7804{
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007806 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7808 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7809 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7810 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007812 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007813 if(NULL == wdiRxpFilterParams)
7814 {
7815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007816 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 VOS_ASSERT(0);
7818 vos_mem_free(pWlanSuspendParam);
7819 return VOS_STATUS_E_NOMEM;
7820 }
7821 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7822 if(NULL == pWdaParams)
7823 {
7824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007825 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007826 VOS_ASSERT(0);
7827 vos_mem_free(wdiRxpFilterParams);
7828 vos_mem_free(pWlanSuspendParam);
7829 return VOS_STATUS_E_NOMEM;
7830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007831 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7832 pWlanSuspendParam->setMcstBcstFilter;
7833 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7834 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7835
Yue Ma7f44bbe2013-04-12 11:47:39 -07007836 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
7837 wdiRxpFilterParams->pUserData = pWdaParams;
7838
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 pWdaParams->pWdaContext = pWDA;
7840 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7841 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007842 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007843 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007844 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007845 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 {
7847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7848 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007849 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7851 vos_mem_free(pWdaParams->wdaMsgParam);
7852 vos_mem_free(pWdaParams);
7853 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007854 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007855}
Jeff Johnson295189b2012-06-20 16:38:30 -07007856/*
7857 * FUNCTION: WDA_WdiIndicationCallback
7858 *
7859 */
7860void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7861 void* pUserData)
7862{
7863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007864 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007865}
Jeff Johnson295189b2012-06-20 16:38:30 -07007866/*
7867 * FUNCTION: WDA_ProcessWlanSuspendInd
7868 *
7869 */
7870VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7871 tSirWlanSuspendParam *pWlanSuspendParam)
7872{
7873 WDI_Status wdiStatus;
7874 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007876 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7878 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7879 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7880 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007882 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7883 if(WDI_STATUS_PENDING == wdiStatus)
7884 {
7885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007886 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 }
7888 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7889 {
7890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007891 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007893 vos_mem_free(pWlanSuspendParam);
7894 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7895}
7896
Chet Lanctot186b5732013-03-18 10:26:30 -07007897#ifdef WLAN_FEATURE_11W
7898/*
7899 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7900 *
7901 */
7902VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7903 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7904{
7905 WDI_Status wdiStatus;
7906 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7908 "------> %s ", __func__);
7909
7910 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7911 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7912 sizeof(tSirMacAddr));
7913
7914 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7915 wdiExclUnencryptParams.pUserData = pWDA;
7916
7917 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7918 if(WDI_STATUS_PENDING == wdiStatus)
7919 {
7920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7921 "Pending received for %s:%d ", __func__, __LINE__ );
7922 }
7923 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7924 {
7925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7926 "Failure in %s:%d ", __func__, __LINE__ );
7927 }
7928 vos_mem_free(pExclUnencryptParam);
7929 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7930}
7931#endif
7932
Jeff Johnson295189b2012-06-20 16:38:30 -07007933/*
7934 * FUNCTION: WDA_ProcessWlanResumeCallback
7935 *
7936 */
7937void WDA_ProcessWlanResumeCallback(
7938 WDI_SuspendResumeRspParamsType *resumeRspParams,
7939 void* pUserData)
7940{
7941 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007943 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007944 if(NULL == pWdaParams)
7945 {
7946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007947 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 VOS_ASSERT(0) ;
7949 return ;
7950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007951 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7952 {
7953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007954 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7957 vos_mem_free(pWdaParams->wdaMsgParam);
7958 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007959 return ;
7960}
Jeff Johnson295189b2012-06-20 16:38:30 -07007961/*
7962 * FUNCTION: WDA_ProcessWlanResumeReq
7963 *
7964 */
7965VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7966 tSirWlanResumeParam *pWlanResumeParam)
7967{
7968 WDI_Status wdiStatus;
7969 WDI_ResumeParamsType *wdiResumeParams =
7970 (WDI_ResumeParamsType *)vos_mem_malloc(
7971 sizeof(WDI_ResumeParamsType) ) ;
7972 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007974 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 if(NULL == wdiResumeParams)
7976 {
7977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 VOS_ASSERT(0);
7980 return VOS_STATUS_E_NOMEM;
7981 }
7982 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7983 if(NULL == pWdaParams)
7984 {
7985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007987 VOS_ASSERT(0);
7988 vos_mem_free(wdiResumeParams);
7989 return VOS_STATUS_E_NOMEM;
7990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7992 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 wdiResumeParams->wdiReqStatusCB = NULL;
7995 pWdaParams->wdaMsgParam = pWlanResumeParam;
7996 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7997 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007998 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7999 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8000 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008001 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8002 {
8003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8004 "Failure in Host Resume REQ WDI API, free all the memory " );
8005 VOS_ASSERT(0);
8006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8007 vos_mem_free(pWdaParams->wdaMsgParam);
8008 vos_mem_free(pWdaParams);
8009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008010 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8011}
8012
Jeff Johnson295189b2012-06-20 16:38:30 -07008013/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008014 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008015 *
8016 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008017void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008018{
8019 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008021 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008022 if(NULL == pWdaParams)
8023 {
8024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008025 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008026 VOS_ASSERT(0) ;
8027 return ;
8028 }
8029
8030 vos_mem_free(pWdaParams->wdaMsgParam) ;
8031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8032 vos_mem_free(pWdaParams) ;
8033 /*
8034 * No respone required for SetBeaconFilter req so just free the request
8035 * param here
8036 */
8037
Jeff Johnson295189b2012-06-20 16:38:30 -07008038 return ;
8039}
Jeff Johnson295189b2012-06-20 16:38:30 -07008040/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008041 * FUNCTION: WDA_SetBeaconFilterReqCallback
8042 * Free memory.
8043 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8044 */
8045void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8046{
8047 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8048
8049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8050 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8051
8052 if(NULL == pWdaParams)
8053 {
8054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8055 "%s: pWdaParams received NULL", __func__);
8056 VOS_ASSERT(0);
8057 return;
8058 }
8059
8060 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8061 {
8062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8063 vos_mem_free(pWdaParams->wdaMsgParam);
8064 vos_mem_free(pWdaParams);
8065 }
8066
8067 return;
8068}
8069/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 * FUNCTION: WDA_SetBeaconFilterReq
8071 * Request to WDI to send the beacon filtering related information.
8072 */
8073VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8074 tBeaconFilterMsg* pBeaconFilterInfo)
8075{
8076 WDI_Status status = WDI_STATUS_SUCCESS;
8077 tANI_U8 *dstPtr, *srcPtr;
8078 tANI_U8 filterLength;
8079 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8080 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8081 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8082 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008084 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008085 if(NULL == wdiBeaconFilterInfo)
8086 {
8087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 VOS_ASSERT(0);
8090 return VOS_STATUS_E_NOMEM;
8091 }
8092 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8093 if(NULL == pWdaParams)
8094 {
8095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 VOS_ASSERT(0);
8098 vos_mem_free(wdiBeaconFilterInfo);
8099 return VOS_STATUS_E_NOMEM;
8100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008101 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8102 pBeaconFilterInfo->beaconInterval;
8103 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8104 pBeaconFilterInfo->capabilityInfo;
8105 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8106 pBeaconFilterInfo->capabilityMask;
8107 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008108
8109 //Fill the BssIdx
8110 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8111
Jeff Johnson295189b2012-06-20 16:38:30 -07008112 //Fill structure with info contained in the beaconFilterTable
8113 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8114 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8115 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8116 if(WDI_BEACON_FILTER_LEN < filterLength)
8117 {
8118 filterLength = WDI_BEACON_FILTER_LEN;
8119 }
8120 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008121 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8122 wdiBeaconFilterInfo->pUserData = pWdaParams;
8123
Jeff Johnson295189b2012-06-20 16:38:30 -07008124 /* Store param pointer as passed in by caller */
8125 /* store Params pass it to WDI */
8126 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8127 pWdaParams->pWdaContext = pWDA;
8128 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8129
Jeff Johnson295189b2012-06-20 16:38:30 -07008130 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008131 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008132 if(IS_WDI_STATUS_FAILURE(status))
8133 {
8134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8135 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8136 vos_mem_free(pWdaParams->wdaMsgParam) ;
8137 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8138 vos_mem_free(pWdaParams) ;
8139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008140 return CONVERT_WDI2VOS_STATUS(status) ;
8141}
Jeff Johnson295189b2012-06-20 16:38:30 -07008142/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008143 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 *
8145 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008146void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008147{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008148 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8149
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008151 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008152
8153 if(NULL == pWdaParams)
8154 {
8155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008156 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008157 VOS_ASSERT(0) ;
8158 return ;
8159 }
8160
8161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8162 vos_mem_free(pWdaParams->wdaMsgParam);
8163 vos_mem_free(pWdaParams);
8164
Jeff Johnson295189b2012-06-20 16:38:30 -07008165 //print a msg, nothing else to do
8166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008167 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 return ;
8169}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008170/*
8171 * FUNCTION: WDA_RemBeaconFilterReqCallback
8172 * Free memory.
8173 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8174 */
8175void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8176{
8177 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8178
8179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8180 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8181
8182 if(NULL == pWdaParams)
8183 {
8184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8185 "%s: pWdaParams received NULL", __func__);
8186 VOS_ASSERT(0);
8187 return;
8188 }
8189
8190 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8191 {
8192 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8193 vos_mem_free(pWdaParams->wdaMsgParam);
8194 vos_mem_free(pWdaParams);
8195 }
8196
8197 return;
8198}
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 // TODO: PE does not have this feature for now implemented,
8200 // but the support for removing beacon filter exists between
8201 // HAL and FW. This function can be called whenever PE defines
8202 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008203/*
8204 * FUNCTION: WDA_RemBeaconFilterReq
8205 * Request to WDI to send the removal of beacon filtering related information.
8206 */
8207VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8208 tRemBeaconFilterMsg* pBeaconFilterInfo)
8209{
8210 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008211 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008212 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8213 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8214 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008215 tWDA_ReqParams *pWdaParams ;
8216
Jeff Johnson295189b2012-06-20 16:38:30 -07008217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008218 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 if(NULL == wdiBeaconFilterInfo)
8220 {
8221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008223 VOS_ASSERT(0);
8224 return VOS_STATUS_E_NOMEM;
8225 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008226 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8227 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008228 {
8229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008231 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008232 vos_mem_free(wdiBeaconFilterInfo);
8233 vos_mem_free(pBeaconFilterInfo);
8234 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008236
8237 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8238 pBeaconFilterInfo->ucIeCount;
8239 //Fill structure with info contained in the ucRemIeId
8240 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8241 pBeaconFilterInfo->ucRemIeId,
8242 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8243 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8244 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008245
8246 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008247 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008248 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008249 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8250
8251 pWdaParams->pWdaContext = pWDA;
8252
Jeff Johnson43971f52012-07-17 12:26:56 -07008253 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008254 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008255 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 {
8257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8258 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008259 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8261 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008262 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008264 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008265}
Jeff Johnson295189b2012-06-20 16:38:30 -07008266/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008267 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008268 *
8269 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008270void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008271{
8272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008274 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 if(NULL == pWdaParams)
8276 {
8277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008278 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 VOS_ASSERT(0) ;
8280 return ;
8281 }
8282
8283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8284 vos_mem_free(pWdaParams) ;
8285
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 return ;
8287}
Jeff Johnson295189b2012-06-20 16:38:30 -07008288/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008289 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8290 * Free memory.
8291 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8292 */
8293void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8294{
8295 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8296
8297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8298 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8299
8300 if(NULL == pWdaParams)
8301 {
8302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8303 "%s: pWdaParams received NULL", __func__);
8304 VOS_ASSERT(0);
8305 return;
8306 }
8307
8308 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8309 {
8310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8311 vos_mem_free(pWdaParams);
8312 }
8313
8314 return;
8315}
8316/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 * FUNCTION: WDA_SetRSSIThresholdsReq
8318 * Request to WDI to set the RSSI thresholds (sta mode).
8319 */
8320VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8321{
8322 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008323 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 tWDA_CbContext *pWDA = NULL ;
8325 v_PVOID_t pVosContext = NULL;
8326 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8327 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8328 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8329 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008331 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008332 if(NULL == wdiRSSIThresholdsInfo)
8333 {
8334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 VOS_ASSERT(0);
8337 return VOS_STATUS_E_NOMEM;
8338 }
8339 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8340 if(NULL == pWdaParams)
8341 {
8342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008343 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 VOS_ASSERT(0);
8345 vos_mem_free(wdiRSSIThresholdsInfo);
8346 return VOS_STATUS_E_NOMEM;
8347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8350 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8351 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8353 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8354 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008355 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8356 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8357 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008358 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8359 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008360 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8361 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8362
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 /* Store param pointer as passed in by caller */
8364 /* store Params pass it to WDI */
8365 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8366 pWdaParams->pWdaContext = pWDA;
8367 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008368 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008369 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008370 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 {
8372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8373 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008374 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8376 vos_mem_free(pWdaParams) ;
8377 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008378 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008379
8380}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008381/*
Yue Madb90ac12013-04-04 13:39:13 -07008382 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 *
8384 */
Yue Madb90ac12013-04-04 13:39:13 -07008385void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008386{
8387 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8388
8389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008390 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008391 if(NULL == pWdaParams)
8392 {
8393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008394 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008395 VOS_ASSERT(0) ;
8396 return ;
8397 }
8398
8399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8400 vos_mem_free(pWdaParams->wdaMsgParam);
8401 vos_mem_free(pWdaParams) ;
8402
8403 //print a msg, nothing else to do
8404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008405 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 return ;
8407}
Jeff Johnson295189b2012-06-20 16:38:30 -07008408/*
Yue Madb90ac12013-04-04 13:39:13 -07008409 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008410 * Free memory.
8411 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008412 */
8413void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8414{
8415 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8416
8417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8418 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8419
8420 if(NULL == pWdaParams)
8421 {
8422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8423 "%s: Invalid pWdaParams pointer", __func__);
8424 VOS_ASSERT(0);
8425 return;
8426 }
8427
8428 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8429 {
8430 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8431 vos_mem_free(pWdaParams->wdaMsgParam);
8432 vos_mem_free(pWdaParams);
8433 }
8434
8435 return;
8436}
8437/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 * FUNCTION: WDA_ProcessHostOffloadReq
8439 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8440 * to broadcast traffic (sta mode).
8441 */
8442VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8443 tSirHostOffloadReq *pHostOffloadParams)
8444{
8445 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008446 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8448 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8449 sizeof(WDI_HostOffloadReqParamsType)) ;
8450 tWDA_ReqParams *pWdaParams ;
8451
8452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008453 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008454
8455 if(NULL == wdiHostOffloadInfo)
8456 {
8457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008458 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 VOS_ASSERT(0);
8460 return VOS_STATUS_E_NOMEM;
8461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008462 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8463 if(NULL == pWdaParams)
8464 {
8465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008467 VOS_ASSERT(0);
8468 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008469 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008470 return VOS_STATUS_E_NOMEM;
8471 }
8472
8473 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8474 pHostOffloadParams->offloadType;
8475 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8476 pHostOffloadParams->enableOrDisable;
8477
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008478 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8479 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8480
Jeff Johnson295189b2012-06-20 16:38:30 -07008481 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8482 {
8483 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8484 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8485 pHostOffloadParams->params.hostIpv4Addr,
8486 4);
8487 break;
8488 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8489 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8490 pHostOffloadParams->params.hostIpv6Addr,
8491 16);
8492 break;
8493 case SIR_IPV6_NS_OFFLOAD:
8494 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8495 pHostOffloadParams->params.hostIpv6Addr,
8496 16);
8497
8498#ifdef WLAN_NS_OFFLOAD
8499 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8500 {
8501 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8502 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8503 16);
8504 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8505 }
8506 else
8507 {
8508 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8509 }
8510
8511 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8512 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8513 16);
8514 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8515 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8516 6);
8517
8518 //Only two are supported so let's go through them without a loop
8519 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8520 {
8521 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8522 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8523 16);
8524 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8525 }
8526 else
8527 {
8528 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8529 }
8530
8531 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8532 {
8533 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8534 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8535 16);
8536 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8537 }
8538 else
8539 {
8540 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8541 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308542 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8543 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008544 break;
8545#endif //WLAN_NS_OFFLOAD
8546 default:
8547 {
8548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8549 "No Handling for Offload Type %x in WDA "
8550 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8551 //WDA_VOS_ASSERT(0) ;
8552 }
8553 }
Yue Madb90ac12013-04-04 13:39:13 -07008554 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8555 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008556
Jeff Johnson295189b2012-06-20 16:38:30 -07008557 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008558 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008559 /* store Params pass it to WDI */
8560 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8561 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008562
Jeff Johnson295189b2012-06-20 16:38:30 -07008563
Jeff Johnson43971f52012-07-17 12:26:56 -07008564 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008565 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008566
Jeff Johnson43971f52012-07-17 12:26:56 -07008567 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 {
8569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8570 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008571 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8573 vos_mem_free(pWdaParams->wdaMsgParam);
8574 vos_mem_free(pWdaParams) ;
8575 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008576 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008577
8578}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008579/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008580 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008581 *
8582 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008583void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008584{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008585 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8586
Jeff Johnson295189b2012-06-20 16:38:30 -07008587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008588 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008589
8590 if(NULL == pWdaParams)
8591 {
8592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008593 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008594 VOS_ASSERT(0) ;
8595 return ;
8596 }
8597
8598 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8599 vos_mem_free(pWdaParams->wdaMsgParam);
8600 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008601
Jeff Johnson295189b2012-06-20 16:38:30 -07008602 //print a msg, nothing else to do
8603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008604 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008605 return ;
8606}
Jeff Johnson295189b2012-06-20 16:38:30 -07008607/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008608 * FUNCTION: WDA_KeepAliveReqCallback
8609 * Free memory.
8610 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8611 */
8612void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8613{
8614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8615
8616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8617 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8618
8619 if(NULL == pWdaParams)
8620 {
8621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8622 "%s: pWdaParams received NULL", __func__);
8623 VOS_ASSERT(0);
8624 return;
8625 }
8626
8627 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8628 {
8629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8630 vos_mem_free(pWdaParams->wdaMsgParam);
8631 vos_mem_free(pWdaParams);
8632 }
8633
8634 return;
8635}
8636/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 * FUNCTION: WDA_ProcessKeepAliveReq
8638 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8639 * wakeup due to broadcast traffic (sta mode).
8640 */
8641VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8642 tSirKeepAliveReq *pKeepAliveParams)
8643{
8644 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008645 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8647 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8648 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008649 tWDA_ReqParams *pWdaParams;
8650
Jeff Johnson295189b2012-06-20 16:38:30 -07008651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008652 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 if(NULL == wdiKeepAliveInfo)
8654 {
8655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008656 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008657 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008658 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 return VOS_STATUS_E_NOMEM;
8660 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008661
8662 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8663 if(NULL == pWdaParams)
8664 {
8665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008666 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008667 VOS_ASSERT(0);
8668 vos_mem_free(wdiKeepAliveInfo);
8669 vos_mem_free(pKeepAliveParams);
8670 return VOS_STATUS_E_NOMEM;
8671 }
8672
Jeff Johnson295189b2012-06-20 16:38:30 -07008673 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8674 pKeepAliveParams->packetType;
8675 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8676 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008677
8678 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8679 pKeepAliveParams->bssId,
8680 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008681
8682 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8683 {
8684 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8685 pKeepAliveParams->hostIpv4Addr,
8686 SIR_IPV4_ADDR_LEN);
8687 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8688 pKeepAliveParams->destIpv4Addr,
8689 SIR_IPV4_ADDR_LEN);
8690 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8691 pKeepAliveParams->destMacAddr,
8692 SIR_MAC_ADDR_LEN);
8693 }
8694 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8695 {
8696 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8697 SIR_IPV4_ADDR_LEN,
8698 0);
8699 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8700 SIR_IPV4_ADDR_LEN,
8701 0);
8702 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8703 SIR_MAC_ADDR_LEN,
8704 0);
8705 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008706 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8707 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008708
Jeff Johnson295189b2012-06-20 16:38:30 -07008709 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008710 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008711 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008712 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8713 pWdaParams->pWdaContext = pWDA;
8714
Jeff Johnson295189b2012-06-20 16:38:30 -07008715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8716 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8717 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8718 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8719 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8721 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8722 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8723 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8724 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8726 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8727 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8728 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8729 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8730 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8731 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8732 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8734 "TimePeriod %d PacketType %d",
8735 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8736 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008737 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008738 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008739
Jeff Johnson43971f52012-07-17 12:26:56 -07008740 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 {
8742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8743 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008744 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8746 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008747 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008749 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008750
8751}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008752/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008753 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008754 *
8755 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008756void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008757 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8758 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008759{
8760 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008762 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008763 if(NULL == pWdaParams)
8764 {
8765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008766 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008767 VOS_ASSERT(0) ;
8768 return ;
8769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008770 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8771 vos_mem_free(pWdaParams->wdaMsgParam);
8772 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 return ;
8774}
Jeff Johnson295189b2012-06-20 16:38:30 -07008775/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008776 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8777 * Free memory.
8778 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8779 */
8780void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8781{
8782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8783
8784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8785 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8786
8787 if(NULL == pWdaParams)
8788 {
8789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8790 "%s: pWdaParams received NULL", __func__);
8791 VOS_ASSERT(0);
8792 return;
8793 }
8794
8795 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8796 {
8797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8798 vos_mem_free(pWdaParams->wdaMsgParam);
8799 vos_mem_free(pWdaParams);
8800 }
8801
8802 return;
8803}
8804
8805/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008806 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8807 * Request to WDI to add WOWL Bcast pattern
8808 */
8809VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8810 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8811{
8812 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008813 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008814 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8815 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8816 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8817 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008819 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008820 if(NULL == wdiWowlAddBcPtrnInfo)
8821 {
8822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008823 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008824 VOS_ASSERT(0);
8825 return VOS_STATUS_E_NOMEM;
8826 }
8827 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8828 if(NULL == pWdaParams)
8829 {
8830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008832 VOS_ASSERT(0);
8833 vos_mem_free(wdiWowlAddBcPtrnInfo);
8834 return VOS_STATUS_E_NOMEM;
8835 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008836 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8837 pWowlAddBcPtrnParams->ucPatternId;
8838 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8839 pWowlAddBcPtrnParams->ucPatternByteOffset;
8840 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8841 pWowlAddBcPtrnParams->ucPatternMaskSize;
8842 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8843 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8845 {
8846 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8847 pWowlAddBcPtrnParams->ucPattern,
8848 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8849 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8850 pWowlAddBcPtrnParams->ucPatternMask,
8851 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8852 }
8853 else
8854 {
8855 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8856 pWowlAddBcPtrnParams->ucPattern,
8857 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8858 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8859 pWowlAddBcPtrnParams->ucPatternMask,
8860 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8861
8862 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8863 pWowlAddBcPtrnParams->ucPatternExt,
8864 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8865 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8866 pWowlAddBcPtrnParams->ucPatternMaskExt,
8867 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8868 }
8869
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008870 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8871 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8872
Yue Ma7f44bbe2013-04-12 11:47:39 -07008873 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
8874 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008875 /* Store param pointer as passed in by caller */
8876 /* store Params pass it to WDI */
8877 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8878 pWdaParams->pWdaContext = pWDA;
8879 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008880 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008881 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008882 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008883 {
8884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8885 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008886 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008887 vos_mem_free(pWdaParams->wdaMsgParam) ;
8888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8889 vos_mem_free(pWdaParams) ;
8890 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008891 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008892
8893}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008894/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008895 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008896 *
8897 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008898void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008899 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8900 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008901{
8902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008904 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008905 if(NULL == pWdaParams)
8906 {
8907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008908 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008909 VOS_ASSERT(0) ;
8910 return ;
8911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8913 vos_mem_free(pWdaParams->wdaMsgParam);
8914 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008915 return ;
8916}
Jeff Johnson295189b2012-06-20 16:38:30 -07008917/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008918 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8919 * Free memory.
8920 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
8921 */
8922void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8923{
8924 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8925
8926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8927 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8928
8929 if(NULL == pWdaParams)
8930 {
8931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8932 "%s: pWdaParams received NULL", __func__);
8933 VOS_ASSERT(0);
8934 return;
8935 }
8936
8937 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8938 {
8939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8940 vos_mem_free(pWdaParams->wdaMsgParam);
8941 vos_mem_free(pWdaParams);
8942 }
8943
8944 return;
8945}
8946/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008947 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8948 * Request to WDI to delete WOWL Bcast pattern
8949 */
8950VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8951 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8952{
8953 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008954 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8956 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8957 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8958 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008960 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 if(NULL == wdiWowlDelBcPtrnInfo)
8962 {
8963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008964 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008965 VOS_ASSERT(0);
8966 return VOS_STATUS_E_NOMEM;
8967 }
8968 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8969 if(NULL == pWdaParams)
8970 {
8971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008972 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008973 VOS_ASSERT(0);
8974 vos_mem_free(wdiWowlDelBcPtrnInfo);
8975 return VOS_STATUS_E_NOMEM;
8976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008977 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8978 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008979
8980 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8981 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8982
Yue Ma7f44bbe2013-04-12 11:47:39 -07008983 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
8984 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008985 /* Store param pointer as passed in by caller */
8986 /* store Params pass it to WDI */
8987 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8988 pWdaParams->pWdaContext = pWDA;
8989 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008990 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008991 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008992 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008993 {
8994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8995 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008996 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 vos_mem_free(pWdaParams->wdaMsgParam) ;
8998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8999 vos_mem_free(pWdaParams) ;
9000 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009001 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009002
9003}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009004/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009005 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 *
9007 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009008void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009009{
9010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9011 tWDA_CbContext *pWDA;
9012 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009014 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009015 if(NULL == pWdaParams)
9016 {
9017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009018 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009019 VOS_ASSERT(0) ;
9020 return ;
9021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009022 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9023 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9024
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009025 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9026
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9028 vos_mem_free(pWdaParams) ;
9029
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009030 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009031 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009032 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009033 return ;
9034}
Jeff Johnson295189b2012-06-20 16:38:30 -07009035/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009036 * FUNCTION: WDA_WowlEnterReqCallback
9037 * Free memory and send WOWL Enter RSP back to PE.
9038 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9039 */
9040void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9041{
9042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9043 tWDA_CbContext *pWDA;
9044 tSirHalWowlEnterParams *pWowlEnterParams;
9045
9046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9047 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9048
9049 if(NULL == pWdaParams)
9050 {
9051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9052 "%s: pWdaParams received NULL", __func__);
9053 VOS_ASSERT(0);
9054 return;
9055 }
9056
9057 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9058 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9059 pWowlEnterParams->status = wdiStatus;
9060
9061 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9062 {
9063 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9064 vos_mem_free(pWdaParams);
9065 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9066 }
9067
9068 return;
9069}
9070/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 * FUNCTION: WDA_ProcessWowlEnterReq
9072 * Request to WDI to enter WOWL
9073 */
9074VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9075 tSirHalWowlEnterParams *pWowlEnterParams)
9076{
9077 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009078 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9080 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9081 sizeof(WDI_WowlEnterReqParamsType)) ;
9082 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009084 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009085 if(NULL == wdiWowlEnterInfo)
9086 {
9087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 VOS_ASSERT(0);
9090 return VOS_STATUS_E_NOMEM;
9091 }
9092 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9093 if(NULL == pWdaParams)
9094 {
9095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009097 VOS_ASSERT(0);
9098 vos_mem_free(wdiWowlEnterInfo);
9099 return VOS_STATUS_E_NOMEM;
9100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009101 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9102 pWowlEnterParams->magicPtrn,
9103 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009104 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9105 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009106 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9107 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009108 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9109 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009110 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9111 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9113 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9115 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009116 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9117 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9119 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009120#ifdef WLAN_WAKEUP_EVENTS
9121 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9122 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9123
9124 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9125 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9126
9127 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9128 pWowlEnterParams->ucWowNetScanOffloadMatch;
9129
9130 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9131 pWowlEnterParams->ucWowGTKRekeyError;
9132
9133 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9134 pWowlEnterParams->ucWoWBSSConnLoss;
9135#endif // WLAN_WAKEUP_EVENTS
9136
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009137 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9138 pWowlEnterParams->bssIdx;
9139
Yue Ma7f44bbe2013-04-12 11:47:39 -07009140 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9141 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009142 /* Store param pointer as passed in by caller */
9143 /* store Params pass it to WDI */
9144 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9145 pWdaParams->pWdaContext = pWDA;
9146 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009147 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009148 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009149 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 {
9151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9152 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009153 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 vos_mem_free(pWdaParams->wdaMsgParam) ;
9155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9156 vos_mem_free(pWdaParams) ;
9157 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009158 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009159
9160}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009161/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009162 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 *
9164 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009165void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009166{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9168 tWDA_CbContext *pWDA;
9169 tSirHalWowlExitParams *pWowlExitParams;
9170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009171 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009172 if(NULL == pWdaParams)
9173 {
9174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009175 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009176 VOS_ASSERT(0) ;
9177 return ;
9178 }
9179 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9180 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9181
9182 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009183 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009184
9185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9186 vos_mem_free(pWdaParams) ;
9187
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009189 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009190 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009191 return ;
9192}
Jeff Johnson295189b2012-06-20 16:38:30 -07009193/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009194 * FUNCTION: WDA_WowlExitReqCallback
9195 * Free memory and send WOWL Exit RSP back to PE.
9196 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9197 */
9198void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9199{
9200 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9201 tWDA_CbContext *pWDA;
9202 tSirHalWowlExitParams *pWowlExitParams;
9203
9204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9205 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9206
9207 if(NULL == pWdaParams)
9208 {
9209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9210 "%s: pWdaParams received NULL", __func__);
9211 VOS_ASSERT(0);
9212 return;
9213 }
9214
9215 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9216 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9217 pWowlExitParams->status = wdiStatus;
9218
9219 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9220 {
9221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9222 vos_mem_free(pWdaParams);
9223 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9224 }
9225
9226 return;
9227}
9228/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009229 * FUNCTION: WDA_ProcessWowlExitReq
9230 * Request to WDI to add WOWL Bcast pattern
9231 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009232VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9233 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009234{
9235 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009236 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009237 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9238 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9239 sizeof(WDI_WowlExitReqParamsType)) ;
9240 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009242 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009243 if(NULL == wdiWowlExitInfo)
9244 {
9245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009246 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009247 VOS_ASSERT(0);
9248 return VOS_STATUS_E_NOMEM;
9249 }
9250 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9251 if(NULL == pWdaParams)
9252 {
9253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009254 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009255 VOS_ASSERT(0);
9256 vos_mem_free(wdiWowlExitInfo);
9257 return VOS_STATUS_E_NOMEM;
9258 }
9259
9260 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9261 pWowlExitParams->bssIdx;
9262
Yue Ma7f44bbe2013-04-12 11:47:39 -07009263 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9264 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009265
9266 /* Store param pointer as passed in by caller */
9267 /* store Params pass it to WDI */
9268 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9269 pWdaParams->pWdaContext = pWDA;
9270 pWdaParams->wdaMsgParam = pWowlExitParams;
9271
9272 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009273 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009274
Jeff Johnson43971f52012-07-17 12:26:56 -07009275 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 {
9277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9278 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009279 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9281 vos_mem_free(pWdaParams->wdaMsgParam);
9282 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009283 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009284 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009285}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009286/*
9287 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9288 * Request to WDI to determine whether a given station is capable of
9289 * using HW-based frame translation
9290 */
9291v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9292 tANI_U8 staIdx)
9293{
9294 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9295}
Jeff Johnson295189b2012-06-20 16:38:30 -07009296/*
9297 * FUNCTION: WDA_NvDownloadReqCallback
9298 * send NV Download RSP back to PE
9299 */
9300void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9301 void* pUserData)
9302{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009303
9304 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9305 tWDA_CbContext *pWDA;
9306
Jeff Johnson295189b2012-06-20 16:38:30 -07009307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009308 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009309
9310 if(NULL == pWdaParams)
9311 {
9312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009313 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009314 VOS_ASSERT(0) ;
9315 return ;
9316 }
9317
9318 pWDA = pWdaParams->pWdaContext;
9319
Jeff Johnson295189b2012-06-20 16:38:30 -07009320 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9322 vos_mem_free(pWdaParams);
9323
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009325 return ;
9326}
Jeff Johnson295189b2012-06-20 16:38:30 -07009327/*
9328 * FUNCTION: WDA_ProcessNvDownloadReq
9329 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9330 */
9331VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9332{
9333 /* Initialize the local Variables*/
9334 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9335 v_VOID_t *pNvBuffer=NULL;
9336 v_SIZE_t bufferSize = 0;
9337 WDI_Status status = WDI_STATUS_E_FAILURE;
9338 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009339 tWDA_ReqParams *pWdaParams ;
9340
Jeff Johnson295189b2012-06-20 16:38:30 -07009341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009342 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009343 if(NULL == pWDA)
9344 {
9345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009346 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009347 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 return VOS_STATUS_E_FAILURE;
9349 }
9350
9351 /* Get the NV structure base address and size from VOS */
9352 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009353 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9354 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009355 if(NULL == wdiNvDownloadReqParam)
9356 {
9357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009358 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009359 VOS_ASSERT(0);
9360 return VOS_STATUS_E_NOMEM;
9361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 /* Copy Params to wdiNvDownloadReqParam*/
9363 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9364 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009365
9366 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9367 if(NULL == pWdaParams)
9368 {
9369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009370 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009371 VOS_ASSERT(0);
9372 vos_mem_free(wdiNvDownloadReqParam);
9373 return VOS_STATUS_E_NOMEM;
9374 }
9375
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009377 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9378 pWdaParams->wdaMsgParam = NULL;
9379 pWdaParams->pWdaContext = pWDA;
9380
9381
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009383
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009385 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9386
Jeff Johnson295189b2012-06-20 16:38:30 -07009387 if(IS_WDI_STATUS_FAILURE(status))
9388 {
9389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9390 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009391 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9392 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009394 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009395}
9396/*
9397 * FUNCTION: WDA_FlushAcReqCallback
9398 * send Flush AC RSP back to TL
9399 */
9400void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9401{
9402 vos_msg_t wdaMsg = {0} ;
9403 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9404 tFlushACReq *pFlushACReqParams;
9405 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009407 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 if(NULL == pWdaParams)
9409 {
9410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009411 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 VOS_ASSERT(0) ;
9413 return ;
9414 }
9415
9416 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9417 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9418 if(NULL == pFlushACRspParams)
9419 {
9420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009422 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009423 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 return ;
9425 }
9426 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9427 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9428 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9429 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9430 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009431 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009432 vos_mem_free(pWdaParams->wdaMsgParam) ;
9433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9434 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009435 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9436 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9437 // POST message to TL
9438 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9439
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 return ;
9441}
Jeff Johnson295189b2012-06-20 16:38:30 -07009442/*
9443 * FUNCTION: WDA_ProcessFlushAcReq
9444 * Request to WDI to Update the DELBA REQ params.
9445 */
9446VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9447 tFlushACReq *pFlushAcReqParams)
9448{
9449 WDI_Status status = WDI_STATUS_SUCCESS ;
9450 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9451 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9452 sizeof(WDI_FlushAcReqParamsType)) ;
9453 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 if(NULL == wdiFlushAcReqParam)
9455 {
9456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009458 VOS_ASSERT(0);
9459 return VOS_STATUS_E_NOMEM;
9460 }
9461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9462 if(NULL == pWdaParams)
9463 {
9464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009466 VOS_ASSERT(0);
9467 vos_mem_free(wdiFlushAcReqParam);
9468 return VOS_STATUS_E_NOMEM;
9469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009471 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009472 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9473 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9474 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9475 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009476 /* Store Flush AC pointer, as this will be used for response */
9477 /* store Params pass it to WDI */
9478 pWdaParams->pWdaContext = pWDA;
9479 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9480 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009481 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9482 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 if(IS_WDI_STATUS_FAILURE(status))
9484 {
9485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9486 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9487 vos_mem_free(pWdaParams->wdaMsgParam) ;
9488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9489 vos_mem_free(pWdaParams) ;
9490 //TODO: respond to TL with failure
9491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009493}
Jeff Johnson295189b2012-06-20 16:38:30 -07009494/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009495 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 *
9497 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009498void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009499{
9500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9501 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009502 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009503
9504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009505 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009506 if(NULL == pWdaParams)
9507 {
9508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009509 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 VOS_ASSERT(0) ;
9511 return ;
9512 }
9513 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9514 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9515 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9516 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9517 {
9518 pWDA->wdaAmpSessionOn = VOS_FALSE;
9519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009520 vos_mem_free(pWdaParams->wdaMsgParam) ;
9521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9522 vos_mem_free(pWdaParams) ;
9523 /*
9524 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9525 * param here
9526 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009527 return ;
9528}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009529/*
9530 * FUNCTION: WDA_BtAmpEventReqCallback
9531 * Free memory.
9532 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9533 */
9534void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9535{
9536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9537 tWDA_CbContext *pWDA;
9538 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009539
Yue Ma7f44bbe2013-04-12 11:47:39 -07009540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9541 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9542
9543 if(NULL == pWdaParams)
9544 {
9545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9546 "%s: pWdaParams received NULL", __func__);
9547 VOS_ASSERT(0);
9548 return;
9549 }
9550
9551 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9552 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9553
9554 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9555 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9556 {
9557 pWDA->wdaAmpSessionOn = VOS_FALSE;
9558 }
9559
9560 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9561 {
9562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9563 vos_mem_free(pWdaParams->wdaMsgParam);
9564 vos_mem_free(pWdaParams);
9565 }
9566
9567 return;
9568}
Jeff Johnson295189b2012-06-20 16:38:30 -07009569/*
9570 * FUNCTION: WDA_ProcessBtAmpEventReq
9571 * Request to WDI to Update with BT AMP events.
9572 */
9573VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9574 tSmeBtAmpEvent *pBtAmpEventParams)
9575{
9576 WDI_Status status = WDI_STATUS_SUCCESS ;
9577 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9578 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9579 sizeof(WDI_BtAmpEventParamsType)) ;
9580 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009582 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009583 if(NULL == wdiBtAmpEventParam)
9584 {
9585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009587 VOS_ASSERT(0);
9588 return VOS_STATUS_E_NOMEM;
9589 }
9590 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9591 if(NULL == pWdaParams)
9592 {
9593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009594 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009595 VOS_ASSERT(0);
9596 vos_mem_free(wdiBtAmpEventParam);
9597 return VOS_STATUS_E_NOMEM;
9598 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9600 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009601 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9602 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009603 /* Store BT AMP event pointer, as this will be used for response */
9604 /* store Params pass it to WDI */
9605 pWdaParams->pWdaContext = pWDA;
9606 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9607 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009609 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009610 if(IS_WDI_STATUS_FAILURE(status))
9611 {
9612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9613 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9614 vos_mem_free(pWdaParams->wdaMsgParam) ;
9615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9616 vos_mem_free(pWdaParams) ;
9617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009618 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9619 {
9620 pWDA->wdaAmpSessionOn = VOS_TRUE;
9621 }
9622 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009623}
9624
Jeff Johnson295189b2012-06-20 16:38:30 -07009625/*
9626 * FUNCTION: WDA_FTMCommandReqCallback
9627 * Handle FTM CMD response came from HAL
9628 * Route responce to HDD FTM
9629 */
9630void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9631 void *usrData)
9632{
9633 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9635 {
9636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309637 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009638 return;
9639 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009640 /* Release Current FTM Command Request */
9641 vos_mem_free(pWDA->wdaFTMCmdReq);
9642 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009643 /* Post FTM Responce to HDD FTM */
9644 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009645 return;
9646}
Jeff Johnson295189b2012-06-20 16:38:30 -07009647/*
9648 * FUNCTION: WDA_ProcessFTMCommand
9649 * Send FTM command to WDI
9650 */
9651VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9652 tPttMsgbuffer *pPTTFtmCmd)
9653{
9654 WDI_Status status = WDI_STATUS_SUCCESS;
9655 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009656 ftmCMDReq = (WDI_FTMCommandReqType *)
9657 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9658 if(NULL == ftmCMDReq)
9659 {
9660 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9661 "WDA FTM Command buffer alloc fail");
9662 return VOS_STATUS_E_NOMEM;
9663 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009664 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9665 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009666 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009667 /* Send command to WDI */
9668 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009669 return status;
9670}
Jeff Johnsone7245742012-09-05 17:12:55 -07009671#ifdef FEATURE_OEM_DATA_SUPPORT
9672/*
9673 * FUNCTION: WDA_StartOemDataReqCallback
9674 *
9675 */
9676void WDA_StartOemDataReqCallback(
9677 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9678 void* pUserData)
9679{
9680 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9682 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009683 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009684
Jeff Johnsone7245742012-09-05 17:12:55 -07009685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009686 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009687
9688 if(NULL == pWdaParams)
9689 {
9690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009691 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009692 VOS_ASSERT(0) ;
9693 return ;
9694 }
9695 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9696
Jeff Johnsone7245742012-09-05 17:12:55 -07009697 if(NULL == pWDA)
9698 {
9699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009700 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009701 VOS_ASSERT(0);
9702 return ;
9703 }
9704
9705 /*
9706 * Allocate memory for response params sent to PE
9707 */
9708 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9709
9710 // Check if memory is allocated for OemdataMeasRsp Params.
9711 if(NULL == pOemDataRspParams)
9712 {
9713 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9714 "OEM DATA WDA callback alloc fail");
9715 VOS_ASSERT(0) ;
9716 return;
9717 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009718
Jeff Johnsone7245742012-09-05 17:12:55 -07009719 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9721 vos_mem_free(pWdaParams->wdaMsgParam);
9722 vos_mem_free(pWdaParams) ;
9723
Jeff Johnsone7245742012-09-05 17:12:55 -07009724 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009725 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009726 * Also, here success always means that we have atleast one BSSID.
9727 */
9728 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9729
9730 //enable Tx
9731 status = WDA_ResumeDataTx(pWDA);
9732 if(status != VOS_STATUS_SUCCESS)
9733 {
9734 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9735 }
9736 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9737 return ;
9738}
9739/*
9740 * FUNCTION: WDA_ProcessStartOemDataReq
9741 * Send Start Oem Data Req to WDI
9742 */
9743VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9744 tStartOemDataReq *pOemDataReqParams)
9745{
9746 WDI_Status status = WDI_STATUS_SUCCESS;
9747 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009748 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009749
9750 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9751
9752 if(NULL == wdiOemDataReqParams)
9753 {
9754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009755 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009756 VOS_ASSERT(0);
9757 return VOS_STATUS_E_NOMEM;
9758 }
9759
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009760 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9761 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9762 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9763 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009764
9765 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9766
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009767 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9768 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009769 {
9770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009772 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009773 vos_mem_free(pOemDataReqParams);
9774 VOS_ASSERT(0);
9775 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009776 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009777
Bernald44a1ae2013-01-09 08:30:39 -08009778 pWdaParams->pWdaContext = (void*)pWDA;
9779 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9780 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009781
9782 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9783 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009784
9785 if(IS_WDI_STATUS_FAILURE(status))
9786 {
9787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9788 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9790 vos_mem_free(pWdaParams->wdaMsgParam);
9791 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009792 }
9793 return CONVERT_WDI2VOS_STATUS(status) ;
9794}
9795#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009796/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009797 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009798 *
9799 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009800void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009801{
9802 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009804 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009805 if(NULL == pWdaParams)
9806 {
9807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009808 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009809 VOS_ASSERT(0) ;
9810 return ;
9811 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009812
9813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9814 vos_mem_free(pWdaParams->wdaMsgParam);
9815 vos_mem_free(pWdaParams);
9816
9817 return ;
9818}
9819/*
9820 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9821 * Free memory.
9822 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
9823 */
9824void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
9825{
9826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9827
9828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9829 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9830
9831 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009832 {
Yue Ma7f44bbe2013-04-12 11:47:39 -07009833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9834 "%s: pWdaParams received NULL", __func__);
9835 VOS_ASSERT(0);
9836 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009837 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009838
9839 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009840 {
9841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009842 vos_mem_free(pWdaParams->wdaMsgParam);
9843 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009844 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009845
9846 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009847}
Jeff Johnson295189b2012-06-20 16:38:30 -07009848#ifdef WLAN_FEATURE_GTK_OFFLOAD
9849/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009850 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009851 *
9852 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009853void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009854 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009855{
9856 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9857
9858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009859 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009860
9861 VOS_ASSERT(NULL != pWdaParams);
9862
9863 vos_mem_free(pWdaParams->wdaMsgParam) ;
9864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9865 vos_mem_free(pWdaParams) ;
9866
9867 //print a msg, nothing else to do
9868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009869 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009870
9871 return ;
9872}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009873/*
9874 * FUNCTION: WDA_GTKOffloadReqCallback
9875 * Free memory.
9876 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
9877 */
9878void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9879{
9880 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009881
Yue Ma7f44bbe2013-04-12 11:47:39 -07009882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9883 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9884
9885 if(NULL == pWdaParams)
9886 {
9887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9888 "%s: pWdaParams received NULL", __func__);
9889 VOS_ASSERT(0);
9890 return;
9891 }
9892
9893 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9894 {
9895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9896 vos_mem_free(pWdaParams->wdaMsgParam);
9897 vos_mem_free(pWdaParams);
9898 }
9899
9900 return;
9901}
Jeff Johnson295189b2012-06-20 16:38:30 -07009902/*
9903 * FUNCTION: WDA_ProcessGTKOffloadReq
9904 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9905 * to broadcast traffic (sta mode).
9906 */
9907VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9908 tpSirGtkOffloadParams pGtkOffloadParams)
9909{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309910 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009911 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9912 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9913 sizeof(WDI_GtkOffloadReqMsg)) ;
9914 tWDA_ReqParams *pWdaParams ;
9915
9916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009917 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009918
9919 if(NULL == wdiGtkOffloadReqMsg)
9920 {
9921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 VOS_ASSERT(0);
9924 return VOS_STATUS_E_NOMEM;
9925 }
9926
9927 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9928 if(NULL == pWdaParams)
9929 {
9930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 VOS_ASSERT(0);
9933 vos_mem_free(wdiGtkOffloadReqMsg);
9934 return VOS_STATUS_E_NOMEM;
9935 }
9936
9937 //
9938 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9939 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009940
9941 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309942 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009943
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9945 // Copy KCK
9946 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9947 // Copy KEK
9948 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9949 // Copy KeyReplayCounter
9950 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9951 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9952
Yue Ma7f44bbe2013-04-12 11:47:39 -07009953 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
9954 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009955
Jeff Johnson295189b2012-06-20 16:38:30 -07009956
9957 /* Store Params pass it to WDI */
9958 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
9959 pWdaParams->pWdaContext = pWDA;
9960 /* Store param pointer as passed in by caller */
9961 pWdaParams->wdaMsgParam = pGtkOffloadParams;
9962
Yue Ma7f44bbe2013-04-12 11:47:39 -07009963 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009964
9965 if(IS_WDI_STATUS_FAILURE(status))
9966 {
9967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9968 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
9969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9970 vos_mem_free(pWdaParams->wdaMsgParam);
9971 vos_mem_free(pWdaParams);
9972 }
9973
9974 return CONVERT_WDI2VOS_STATUS(status) ;
9975}
9976
9977/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009978 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009979 *
9980 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009981void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009982 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009983{
9984 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9985 tWDA_CbContext *pWDA;
9986 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -07009987 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009988 vos_msg_t vosMsg;
9989
9990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009991 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009992
9993 VOS_ASSERT(NULL != pWdaParams);
9994
9995 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9996 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
9997
9998 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
9999 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10000
10001 /* Message Header */
10002 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010003 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010004
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010005 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10006 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10007 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10008 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10009 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010010
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010011 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10012 pwdiGtkOffloadGetInfoRsparams->bssId,
10013 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010014 /* VOS message wrapper */
10015 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10016 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10017 vosMsg.bodyval = 0;
10018
10019 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10020 {
10021 /* free the mem and return */
10022 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10023 }
10024
10025 vos_mem_free(pWdaParams->wdaMsgParam) ;
10026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10027 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010028
10029 return;
10030}
10031/*
10032 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10033 * Free memory and send RSP back to SME.
10034 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10035 */
10036void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10037{
10038 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10039 vos_msg_t vosMsg;
10040
10041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10042 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10043
10044 if(NULL == pWdaParams)
10045 {
10046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10047 "%s: pWdaParams received NULL", __func__);
10048 VOS_ASSERT(0);
10049 return;
10050 }
10051
10052 /* VOS message wrapper */
10053 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10054 vosMsg.bodyptr = NULL;
10055 vosMsg.bodyval = 0;
10056
10057 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10058 {
10059 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10060 vos_mem_free(pWdaParams->wdaMsgParam);
10061 vos_mem_free(pWdaParams);
10062 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10063 }
10064
10065 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010066}
10067#endif
10068
10069/*
10070 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10071 * Request to WDI to set Tx Per Tracking configurations
10072 */
10073VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10074{
10075 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010076 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010077 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10078 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10079 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10080 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010082 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010083 if(NULL == pwdiSetTxPerTrackingReqParams)
10084 {
10085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010086 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 vos_mem_free(pTxPerTrackingParams);
10088 VOS_ASSERT(0);
10089 return VOS_STATUS_E_NOMEM;
10090 }
10091 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10092 if(NULL == pWdaParams)
10093 {
10094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010095 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010096 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10097 vos_mem_free(pTxPerTrackingParams);
10098 VOS_ASSERT(0);
10099 return VOS_STATUS_E_NOMEM;
10100 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10102 pTxPerTrackingParams->ucTxPerTrackingEnable;
10103 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10104 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10105 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10106 pTxPerTrackingParams->ucTxPerTrackingRatio;
10107 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10108 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010109 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10110 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010111 /* Store param pointer as passed in by caller */
10112 /* store Params pass it to WDI
10113 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10114 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10115 pWdaParams->pWdaContext = pWDA;
10116 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010117 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010118 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010119 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 {
10121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10122 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010123 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010124 vos_mem_free(pWdaParams->wdaMsgParam) ;
10125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10126 vos_mem_free(pWdaParams) ;
10127 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010128 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010129
10130}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010131/*
10132 * FUNCTION: WDA_HALDumpCmdCallback
10133 * Send the VOS complete .
10134 */
10135void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10136 void* pUserData)
10137{
10138 tANI_U8 *buffer = NULL;
10139 tWDA_CbContext *pWDA = NULL;
10140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 if(NULL == pWdaParams)
10142 {
10143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010144 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010145 VOS_ASSERT(0) ;
10146 return ;
10147 }
10148
10149 pWDA = pWdaParams->pWdaContext;
10150 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 if(wdiRspParams->usBufferLen > 0)
10152 {
10153 /*Copy the Resp data to UMAC supplied buffer*/
10154 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10157 vos_mem_free(pWdaParams);
10158
10159 /* Indicate VOSS about the start complete */
10160 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010161 return ;
10162}
10163
Jeff Johnson295189b2012-06-20 16:38:30 -070010164/*
10165 * FUNCTION: WDA_ProcessHALDumpCmdReq
10166 * Send Dump command to WDI
10167 */
10168VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10169 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10170 tANI_U32 arg4, tANI_U8 *pBuffer)
10171{
10172 WDI_Status status = WDI_STATUS_SUCCESS;
10173 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10174 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10175 tWDA_ReqParams *pWdaParams ;
10176 pVosContextType pVosContext = NULL;
10177 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010178 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10179 (void *)pMac);
10180
10181 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10182 if(NULL == pWdaParams)
10183 {
10184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010186 return VOS_STATUS_E_NOMEM;
10187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010188 /* Allocate memory WDI request structure*/
10189 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10190 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10191 if(NULL == wdiHALDumpCmdReqParam)
10192 {
10193 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10194 "WDA HAL DUMP Command buffer alloc fail");
10195 vos_mem_free(pWdaParams);
10196 return WDI_STATUS_E_FAILURE;
10197 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010198 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010199 /* Extract the arguments */
10200 wdiHalDumpCmdInfo->command = cmd;
10201 wdiHalDumpCmdInfo->argument1 = arg1;
10202 wdiHalDumpCmdInfo->argument2 = arg2;
10203 wdiHalDumpCmdInfo->argument3 = arg3;
10204 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010205 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010206 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10207
10208 /* Response message will be passed through the buffer */
10209 pWdaParams->wdaMsgParam = (void *)pBuffer;
10210
10211 /* store Params pass it to WDI */
10212 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 /* Send command to WDI */
10214 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010215 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010216 if ( vStatus != VOS_STATUS_SUCCESS )
10217 {
10218 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10219 {
10220 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010221 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010222 }
10223 else
10224 {
10225 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010226 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 }
10228 VOS_ASSERT(0);
10229 }
10230 return status;
10231}
Jeff Johnson295189b2012-06-20 16:38:30 -070010232#ifdef WLAN_FEATURE_GTK_OFFLOAD
10233/*
10234 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10235 * Request to WDI to get GTK Offload Information
10236 */
10237VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10238 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10239{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010240 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010241 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10242 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10243 tWDA_ReqParams *pWdaParams ;
10244
10245 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10246 {
10247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010249 VOS_ASSERT(0);
10250 return VOS_STATUS_E_NOMEM;
10251 }
10252
10253 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10254 if(NULL == pWdaParams)
10255 {
10256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 VOS_ASSERT(0);
10259 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10260 return VOS_STATUS_E_NOMEM;
10261 }
10262
Yue Ma7f44bbe2013-04-12 11:47:39 -070010263 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10264 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010265
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 /* Store Params pass it to WDI */
10267 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10268 pWdaParams->pWdaContext = pWDA;
10269 /* Store param pointer as passed in by caller */
10270 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10271
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010272 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010273 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010274
Yue Ma7f44bbe2013-04-12 11:47:39 -070010275 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010276
10277 if(IS_WDI_STATUS_FAILURE(status))
10278 {
10279 /* failure returned by WDI API */
10280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10281 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10283 vos_mem_free(pWdaParams) ;
10284 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10285 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10286 }
10287
10288 return CONVERT_WDI2VOS_STATUS(status) ;
10289}
10290#endif // WLAN_FEATURE_GTK_OFFLOAD
10291
10292/*
10293 * -------------------------------------------------------------------------
10294 * DATA interface with WDI for Mgmt Frames
10295 * -------------------------------------------------------------------------
10296 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010297/*
10298 * FUNCTION: WDA_TxComplete
10299 * Callback function for the WDA_TxPacket
10300 */
10301VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10302 VOS_STATUS status )
10303{
10304
10305 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10306 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010307 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010308
10309 if(NULL == wdaContext)
10310 {
10311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10312 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010313 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010314 VOS_ASSERT(0);
10315 return VOS_STATUS_E_FAILURE;
10316 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010317
10318 /*Check if frame was timed out or not*/
10319 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10320 (v_PVOID_t)&uUserData);
10321
10322 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10323 {
10324 /*Discard frame - no further processing is needed*/
10325 vos_pkt_return_packet(pData);
10326 return VOS_STATUS_SUCCESS;
10327 }
10328
Jeff Johnson295189b2012-06-20 16:38:30 -070010329 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10330 if( NULL!=wdaContext->pTxCbFunc)
10331 {
10332 /*check if packet is freed already*/
10333 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10334 {
10335 wdaContext->pTxCbFunc(pMac, pData);
10336 }
10337 else
10338 {
10339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010340 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010341 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010342 //Return from here since we reaching here because the packet already timeout
10343 return status;
10344 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 }
10346
10347 /*
10348 * Trigger the event to bring the HAL TL Tx complete function to come
10349 * out of wait
10350 * Let the coe above to complete the packet first. When this event is set,
10351 * the thread waiting for the event may run and set Vospacket_freed causing the original
10352 * packet not being freed.
10353 */
10354 status = vos_event_set(&wdaContext->txFrameEvent);
10355 if(!VOS_IS_STATUS_SUCCESS(status))
10356 {
10357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10358 "NEW VOS Event Set failed - status = %d \n", status);
10359 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010360 return status;
10361}
Jeff Johnson295189b2012-06-20 16:38:30 -070010362/*
10363 * FUNCTION: WDA_TxPacket
10364 * Forward TX management frame to WDI
10365 */
10366VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10367 void *pFrmBuf,
10368 tANI_U16 frmLen,
10369 eFrameType frmType,
10370 eFrameTxDir txDir,
10371 tANI_U8 tid,
10372 pWDATxRxCompFunc pCompFunc,
10373 void *pData,
10374 pWDAAckFnTxComp pAckTxComp,
10375 tANI_U8 txFlag)
10376{
10377 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10378 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10379 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10380 tANI_U8 eventIdx = 0;
10381 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10382 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 if((NULL == pWDA)||(NULL == pFrmBuf))
10384 {
10385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010386 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010387 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010388 VOS_ASSERT(0);
10389 return VOS_STATUS_E_FAILURE;
10390 }
10391
10392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010393 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10395 if(NULL == pMac)
10396 {
10397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010398 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010399 VOS_ASSERT(0);
10400 return VOS_STATUS_E_FAILURE;
10401 }
10402
10403
10404
10405 /* store the call back function in WDA context */
10406 pWDA->pTxCbFunc = pCompFunc;
10407 /* store the call back for the function of ackTxComplete */
10408 if( pAckTxComp )
10409 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010410 if( NULL != pWDA->pAckTxCbFunc )
10411 {
10412 /* Already TxComp is active no need to active again */
10413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10414 "There is already one request pending for tx complete\n");
10415 pWDA->pAckTxCbFunc( pMac, 0);
10416 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010417
Jeff Johnsone7245742012-09-05 17:12:55 -070010418 if( VOS_STATUS_SUCCESS !=
10419 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10420 {
10421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10422 "Tx Complete timeout Timer Stop Failed ");
10423 }
10424 else
10425 {
10426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010427 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010428 }
10429 }
10430
10431 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
10432 pWDA->pAckTxCbFunc = pAckTxComp;
10433 if( VOS_STATUS_SUCCESS !=
10434 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
10435 {
10436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10437 "Tx Complete Timer Start Failed ");
10438 pWDA->pAckTxCbFunc = NULL;
10439 return eHAL_STATUS_FAILURE;
10440 }
10441 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010442 /* Reset the event to be not signalled */
10443 status = vos_event_reset(&pWDA->txFrameEvent);
10444 if(!VOS_IS_STATUS_SUCCESS(status))
10445 {
10446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10447 "VOS Event reset failed - status = %d\n",status);
10448 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
10449 if( pAckTxComp )
10450 {
10451 pWDA->pAckTxCbFunc = NULL;
10452 if( VOS_STATUS_SUCCESS !=
10453 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10454 {
10455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10456 "Tx Complete timeout Timer Stop Failed ");
10457 }
10458 }
10459 return VOS_STATUS_E_FAILURE;
10460 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010461
10462 /* If Peer Sta mask is set don't overwrite to self sta */
10463 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070010464 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010465 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070010466 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010467 else
10468 {
Ganesh K08bce952012-12-13 15:04:41 -080010469 /* Get system role, use the self station if in unknown role or STA role */
10470 systemRole = wdaGetGlobalSystemRole(pMac);
10471 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
10472 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080010473#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080010474 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010475#endif
Ganesh K08bce952012-12-13 15:04:41 -080010476 ))
10477 {
10478 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
10479 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080010480 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010481
Jeff Johnsone7245742012-09-05 17:12:55 -070010482 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
10483 disassoc frame reaches the HW, HAL has already deleted the peer station */
10484 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070010485 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080010486 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070010487 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010488 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010489 /*Send Probe request frames on self sta idx*/
10490 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070010491 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010492 /* Since we donot want probe responses to be retried, send probe responses
10493 through the NO_ACK queues */
10494 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
10495 {
10496 //probe response is sent out using self station and no retries options.
10497 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
10498 }
10499 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
10500 {
10501 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
10502 }
10503 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010504 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
10505
10506 /*Set frame tag to 0
10507 We will use the WDA user data in order to tag a frame as expired*/
10508 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10509 (v_PVOID_t)0);
10510
10511
10512 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
10513 frmLen, ucTypeSubType, tid,
10514 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
10515 {
10516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10517 "Sending Mgmt Frame failed - status = %d\n", status);
10518 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
10519 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
10520 if( pAckTxComp )
10521 {
10522 pWDA->pAckTxCbFunc = NULL;
10523 if( VOS_STATUS_SUCCESS !=
10524 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10525 {
10526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10527 "Tx Complete timeout Timer Stop Failed ");
10528 }
10529 }
10530 return VOS_STATUS_E_FAILURE;
10531 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010532 /*
10533 * Wait for the event to be set by the TL, to get the response of TX
10534 * complete, this event should be set by the Callback function called by TL
10535 */
10536 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
10537 &eventIdx);
10538 if(!VOS_IS_STATUS_SUCCESS(status))
10539 {
10540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10541 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010542 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010543 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
10544 after the packet gets completed(packet freed once)*/
10545
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010546 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070010547 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010548
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010549 /*Tag Frame as timed out for later deletion*/
10550 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10551 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
10552
Jeff Johnson295189b2012-06-20 16:38:30 -070010553 /* check whether the packet was freed already,so need not free again when
10554 * TL calls the WDA_Txcomplete routine
10555 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010556 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
10557 /*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 -070010558 {
10559 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010560 } */
10561
Jeff Johnson295189b2012-06-20 16:38:30 -070010562 if( pAckTxComp )
10563 {
10564 pWDA->pAckTxCbFunc = NULL;
10565 if( VOS_STATUS_SUCCESS !=
10566 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10567 {
10568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10569 "Tx Complete timeout Timer Stop Failed ");
10570 }
10571 }
10572 status = VOS_STATUS_E_FAILURE;
10573 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010574 return status;
10575}
Jeff Johnson295189b2012-06-20 16:38:30 -070010576/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053010577 * FUNCTION: WDA_ProcessDHCPStartInd
10578 * Forward DHCP Start to WDI
10579 */
10580static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
10581 tAniDHCPInd *dhcpStartInd)
10582{
10583 WDI_Status status;
10584 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10585 if (NULL == wdiDHCPInd)
10586 {
10587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10588 "%s: VOS MEM Alloc Failure", __func__);
10589 VOS_ASSERT(0);
10590 vos_mem_free(dhcpStartInd);
10591 return VOS_STATUS_E_NOMEM;
10592 }
10593
10594 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
10595 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
10596 sizeof(tSirMacAddr));
10597
10598 status = WDI_dhcpStartInd(wdiDHCPInd);
10599
10600 if (IS_WDI_STATUS_FAILURE(status))
10601 {
10602 vos_mem_free(wdiDHCPInd);
10603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10604 "DHCP Start Indication failed");
10605 }
10606 vos_mem_free(dhcpStartInd);
10607 return CONVERT_WDI2VOS_STATUS(status) ;
10608}
10609
10610 /*
10611 * FUNCTION: WDA_ProcessDHCPStopInd
10612 * Forward DHCP Stop to WDI
10613 */
10614 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
10615 tAniDHCPInd *dhcpStopInd)
10616 {
10617 WDI_Status status;
10618 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10619 if (NULL == wdiDHCPInd)
10620 {
10621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10622 "%s: VOS MEM Alloc Failure", __func__);
10623 VOS_ASSERT(0);
10624 vos_mem_free(dhcpStopInd);
10625 return VOS_STATUS_E_NOMEM;
10626 }
10627 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
10628 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
10629 status = WDI_dhcpStopInd(wdiDHCPInd);
10630 if (IS_WDI_STATUS_FAILURE(status))
10631 {
10632 vos_mem_free(wdiDHCPInd);
10633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10634 "DHCP Start Indication failed");
10635 }
10636 vos_mem_free(dhcpStopInd);
10637 return CONVERT_WDI2VOS_STATUS(status) ;
10638 }
10639
10640/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010641 * FUNCTION: WDA_McProcessMsg
10642 * Trigger DAL-AL to start CFG download
10643 */
10644VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10645{
10646 VOS_STATUS status = VOS_STATUS_SUCCESS;
10647 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010648 if(NULL == pMsg)
10649 {
10650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010651 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010652 VOS_ASSERT(0);
10653 return VOS_STATUS_E_FAILURE;
10654 }
10655
10656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010657 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010658
10659 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10660 if(NULL == pWDA )
10661 {
10662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010663 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010664 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010665 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010666 return VOS_STATUS_E_FAILURE;
10667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 /* Process all the WDA messages.. */
10669 switch( pMsg->type )
10670 {
10671 case WNI_CFG_DNLD_REQ:
10672 {
10673 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 /* call WDA complete event if config download success */
10675 if( VOS_IS_STATUS_SUCCESS(status) )
10676 {
10677 vos_WDAComplete_cback(pVosContext);
10678 }
10679 else
10680 {
10681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10682 "WDA Config Download failure" );
10683 }
10684 break ;
10685 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010686 /*
10687 * Init SCAN request from PE, convert it into DAL format
10688 * and send it to DAL
10689 */
10690 case WDA_INIT_SCAN_REQ:
10691 {
10692 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10693 break ;
10694 }
10695 /* start SCAN request from PE */
10696 case WDA_START_SCAN_REQ:
10697 {
10698 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10699 break ;
10700 }
10701 /* end SCAN request from PE */
10702 case WDA_END_SCAN_REQ:
10703 {
10704 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10705 break ;
10706 }
10707 /* end SCAN request from PE */
10708 case WDA_FINISH_SCAN_REQ:
10709 {
10710 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10711 break ;
10712 }
10713 /* join request from PE */
10714 case WDA_CHNL_SWITCH_REQ:
10715 {
10716 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10717 {
10718 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10719 }
10720 else
10721 {
10722 WDA_ProcessChannelSwitchReq(pWDA,
10723 (tSwitchChannelParams*)pMsg->bodyptr) ;
10724 }
10725 break ;
10726 }
10727 /* ADD BSS request from PE */
10728 case WDA_ADD_BSS_REQ:
10729 {
10730 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10731 break ;
10732 }
10733 case WDA_ADD_STA_REQ:
10734 {
10735 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10736 break ;
10737 }
10738 case WDA_DELETE_BSS_REQ:
10739 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010740 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10741 break ;
10742 }
10743 case WDA_DELETE_STA_REQ:
10744 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010745 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10746 break ;
10747 }
10748 case WDA_CONFIG_PARAM_UPDATE_REQ:
10749 {
10750 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10751 break ;
10752 }
10753 case WDA_SET_BSSKEY_REQ:
10754 {
10755 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10756 break ;
10757 }
10758 case WDA_SET_STAKEY_REQ:
10759 {
10760 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10761 break ;
10762 }
10763 case WDA_SET_STA_BCASTKEY_REQ:
10764 {
10765 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10766 break ;
10767 }
10768 case WDA_REMOVE_BSSKEY_REQ:
10769 {
10770 WDA_ProcessRemoveBssKeyReq(pWDA,
10771 (tRemoveBssKeyParams *)pMsg->bodyptr);
10772 break ;
10773 }
10774 case WDA_REMOVE_STAKEY_REQ:
10775 {
10776 WDA_ProcessRemoveStaKeyReq(pWDA,
10777 (tRemoveStaKeyParams *)pMsg->bodyptr);
10778 break ;
10779 }
10780 case WDA_REMOVE_STA_BCASTKEY_REQ:
10781 {
10782 /* TODO: currently UMAC is not sending this request, Add the code for
10783 handling this request when UMAC supports */
10784 break;
10785 }
10786#ifdef FEATURE_WLAN_CCX
10787 case WDA_TSM_STATS_REQ:
10788 {
10789 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10790 break;
10791 }
10792#endif
10793 case WDA_UPDATE_EDCA_PROFILE_IND:
10794 {
10795 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10796 break;
10797 }
10798 case WDA_ADD_TS_REQ:
10799 {
10800 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10801 break;
10802 }
10803 case WDA_DEL_TS_REQ:
10804 {
10805 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
10806 break;
10807 }
10808 case WDA_ADDBA_REQ:
10809 {
10810 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
10811 break;
10812 }
10813 case WDA_DELBA_IND:
10814 {
10815 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
10816 break;
10817 }
10818 case WDA_SET_LINK_STATE:
10819 {
10820 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
10821 break;
10822 }
10823 case WDA_GET_STATISTICS_REQ:
10824 {
10825 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
10826 break;
10827 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080010828#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
10829 case WDA_GET_ROAM_RSSI_REQ:
10830 {
10831 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
10832 break;
10833 }
10834#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010835 case WDA_PWR_SAVE_CFG:
10836 {
10837 if(pWDA->wdaState == WDA_READY_STATE)
10838 {
10839 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
10840 }
10841 else
10842 {
10843 if(NULL != pMsg->bodyptr)
10844 {
10845 vos_mem_free(pMsg->bodyptr);
10846 }
10847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10848 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
10849 }
10850 break;
10851 }
10852 case WDA_ENTER_IMPS_REQ:
10853 {
10854 if(pWDA->wdaState == WDA_READY_STATE)
10855 {
10856 WDA_ProcessEnterImpsReq(pWDA);
10857 }
10858 else
10859 {
10860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10861 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10862 }
10863 break;
10864 }
10865 case WDA_EXIT_IMPS_REQ:
10866 {
10867 if(pWDA->wdaState == WDA_READY_STATE)
10868 {
10869 WDA_ProcessExitImpsReq(pWDA);
10870 }
10871 else
10872 {
10873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10874 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10875 }
10876 break;
10877 }
10878 case WDA_ENTER_BMPS_REQ:
10879 {
10880 if(pWDA->wdaState == WDA_READY_STATE)
10881 {
10882 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
10883 }
10884 else
10885 {
10886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10887 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10888 }
10889 break;
10890 }
10891 case WDA_EXIT_BMPS_REQ:
10892 {
10893 if(pWDA->wdaState == WDA_READY_STATE)
10894 {
10895 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
10896 }
10897 else
10898 {
10899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10900 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10901 }
10902 break;
10903 }
10904 case WDA_ENTER_UAPSD_REQ:
10905 {
10906 if(pWDA->wdaState == WDA_READY_STATE)
10907 {
10908 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
10909 }
10910 else
10911 {
10912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10913 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10914 }
10915 break;
10916 }
10917 case WDA_EXIT_UAPSD_REQ:
10918 {
10919 if(pWDA->wdaState == WDA_READY_STATE)
10920 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010921 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 }
10923 else
10924 {
10925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10926 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10927 }
10928 break;
10929 }
10930 case WDA_UPDATE_UAPSD_IND:
10931 {
10932 if(pWDA->wdaState == WDA_READY_STATE)
10933 {
10934 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
10935 }
10936 else
10937 {
10938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10939 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
10940 }
10941 break;
10942 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010943 case WDA_REGISTER_PE_CALLBACK :
10944 {
10945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10946 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10947 /*TODO: store the PE callback */
10948 /* Do Nothing? MSG Body should be freed at here */
10949 if(NULL != pMsg->bodyptr)
10950 {
10951 vos_mem_free(pMsg->bodyptr);
10952 }
10953 break;
10954 }
10955 case WDA_SYS_READY_IND :
10956 {
10957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10958 "Handling msg type WDA_SYS_READY_IND " );
10959 pWDA->wdaState = WDA_READY_STATE;
10960 if(NULL != pMsg->bodyptr)
10961 {
10962 vos_mem_free(pMsg->bodyptr);
10963 }
10964 break;
10965 }
10966 case WDA_BEACON_FILTER_IND :
10967 {
10968 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
10969 break;
10970 }
10971 case WDA_BTC_SET_CFG:
10972 {
10973 /*TODO: handle this while dealing with BTC */
10974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10975 "Handling msg type WDA_BTC_SET_CFG " );
10976 /* Do Nothing? MSG Body should be freed at here */
10977 if(NULL != pMsg->bodyptr)
10978 {
10979 vos_mem_free(pMsg->bodyptr);
10980 }
10981 break;
10982 }
10983 case WDA_SIGNAL_BT_EVENT:
10984 {
10985 /*TODO: handle this while dealing with BTC */
10986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10987 "Handling msg type WDA_SIGNAL_BT_EVENT " );
10988 /* Do Nothing? MSG Body should be freed at here */
10989 if(NULL != pMsg->bodyptr)
10990 {
10991 vos_mem_free(pMsg->bodyptr);
10992 }
10993 break;
10994 }
10995 case WDA_CFG_RXP_FILTER_REQ:
10996 {
10997 WDA_ProcessConfigureRxpFilterReq(pWDA,
10998 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
10999 break;
11000 }
11001 case WDA_SET_HOST_OFFLOAD:
11002 {
11003 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11004 break;
11005 }
11006 case WDA_SET_KEEP_ALIVE:
11007 {
11008 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11009 break;
11010 }
11011#ifdef WLAN_NS_OFFLOAD
11012 case WDA_SET_NS_OFFLOAD:
11013 {
11014 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11015 break;
11016 }
11017#endif //WLAN_NS_OFFLOAD
11018 case WDA_ADD_STA_SELF_REQ:
11019 {
11020 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11021 break;
11022 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011023 case WDA_DEL_STA_SELF_REQ:
11024 {
11025 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11026 break;
11027 }
11028 case WDA_WOWL_ADD_BCAST_PTRN:
11029 {
11030 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11031 break;
11032 }
11033 case WDA_WOWL_DEL_BCAST_PTRN:
11034 {
11035 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11036 break;
11037 }
11038 case WDA_WOWL_ENTER_REQ:
11039 {
11040 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11041 break;
11042 }
11043 case WDA_WOWL_EXIT_REQ:
11044 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011045 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011046 break;
11047 }
11048 case WDA_TL_FLUSH_AC_REQ:
11049 {
11050 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11051 break;
11052 }
11053 case WDA_SIGNAL_BTAMP_EVENT:
11054 {
11055 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11056 break;
11057 }
11058#ifdef WDA_UT
11059 case WDA_WDI_EVENT_MSG:
11060 {
11061 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11062 break ;
11063 }
11064#endif
11065 case WDA_UPDATE_BEACON_IND:
11066 {
11067 WDA_ProcessUpdateBeaconParams(pWDA,
11068 (tUpdateBeaconParams *)pMsg->bodyptr);
11069 break;
11070 }
11071 case WDA_SEND_BEACON_REQ:
11072 {
11073 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11074 break;
11075 }
11076 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11077 {
11078 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11079 (tSendProbeRespParams *)pMsg->bodyptr);
11080 break;
11081 }
11082#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11083 case WDA_SET_MAX_TX_POWER_REQ:
11084 {
11085 WDA_ProcessSetMaxTxPowerReq(pWDA,
11086 (tMaxTxPowerParams *)pMsg->bodyptr);
11087 break;
11088 }
11089#endif
schang86c22c42013-03-13 18:41:24 -070011090 case WDA_SET_TX_POWER_REQ:
11091 {
11092 WDA_ProcessSetTxPowerReq(pWDA,
11093 (tSirSetTxPowerReq *)pMsg->bodyptr);
11094 break;
11095 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011096 case WDA_SET_P2P_GO_NOA_REQ:
11097 {
11098 WDA_ProcessSetP2PGONOAReq(pWDA,
11099 (tP2pPsParams *)pMsg->bodyptr);
11100 break;
11101 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 /* timer related messages */
11103 case WDA_TIMER_BA_ACTIVITY_REQ:
11104 {
11105 WDA_BaCheckActivity(pWDA) ;
11106 break ;
11107 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011108
11109 /* timer related messages */
11110 case WDA_TIMER_TRAFFIC_STATS_IND:
11111 {
11112 WDA_TimerTrafficStatsInd(pWDA);
11113 break;
11114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011115#ifdef WLAN_FEATURE_VOWIFI_11R
11116 case WDA_AGGR_QOS_REQ:
11117 {
11118 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11119 break;
11120 }
11121#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011122 case WDA_FTM_CMD_REQ:
11123 {
11124 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11125 break ;
11126 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011127#ifdef FEATURE_OEM_DATA_SUPPORT
11128 case WDA_START_OEM_DATA_REQ:
11129 {
11130 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11131 break;
11132 }
11133#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011134 /* Tx Complete Time out Indication */
11135 case WDA_TX_COMPLETE_TIMEOUT_IND:
11136 {
11137 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11138 break;
11139 }
11140 case WDA_WLAN_SUSPEND_IND:
11141 {
11142 WDA_ProcessWlanSuspendInd(pWDA,
11143 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11144 break;
11145 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011146 case WDA_WLAN_RESUME_REQ:
11147 {
11148 WDA_ProcessWlanResumeReq(pWDA,
11149 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11150 break;
11151 }
11152
11153 case WDA_UPDATE_CF_IND:
11154 {
11155 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11156 pMsg->bodyptr = NULL;
11157 break;
11158 }
11159#ifdef FEATURE_WLAN_SCAN_PNO
11160 case WDA_SET_PNO_REQ:
11161 {
11162 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11163 break;
11164 }
11165 case WDA_UPDATE_SCAN_PARAMS_REQ:
11166 {
11167 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11168 break;
11169 }
11170 case WDA_SET_RSSI_FILTER_REQ:
11171 {
11172 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11173 break;
11174 }
11175#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011176#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011177 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011178 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011179 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011180 break;
11181 }
11182#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011183 case WDA_SET_TX_PER_TRACKING_REQ:
11184 {
11185 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11186 break;
11187 }
11188
11189#ifdef WLAN_FEATURE_PACKET_FILTERING
11190 case WDA_8023_MULTICAST_LIST_REQ:
11191 {
11192 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11193 break;
11194 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011195 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11196 {
11197 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11198 break;
11199 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011200 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11201 {
11202 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11203 break;
11204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011205 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11206 {
11207 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11208 break;
11209 }
11210#endif // WLAN_FEATURE_PACKET_FILTERING
11211
11212
11213 case WDA_TRANSMISSION_CONTROL_IND:
11214 {
11215 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11216 break;
11217 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011218 case WDA_SET_POWER_PARAMS_REQ:
11219 {
11220 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11221 break;
11222 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011223#ifdef WLAN_FEATURE_GTK_OFFLOAD
11224 case WDA_GTK_OFFLOAD_REQ:
11225 {
11226 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11227 break;
11228 }
11229
11230 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11231 {
11232 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11233 break;
11234 }
11235#endif //WLAN_FEATURE_GTK_OFFLOAD
11236
11237 case WDA_SET_TM_LEVEL_REQ:
11238 {
11239 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11240 break;
11241 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011242#ifdef WLAN_FEATURE_11AC
11243 case WDA_UPDATE_OP_MODE:
11244 {
11245 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11246 {
11247 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11248 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11249 else
11250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11251 " VHT OpMode Feature is Not Supported \n");
11252 }
11253 else
11254 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11255 " 11AC Feature is Not Supported \n");
11256 break;
11257 }
11258#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011259#ifdef WLAN_FEATURE_11W
11260 case WDA_EXCLUDE_UNENCRYPTED_IND:
11261 {
11262 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11263 break;
11264 }
11265#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011266#ifdef FEATURE_WLAN_TDLS
11267 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11268 {
11269 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11270 break;
11271 }
11272#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011273 case WDA_DHCP_START_IND:
11274 {
11275 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11276 break;
11277 }
11278 case WDA_DHCP_STOP_IND:
11279 {
11280 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11281 break;
11282 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011283 default:
11284 {
11285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11286 "No Handling for msg type %x in WDA "
11287 ,pMsg->type);
11288 /* Do Nothing? MSG Body should be freed at here */
11289 if(NULL != pMsg->bodyptr)
11290 {
11291 vos_mem_free(pMsg->bodyptr);
11292 }
11293 //WDA_VOS_ASSERT(0) ;
11294 }
11295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011296 return status ;
11297}
11298
Jeff Johnson295189b2012-06-20 16:38:30 -070011299/*
11300 * FUNCTION: WDA_LowLevelIndCallback
11301 * IND API callback from WDI, send Ind to PE
11302 */
11303void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11304 void* pUserData )
11305{
11306 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11307#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11308 tSirRSSINotification rssiNotification;
11309#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011310 if(NULL == pWDA)
11311 {
11312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011313 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011314 VOS_ASSERT(0);
11315 return ;
11316 }
11317
11318 switch(wdiLowLevelInd->wdiIndicationType)
11319 {
11320 case WDI_RSSI_NOTIFICATION_IND:
11321 {
11322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11323 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011324#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11325 rssiNotification.bReserved =
11326 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11327 rssiNotification.bRssiThres1NegCross =
11328 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11329 rssiNotification.bRssiThres1PosCross =
11330 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11331 rssiNotification.bRssiThres2NegCross =
11332 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11333 rssiNotification.bRssiThres2PosCross =
11334 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11335 rssiNotification.bRssiThres3NegCross =
11336 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11337 rssiNotification.bRssiThres3PosCross =
11338 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011339 rssiNotification.avgRssi = (v_S7_t)
11340 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011341 WLANTL_BMPSRSSIRegionChangedNotification(
11342 pWDA->pVosContext,
11343 &rssiNotification);
11344#endif
11345 break ;
11346 }
11347 case WDI_MISSED_BEACON_IND:
11348 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011349 tpSirSmeMissedBeaconInd pMissBeacInd =
11350 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11352 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011353 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011354 if(NULL == pMissBeacInd)
11355 {
11356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11357 "%s: VOS MEM Alloc Failure", __func__);
11358 break;
11359 }
11360 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11361 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11362 pMissBeacInd->bssIdx =
11363 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11364 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 break ;
11366 }
11367 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11368 {
11369 /* TODO: Decode Ind and send Ind to PE */
11370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11371 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11372 break ;
11373 }
11374
11375 case WDI_MIC_FAILURE_IND:
11376 {
11377 tpSirSmeMicFailureInd pMicInd =
11378 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11379
11380 if(NULL == pMicInd)
11381 {
11382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011384 break;
11385 }
11386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11387 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11389 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11390 vos_mem_copy(pMicInd->bssId,
11391 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11392 sizeof(tSirMacAddr));
11393 vos_mem_copy(pMicInd->info.srcMacAddr,
11394 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11395 sizeof(tSirMacAddr));
11396 vos_mem_copy(pMicInd->info.taMacAddr,
11397 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11398 sizeof(tSirMacAddr));
11399 vos_mem_copy(pMicInd->info.dstMacAddr,
11400 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11401 sizeof(tSirMacAddr));
11402 vos_mem_copy(pMicInd->info.rxMacAddr,
11403 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11404 sizeof(tSirMacAddr));
11405 pMicInd->info.multicast =
11406 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11407 pMicInd->info.keyId=
11408 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11409 pMicInd->info.IV1=
11410 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11411 vos_mem_copy(pMicInd->info.TSC,
11412 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11414 (void *)pMicInd , 0) ;
11415 break ;
11416 }
11417 case WDI_FATAL_ERROR_IND:
11418 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011419 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011420 /* TODO: Decode Ind and send Ind to PE */
11421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11422 "Received WDI_FATAL_ERROR_IND from WDI ");
11423 break ;
11424 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011425 case WDI_DEL_STA_IND:
11426 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 tpDeleteStaContext pDelSTACtx =
11428 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11429
11430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11431 "Received WDI_DEL_STA_IND from WDI ");
11432 if(NULL == pDelSTACtx)
11433 {
11434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 break;
11437 }
11438 vos_mem_copy(pDelSTACtx->addr2,
11439 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11440 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011441 vos_mem_copy(pDelSTACtx->bssId,
11442 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11443 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 pDelSTACtx->assocId =
11445 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11446 pDelSTACtx->reasonCode =
11447 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11448 pDelSTACtx->staId =
11449 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011450 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11451 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011452 break ;
11453 }
11454 case WDI_COEX_IND:
11455 {
11456 tANI_U32 index;
11457 vos_msg_t vosMsg;
11458 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11459 if(NULL == pSmeCoexInd)
11460 {
11461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011462 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011463 break;
11464 }
11465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11466 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011467 /* Message Header */
11468 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11469 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011470 /* Info from WDI Indication */
11471 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11472 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11473 {
11474 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11475 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 /* VOS message wrapper */
11477 vosMsg.type = eWNI_SME_COEX_IND;
11478 vosMsg.bodyptr = (void *)pSmeCoexInd;
11479 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011480 /* Send message to SME */
11481 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11482 {
11483 /* free the mem and return */
11484 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11485 }
11486 else
11487 {
11488 /* DEBUG */
11489 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11490 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11491 pSmeCoexInd->coexIndType,
11492 pSmeCoexInd->coexIndData[0],
11493 pSmeCoexInd->coexIndData[1],
11494 pSmeCoexInd->coexIndData[2],
11495 pSmeCoexInd->coexIndData[3]);
11496 }
11497 break;
11498 }
11499 case WDI_TX_COMPLETE_IND:
11500 {
11501 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11502 /* Calling TxCompleteAck Indication from wda context*/
11503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11504 "Complete Indication received from HAL");
11505 if( pWDA->pAckTxCbFunc )
11506 {
11507 if( VOS_STATUS_SUCCESS !=
11508 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11509 {
11510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11511 "Tx Complete timeout Timer Stop Failed ");
11512 }
11513 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11514 pWDA->pAckTxCbFunc = NULL;
11515 }
11516 else
11517 {
11518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11519 "Tx Complete Indication is received after timeout ");
11520 }
11521 break;
11522 }
Viral Modid86bde22012-12-10 13:09:21 -080011523 case WDI_P2P_NOA_START_IND :
11524 {
11525 tSirP2PNoaStart *pP2pNoaStart =
11526 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11527
11528 if (NULL == pP2pNoaStart)
11529 {
11530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11531 "Memory allocation failure, "
11532 "WDI_P2P_NOA_START_IND not forwarded");
11533 break;
11534 }
11535 pP2pNoaStart->status =
11536 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11537 pP2pNoaStart->bssIdx =
11538 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11539 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11540 (void *)pP2pNoaStart , 0) ;
11541 break;
11542 }
11543
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011544#ifdef FEATURE_WLAN_TDLS
11545 case WDI_TDLS_IND :
11546 {
11547 tSirTdlsInd *pTdlsInd =
11548 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
11549
11550 if (NULL == pTdlsInd)
11551 {
11552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11553 "Memory allocation failure, "
11554 "WDI_TDLS_IND not forwarded");
11555 break;
11556 }
11557 pTdlsInd->status =
11558 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
11559 pTdlsInd->assocId =
11560 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
11561 pTdlsInd->staIdx =
11562 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
11563 pTdlsInd->reasonCode =
11564 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
11565 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
11566 (void *)pTdlsInd , 0) ;
11567 break;
11568 }
11569#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011570 case WDI_P2P_NOA_ATTR_IND :
11571 {
11572 tSirP2PNoaAttr *pP2pNoaAttr =
11573 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11575 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011576 if (NULL == pP2pNoaAttr)
11577 {
11578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11579 "Memory allocation failure, "
11580 "WDI_P2P_NOA_ATTR_IND not forwarded");
11581 break;
11582 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011583 pP2pNoaAttr->index =
11584 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11585 pP2pNoaAttr->oppPsFlag =
11586 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11587 pP2pNoaAttr->ctWin =
11588 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11589
11590 pP2pNoaAttr->uNoa1IntervalCnt =
11591 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11592 pP2pNoaAttr->uNoa1Duration =
11593 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11594 pP2pNoaAttr->uNoa1Interval =
11595 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11596 pP2pNoaAttr->uNoa1StartTime =
11597 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011598 pP2pNoaAttr->uNoa2IntervalCnt =
11599 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11600 pP2pNoaAttr->uNoa2Duration =
11601 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11602 pP2pNoaAttr->uNoa2Interval =
11603 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11604 pP2pNoaAttr->uNoa2StartTime =
11605 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011606 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11607 (void *)pP2pNoaAttr , 0) ;
11608 break;
11609 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011610#ifdef FEATURE_WLAN_SCAN_PNO
11611 case WDI_PREF_NETWORK_FOUND_IND:
11612 {
11613 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011614 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11615 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11616 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11617 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11618
Jeff Johnson295189b2012-06-20 16:38:30 -070011619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11620 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 if (NULL == pPrefNetworkFoundInd)
11622 {
11623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11624 "Memory allocation failure, "
11625 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11626 break;
11627 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011628 /* Message Header */
11629 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011630 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011631
11632 /* Info from WDI Indication */
11633 pPrefNetworkFoundInd->ssId.length =
11634 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011635 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011636 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11637 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11638 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011639 if (NULL !=
11640 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11641 {
11642 pPrefNetworkFoundInd->frameLength =
11643 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11644 vos_mem_copy( pPrefNetworkFoundInd->data,
11645 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11646 pPrefNetworkFoundInd->frameLength);
11647 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11648 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11649 }
11650 else
11651 {
11652 pPrefNetworkFoundInd->frameLength = 0;
11653 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011654 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011655 /* VOS message wrapper */
11656 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11657 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11658 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011659 /* Send message to SME */
11660 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11661 {
11662 /* free the mem and return */
11663 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11664 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011665 break;
11666 }
11667#endif // FEATURE_WLAN_SCAN_PNO
11668
11669#ifdef WLAN_WAKEUP_EVENTS
11670 case WDI_WAKE_REASON_IND:
11671 {
11672 vos_msg_t vosMsg;
11673 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11674 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11675 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11676
11677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11678 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11679 wdiLowLevelInd->wdiIndicationType,
11680 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11681 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11682 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11683
11684 if (NULL == pWakeReasonInd)
11685 {
11686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11687 "Memory allocation failure, "
11688 "WDI_WAKE_REASON_IND not forwarded");
11689 break;
11690 }
11691
11692 vos_mem_zero(pWakeReasonInd, allocSize);
11693
11694 /* Message Header */
11695 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11696 pWakeReasonInd->mesgLen = allocSize;
11697
11698 /* Info from WDI Indication */
11699 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11700 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11701 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11702 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11703 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11704 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11705 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11706 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11707
11708 /* VOS message wrapper */
11709 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11710 vosMsg.bodyptr = (void *) pWakeReasonInd;
11711 vosMsg.bodyval = 0;
11712
11713 /* Send message to SME */
11714 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11715 {
11716 /* free the mem and return */
11717 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11718 }
11719
11720 break;
11721 }
11722#endif // WLAN_WAKEUP_EVENTS
11723
11724 case WDI_TX_PER_HIT_IND:
11725 {
11726 vos_msg_t vosMsg;
11727 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11728 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11729 /* VOS message wrapper */
11730 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11731 vosMsg.bodyptr = NULL;
11732 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011733 /* Send message to SME */
11734 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11735 {
11736 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11737 }
11738 break;
11739 }
11740
11741 default:
11742 {
11743 /* TODO error */
11744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11745 "Received UNKNOWN Indication from WDI ");
11746 }
11747 }
11748 return ;
11749}
11750
Jeff Johnson295189b2012-06-20 16:38:30 -070011751/*
11752 * BA related processing in WDA.
11753 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011754void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
11755 void* pUserData)
11756{
11757 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11758 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011759 if(NULL == pWdaParams)
11760 {
11761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011762 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011763 VOS_ASSERT(0) ;
11764 return ;
11765 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011766 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 vos_mem_free(pWdaParams->wdaMsgParam) ;
11768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11769 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011771 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011772 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
11773 {
11774 tANI_U8 i = 0 ;
11775 tBaActivityInd *baActivityInd = NULL ;
11776 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
11777 tANI_U8 allocSize = sizeof(tBaActivityInd)
11778 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
11779 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
11780 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011781 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011782 if(NULL == baActivityInd)
11783 {
11784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011785 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011786 VOS_ASSERT(0) ;
11787 return;
11788 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011789 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
11790 sizeof(tSirMacAddr)) ;
11791 baActivityInd->baCandidateCnt = baCandidateCount ;
11792
11793 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
11794 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
11795
11796 for(i = 0 ; i < baCandidateCount ; i++)
11797 {
11798 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011799 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
11800 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011801 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
11802 {
11803 baCandidate->baInfo[tid].fBaEnable =
11804 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
11805 baCandidate->baInfo[tid].startingSeqNum =
11806 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
11807 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011808 wdiBaCandidate++ ;
11809 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011810 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011811 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
11812 }
11813 else
11814 {
11815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11816 "BA Trigger RSP with Failure received ");
11817 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011818 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011819}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011820
11821
11822/*
11823 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
11824 * during MCC
11825 */
11826void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
11827{
11828 wpt_uint32 enabled;
11829 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
11830 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
11831 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
11832
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011833 if (NULL == pMac )
11834 {
11835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11836 "%s: Invoked with invalid MAC context ", __func__ );
11837 VOS_ASSERT(0);
11838 return;
11839 }
11840
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011841 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11842 != eSIR_SUCCESS)
11843 {
11844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11845 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11846 return;
11847 }
11848
11849 if(!enabled)
11850 {
11851 return;
11852 }
11853
11854 if(NULL == pWDA)
11855 {
11856 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11857 "%s:WDA context is NULL", __func__);
11858 VOS_ASSERT(0);
11859 return;
11860 }
11861
11862 if(activate)
11863 {
11864 if( VOS_STATUS_SUCCESS !=
11865 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11866 {
11867 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11868 "Traffic Stats Timer Start Failed ");
11869 return;
11870 }
11871 WDI_DS_ActivateTrafficStats();
11872 }
11873 else
11874 {
11875 WDI_DS_DeactivateTrafficStats();
11876 WDI_DS_ClearTrafficStats();
11877
11878 if( VOS_STATUS_SUCCESS !=
11879 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11880 {
11881 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11882 "Traffic Stats Timer Stop Failed ");
11883 return;
11884 }
11885 }
11886}
11887
11888/*
11889 * Traffic Stats Timer handler
11890 */
11891void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
11892{
11893 WDI_Status wdiStatus;
11894 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
11895 WDI_TrafficStatsIndType trafficStatsIndParams;
11896 wpt_uint32 length, enabled;
11897 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11898
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011899 if (NULL == pMac )
11900 {
11901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11902 "%s: Invoked with invalid MAC context ", __func__ );
11903 VOS_ASSERT(0);
11904 return;
11905 }
11906
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011907 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11908 != eSIR_SUCCESS)
11909 {
11910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11911 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11912 return;
11913 }
11914
11915 if(!enabled)
11916 {
11917 WDI_DS_DeactivateTrafficStats();
11918 return;
11919 }
11920
11921 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
11922
11923 if(pWdiTrafficStats != NULL)
11924 {
11925 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
11926 trafficStatsIndParams.length = length;
11927 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080011928 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011929 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11930 trafficStatsIndParams.pUserData = pWDA;
11931
11932 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
11933
11934 if(WDI_STATUS_PENDING == wdiStatus)
11935 {
11936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11937 "Pending received for %s:%d ",__func__,__LINE__ );
11938 }
11939 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11940 {
11941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11942 "Failure in %s:%d ",__func__,__LINE__ );
11943 }
11944
11945 WDI_DS_ClearTrafficStats();
11946 }
11947 else
11948 {
11949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11950 "pWdiTrafficStats is Null");
11951 }
11952
11953 if( VOS_STATUS_SUCCESS !=
11954 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11955 {
11956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11957 "Traffic Stats Timer Start Failed ");
11958 return;
11959 }
11960}
11961
Jeff Johnson295189b2012-06-20 16:38:30 -070011962/*
11963 * BA Activity check timer handler
11964 */
11965void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
11966{
11967 tANI_U8 curSta = 0 ;
11968 tANI_U8 tid = 0 ;
11969 tANI_U8 size = 0 ;
11970 tANI_U8 baCandidateCount = 0 ;
11971 tANI_U8 newBaCandidate = 0 ;
11972 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
11973
11974 if(NULL == pWDA)
11975 {
11976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011977 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011978 VOS_ASSERT(0);
11979 return ;
11980 }
11981 if(WDA_MAX_STA < pWDA->wdaMaxSta)
11982 {
11983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11984 "Inconsistent STA entries in WDA");
11985 VOS_ASSERT(0) ;
11986 }
11987 /* walk through all STA entries and find out TX packet count */
11988 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
11989 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080011990#ifdef WLAN_SOFTAP_VSTA_FEATURE
11991 // We can only do BA on "hard" STAs.
11992 if (!(IS_HWSTA_IDX(curSta)))
11993 {
11994 continue;
11995 }
11996#endif //WLAN_SOFTAP_VSTA_FEATURE
11997 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
11998 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011999 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012000 tANI_U32 txPktCount = 0 ;
12001 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012002 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012003 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
12004 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070012005 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
12006 curSta, tid, &txPktCount)))
12007 {
12008#if 0
12009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12010 "************* %d:%d, %d ",curSta, txPktCount,
12011 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
12012#endif
12013 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012014 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070012015 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
12016 curSta, tid)))
12017 {
12018 /* get prepare for sending message to HAL */
12019 //baCandidate[baCandidateCount].staIdx = curSta ;
12020 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
12021 newBaCandidate = WDA_ENABLE_BA ;
12022 }
12023 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
12024 }
12025 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012026 /* fill the entry for all the sta with given TID's */
12027 if(WDA_ENABLE_BA == newBaCandidate)
12028 {
12029 /* move to next BA candidate */
12030 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
12031 size += sizeof(WDI_TriggerBAReqCandidateType) ;
12032 baCandidateCount++ ;
12033 newBaCandidate = WDA_DISABLE_BA ;
12034 }
12035 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012036 /* prepare and send message to hal */
12037 if( 0 < baCandidateCount)
12038 {
12039 WDI_Status status = WDI_STATUS_SUCCESS ;
12040 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
12041 tWDA_ReqParams *pWdaParams =
12042 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012043 if(NULL == pWdaParams)
12044 {
12045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012047 VOS_ASSERT(0) ;
12048 return;
12049 }
12050 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
12051 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
12052 if(NULL == wdiTriggerBaReq)
12053 {
12054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012055 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012056 VOS_ASSERT(0) ;
12057 vos_mem_free(pWdaParams);
12058 return;
12059 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012060 do
12061 {
12062 WDI_TriggerBAReqinfoType *triggerBaInfo =
12063 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
12064 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
12065 /* TEMP_FIX: Need to see if WDI need check for assoc session for
12066 * for each request */
12067 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
12068 triggerBaInfo->ucBASessionID = 0;
12069 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
12070 } while(0) ;
12071 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
12072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012073 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012074 pWdaParams->pWdaContext = pWDA;
12075 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
12076 pWdaParams->wdaMsgParam = NULL;
12077 status = WDI_TriggerBAReq(wdiTriggerBaReq,
12078 WDA_TriggerBaReqCallback, pWdaParams) ;
12079 if(IS_WDI_STATUS_FAILURE(status))
12080 {
12081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12082 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
12083 vos_mem_free(pWdaParams->wdaMsgParam) ;
12084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12085 vos_mem_free(pWdaParams) ;
12086 }
12087 }
12088 else
12089 {
12090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12091 "There is no TID for initiating BA");
12092 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 if( VOS_STATUS_SUCCESS !=
12094 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12095 {
12096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12097 "BA Activity Timer Stop Failed ");
12098 return ;
12099 }
12100 if( VOS_STATUS_SUCCESS !=
12101 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12102 {
12103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12104 "BA Activity Timer Start Failed ");
12105 return;
12106 }
12107 return ;
12108}
Jeff Johnson295189b2012-06-20 16:38:30 -070012109/*
12110 * WDA common routine to create timer used by WDA.
12111 */
12112static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12113{
Jeff Johnson295189b2012-06-20 16:38:30 -070012114 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12115 tANI_U32 val = 0 ;
12116 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12117
12118 if(NULL == pMac)
12119 {
12120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012121 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012122 VOS_ASSERT(0);
12123 return VOS_STATUS_E_FAILURE;
12124 }
12125 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12126 != eSIR_SUCCESS)
12127 {
12128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12129 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12130 return VOS_STATUS_E_FAILURE;
12131 }
12132 val = SYS_MS_TO_TICKS(val) ;
12133
12134 /* BA activity check timer */
12135 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12136 "BA Activity Check timer", WDA_TimerHandler,
12137 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12138 if(status != TX_SUCCESS)
12139 {
12140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12141 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012142 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012143 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012144 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012145 /* Tx Complete Timeout timer */
12146 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12147 "Tx Complete Check timer", WDA_TimerHandler,
12148 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012149 if(status != TX_SUCCESS)
12150 {
12151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12152 "Unable to create Tx Complete Timeout timer");
12153 /* Destroy timer of BA activity check timer */
12154 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12155 if(status != TX_SUCCESS)
12156 {
12157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12158 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012159 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012160 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012161 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012162 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012163
12164 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12165
12166 /* Traffic Stats timer */
12167 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12168 "Traffic Stats timer", WDA_TimerHandler,
12169 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12170 if(status != TX_SUCCESS)
12171 {
12172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12173 "Unable to create traffic stats timer");
12174 /* Destroy timer of BA activity check timer */
12175 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12176 if(status != TX_SUCCESS)
12177 {
12178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12179 "Unable to Destroy BA activity timer");
12180 }
12181 /* Destroy timer of tx complete timer */
12182 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12183 if(status != TX_SUCCESS)
12184 {
12185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12186 "Unable to Tx complete timer");
12187 }
12188 return VOS_STATUS_E_FAILURE ;
12189 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012190 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012191}
Jeff Johnson295189b2012-06-20 16:38:30 -070012192/*
12193 * WDA common routine to destroy timer used by WDA.
12194 */
12195static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12196{
12197 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12199 if(status != TX_SUCCESS)
12200 {
12201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12202 "Unable to Destroy Tx Complete Timeout timer");
12203 return eSIR_FAILURE ;
12204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012205 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12206 if(status != TX_SUCCESS)
12207 {
12208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12209 "Unable to Destroy BA activity timer");
12210 return eSIR_FAILURE ;
12211 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012212 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12213 if(status != TX_SUCCESS)
12214 {
12215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12216 "Unable to Destroy traffic stats timer");
12217 return eSIR_FAILURE ;
12218 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012219 return eSIR_SUCCESS ;
12220}
Jeff Johnson295189b2012-06-20 16:38:30 -070012221/*
12222 * WDA timer handler.
12223 */
12224void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12225{
12226 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12227 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012228 /*
12229 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12230 */
12231 wdaMsg.type = timerInfo ;
12232 wdaMsg.bodyptr = NULL;
12233 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012234 /* post the message.. */
12235 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
12236 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
12237 {
12238 vosStatus = VOS_STATUS_E_BADMSG;
12239 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012240}
Jeff Johnson295189b2012-06-20 16:38:30 -070012241/*
12242 * WDA Tx Complete timeout Indication.
12243 */
12244void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
12245{
12246 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012247 if( pWDA->pAckTxCbFunc )
12248 {
12249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12250 "TxComplete timer expired\n");
12251 pWDA->pAckTxCbFunc( pMac, 0);
12252 pWDA->pAckTxCbFunc = NULL;
12253 }
12254 else
12255 {
12256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12257 "There is no request pending for TxComplete and wait timer expired\n");
12258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012259}
Jeff Johnson295189b2012-06-20 16:38:30 -070012260/*
12261 * WDA Set REG Domain to VOS NV
12262 */
12263eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
12264{
12265 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
12266 {
12267 return eHAL_STATUS_INVALID_PARAMETER;
12268 }
12269 return eHAL_STATUS_SUCCESS;
12270}
Jeff Johnson295189b2012-06-20 16:38:30 -070012271
Jeff Johnson295189b2012-06-20 16:38:30 -070012272#ifdef FEATURE_WLAN_SCAN_PNO
12273/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012274 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012275 *
12276 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012277void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012278{
12279 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012281 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012282 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012283 {
12284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012285 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012286 VOS_ASSERT(0) ;
12287 return ;
12288 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012289
Yue Ma7f44bbe2013-04-12 11:47:39 -070012290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12291 vos_mem_free(pWdaParams->wdaMsgParam);
12292 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012293
12294 return ;
12295}
Jeff Johnson295189b2012-06-20 16:38:30 -070012296/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012297 * FUNCTION: WDA_PNOScanReqCallback
12298 * Free memory.
12299 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
12300 */
12301void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012302{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012303 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12304
12305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12306 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12307
12308 if(NULL == pWdaParams)
12309 {
12310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12311 "%s: pWdaParams received NULL", __func__);
12312 VOS_ASSERT(0);
12313 return;
12314 }
12315
12316 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12317 {
12318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12319 vos_mem_free(pWdaParams->wdaMsgParam);
12320 vos_mem_free(pWdaParams);
12321 }
12322
12323 return;
12324}
12325/*
12326 * FUNCTION: WDA_UpdateScanParamsRespCallback
12327 *
12328 */
12329void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12330{
12331 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012333 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012334 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012335 {
12336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012337 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012338 VOS_ASSERT(0) ;
12339 return ;
12340 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012341
12342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12343 vos_mem_free(pWdaParams->wdaMsgParam);
12344 vos_mem_free(pWdaParams);
12345
Jeff Johnson295189b2012-06-20 16:38:30 -070012346 return ;
12347}
Jeff Johnson295189b2012-06-20 16:38:30 -070012348/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012349 * FUNCTION: WDA_UpdateScanParamsReqCallback
12350 * Free memory.
12351 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12352 */
12353void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12354{
12355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12356
12357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12358 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12359
12360 if(NULL == pWdaParams)
12361 {
12362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12363 "%s: pWdaParams received NULL", __func__);
12364 VOS_ASSERT(0);
12365 return;
12366 }
12367
12368 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12369 {
12370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12371 vos_mem_free(pWdaParams->wdaMsgParam);
12372 vos_mem_free(pWdaParams);
12373 }
12374
12375 return;
12376}
12377/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012378 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12379 * Request to WDI to set Preferred Network List.Offload
12380 */
12381VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12382 tSirPNOScanReq *pPNOScanReqParams)
12383{
Jeff Johnson43971f52012-07-17 12:26:56 -070012384 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012385 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12386 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12387 tWDA_ReqParams *pWdaParams ;
12388 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012390 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 if(NULL == pwdiPNOScanReqInfo)
12392 {
12393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012395 VOS_ASSERT(0);
12396 return VOS_STATUS_E_NOMEM;
12397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012398 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12399 if(NULL == pWdaParams)
12400 {
12401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012403 VOS_ASSERT(0);
12404 vos_mem_free(pwdiPNOScanReqInfo);
12405 return VOS_STATUS_E_NOMEM;
12406 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012407 //
12408 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12409 //
12410 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12411 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012412 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12413 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12414 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012415 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12416 {
12417 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12418 &pPNOScanReqParams->aNetworks[i],
12419 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12420 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012421 /*Scan timer intervals*/
12422 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12423 &pPNOScanReqParams->scanTimers,
12424 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012425 /*Probe template for 2.4GHz band*/
12426 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12427 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12428 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012429 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12430 pPNOScanReqParams->p24GProbeTemplate,
12431 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012432 /*Probe template for 5GHz band*/
12433 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12434 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12435 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012436 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12437 pPNOScanReqParams->p5GProbeTemplate,
12438 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012439 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12440 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012441
Jeff Johnson295189b2012-06-20 16:38:30 -070012442 /* Store Params pass it to WDI */
12443 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12444 pWdaParams->pWdaContext = pWDA;
12445 /* Store param pointer as passed in by caller */
12446 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012447 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012448 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012449 if(IS_WDI_STATUS_FAILURE(status))
12450 {
12451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12452 "Failure in Set PNO REQ WDI API, free all the memory " );
12453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12454 vos_mem_free(pWdaParams->wdaMsgParam);
12455 pWdaParams->wdaWdiApiMsgParam = NULL;
12456 pWdaParams->wdaMsgParam = NULL;
12457 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012458 return CONVERT_WDI2VOS_STATUS(status) ;
12459}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012460
12461#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12462
12463void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12464{
12465 /*Convert the CSR Auth types to WDI Auth types */
12466 switch (csrAuthType)
12467 {
12468 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12469 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12470 break;
12471#ifdef FEATURE_WLAN_CCX
12472 case eCSR_AUTH_TYPE_CCKM_WPA:
12473 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12474 break;
12475#endif
12476 case eCSR_AUTH_TYPE_WPA:
12477 *AuthType = eWDA_AUTH_TYPE_WPA;
12478 break;
12479 case eCSR_AUTH_TYPE_WPA_PSK:
12480 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12481 break;
12482#ifdef FEATURE_WLAN_CCX
12483 case eCSR_AUTH_TYPE_CCKM_RSN:
12484 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12485 break;
12486#endif
12487 case eCSR_AUTH_TYPE_RSN:
12488 *AuthType = eWDA_AUTH_TYPE_RSN;
12489 break;
12490 case eCSR_AUTH_TYPE_RSN_PSK:
12491 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12492 break;
12493#if defined WLAN_FEATURE_VOWIFI_11R
12494 case eCSR_AUTH_TYPE_FT_RSN:
12495 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12496 break;
12497 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12498 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12499 break;
12500#endif
12501#ifdef FEATURE_WLAN_WAPI
12502 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12503 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12504 break;
12505 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12506 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12507 break;
12508#endif /* FEATURE_WLAN_WAPI */
12509 case eCSR_AUTH_TYPE_SHARED_KEY:
12510 case eCSR_AUTH_TYPE_AUTOSWITCH:
12511 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12512 break;
12513#if 0
12514 case eCSR_AUTH_TYPE_SHARED_KEY:
12515 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12516 break;
12517 case eCSR_AUTH_TYPE_AUTOSWITCH:
12518 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12519#endif
12520 default:
12521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12522 "%s: Unknown Auth Type", __func__);
12523 break;
12524 }
12525}
12526void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12527{
12528 switch (csrEncrType)
12529 {
12530 case eCSR_ENCRYPT_TYPE_NONE:
12531 *EncrType = WDI_ED_NONE;
12532 break;
12533 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12534 case eCSR_ENCRYPT_TYPE_WEP40:
12535 *EncrType = WDI_ED_WEP40;
12536 break;
12537 case eCSR_ENCRYPT_TYPE_WEP104:
12538 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12539 *EncrType = WDI_ED_WEP104;
12540 break;
12541 case eCSR_ENCRYPT_TYPE_TKIP:
12542 *EncrType = WDI_ED_TKIP;
12543 break;
12544 case eCSR_ENCRYPT_TYPE_AES:
12545 *EncrType = WDI_ED_CCMP;
12546 break;
12547#ifdef WLAN_FEATURE_11W
12548 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12549 *EncrType = WDI_ED_AES_128_CMAC;
12550 break;
12551#endif
12552#ifdef FEATURE_WLAN_WAPI
12553 case eCSR_ENCRYPT_TYPE_WPI:
12554 *EncrType = WDI_ED_WPI;
12555 break;
12556#endif
12557 case eCSR_ENCRYPT_TYPE_ANY:
12558 *EncrType = WDI_ED_ANY;
12559 break;
12560
12561 default:
12562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12563 "%s: Unknown Encryption Type", __func__);
12564 break;
12565 }
12566}
12567
12568/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012569 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012570 * Request to WDI to set Roam Offload Scan
12571 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012572VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012573 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12574{
12575 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012576 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
12577 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012578 tWDA_ReqParams *pWdaParams ;
12579 v_U8_t csrAuthType;
12580 WDI_RoamNetworkType *pwdiRoamNetworkType;
12581 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12583 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012584 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012585 {
12586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12587 "%s: VOS MEM Alloc Failure", __func__);
12588 VOS_ASSERT(0);
12589 return VOS_STATUS_E_NOMEM;
12590 }
12591 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12592 if (NULL == pWdaParams)
12593 {
12594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12595 "%s: VOS MEM Alloc Failure", __func__);
12596 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012597 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012598 return VOS_STATUS_E_NOMEM;
12599 }
12600
12601 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012602 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012603 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012604 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
12605 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012606 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12607 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12608 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12609 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12610 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12611 sizeof(pwdiRoamNetworkType->currAPbssid));
12612 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12613 csrAuthType);
12614 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12615 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12616 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12617 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12618 pwdiRoamOffloadScanInfo->LookupThreshold =
12619 pRoamOffloadScanReqParams->LookupThreshold ;
12620 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12621 pRoamOffloadScanReqParams->RoamRssiDiff ;
12622 pwdiRoamOffloadScanInfo->Command =
12623 pRoamOffloadScanReqParams->Command ;
12624 pwdiRoamOffloadScanInfo->StartScanReason =
12625 pRoamOffloadScanReqParams->StartScanReason ;
12626 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12627 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12628 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12629 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12630 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12631 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12632 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12633 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12634 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12635 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12636 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12637 pRoamOffloadScanReqParams->IsCCXEnabled ;
12638 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12639 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12640 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12641 pwdiRoamNetworkType->ssId.ucLength =
12642 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12643 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12644 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12645 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12646 pwdiRoamNetworkType->ChannelCount =
12647 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12648 pwdiRoamOffloadScanInfo->ChannelCacheType =
12649 pRoamOffloadScanReqParams->ChannelCacheType;
12650 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12651 pRoamOffloadScanReqParams->ValidChannelList,
12652 pRoamOffloadScanReqParams->ValidChannelCount);
12653 pwdiRoamOffloadScanInfo->ValidChannelCount =
12654 pRoamOffloadScanReqParams->ValidChannelCount;
12655 pwdiRoamOffloadScanInfo->us24GProbeSize =
12656 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12657 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12658 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12659 pRoamOffloadScanReqParams->p24GProbeTemplate,
12660 pwdiRoamOffloadScanInfo->us24GProbeSize);
12661 pwdiRoamOffloadScanInfo->us5GProbeSize =
12662 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12663 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12664 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12665 pRoamOffloadScanReqParams->p5GProbeTemplate,
12666 pwdiRoamOffloadScanInfo->us5GProbeSize);
12667 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12668 pRoamOffloadScanReqParams->MDID.mdiePresent;
12669 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12670 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012671 pwdiRoamOffloadScanInfo->nProbes =
12672 pRoamOffloadScanReqParams->nProbes;
12673 pwdiRoamOffloadScanInfo->HomeAwayTime =
12674 pRoamOffloadScanReqParams->HomeAwayTime;
12675 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012676 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012677 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012678 pWdaParams->pWdaContext = pWDA;
12679 /* Store param pointer as passed in by caller */
12680 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012681 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012682 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12683 if(IS_WDI_STATUS_FAILURE(status))
12684 {
12685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12686 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12688 vos_mem_free(pWdaParams->wdaMsgParam);
12689 pWdaParams->wdaWdiApiMsgParam = NULL;
12690 pWdaParams->wdaMsgParam = NULL;
12691 }
12692 return CONVERT_WDI2VOS_STATUS(status) ;
12693}
12694#endif
12695
Jeff Johnson295189b2012-06-20 16:38:30 -070012696/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012697 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012698 *
12699 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012700void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012701{
12702 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12703
12704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012705 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012706
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012707 if(NULL == pWdaParams)
12708 {
12709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012710 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012711 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012712 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012713 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012714
Jeff Johnson295189b2012-06-20 16:38:30 -070012715 vos_mem_free(pWdaParams->wdaMsgParam) ;
12716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12717 vos_mem_free(pWdaParams) ;
12718
12719 return ;
12720}
12721/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012722 * FUNCTION: WDA_RssiFilterReqCallback
12723 * Free memory.
12724 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
12725 */
12726void WDA_RssiFilterReqCallback(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_ProcessSetPreferredNetworkList
12752 * Request to WDI to set Preferred Network List.Offload
12753 */
12754VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
12755 tSirSetRSSIFilterReq* pRssiFilterParams)
12756{
Jeff Johnson43971f52012-07-17 12:26:56 -070012757 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012758 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
12759 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
12760 tWDA_ReqParams *pWdaParams ;
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 if(NULL == pwdiSetRssiFilterReqInfo)
12764 {
12765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012766 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012767 VOS_ASSERT(0);
12768 return VOS_STATUS_E_NOMEM;
12769 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012770 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12771 if(NULL == pWdaParams)
12772 {
12773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012775 VOS_ASSERT(0);
12776 vos_mem_free(pwdiSetRssiFilterReqInfo);
12777 return VOS_STATUS_E_NOMEM;
12778 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012779 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012780 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
12781 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012782
Jeff Johnson295189b2012-06-20 16:38:30 -070012783 /* Store Params pass it to WDI */
12784 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
12785 pWdaParams->pWdaContext = pWDA;
12786 /* Store param pointer as passed in by caller */
12787 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012788 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012789 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012790 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012791 if(IS_WDI_STATUS_FAILURE(status))
12792 {
12793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12794 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
12795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12796 vos_mem_free(pWdaParams->wdaMsgParam);
12797 pWdaParams->wdaWdiApiMsgParam = NULL;
12798 pWdaParams->wdaMsgParam = NULL;
12799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012800 return CONVERT_WDI2VOS_STATUS(status) ;
12801}
12802
Jeff Johnson295189b2012-06-20 16:38:30 -070012803/*
12804 * FUNCTION: WDA_ProcessUpdateScanParams
12805 * Request to WDI to update Scan Parameters
12806 */
12807VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
12808 tSirUpdateScanParams *pUpdateScanParams)
12809{
Jeff Johnson43971f52012-07-17 12:26:56 -070012810 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012811 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
12812 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
12813 sizeof(WDI_UpdateScanParamsInfoType)) ;
12814 tWDA_ReqParams *pWdaParams ;
12815 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012817 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012818 if(NULL == wdiUpdateScanParamsInfoType)
12819 {
12820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012821 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012822 VOS_ASSERT(0);
12823 return VOS_STATUS_E_NOMEM;
12824 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012825 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12826 if ( NULL == pWdaParams )
12827 {
12828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012830 VOS_ASSERT(0);
12831 vos_mem_free(wdiUpdateScanParamsInfoType);
12832 return VOS_STATUS_E_NOMEM;
12833 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012834 //
12835 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
12836 //
Jeff Johnson295189b2012-06-20 16:38:30 -070012837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12838 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
12839 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
12840 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
12841 "sir struct %d wdi struct %d",
12842 pUpdateScanParams->b11dEnabled,
12843 pUpdateScanParams->b11dResolved,
12844 pUpdateScanParams->ucChannelCount,
12845 pUpdateScanParams->usPassiveMinChTime,
12846 pUpdateScanParams->usPassiveMaxChTime,
12847 pUpdateScanParams->usActiveMinChTime,
12848 pUpdateScanParams->usActiveMaxChTime,
12849 sizeof(tSirUpdateScanParams),
12850 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
12851
Jeff Johnson295189b2012-06-20 16:38:30 -070012852 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
12853 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070012854 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
12855 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
12857 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070012858 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
12859 pUpdateScanParams->usActiveMaxChTime;
12860 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
12861 pUpdateScanParams->usActiveMinChTime;
12862 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
12863 pUpdateScanParams->usPassiveMaxChTime;
12864 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
12865 pUpdateScanParams->usPassiveMinChTime;
12866
Jeff Johnson295189b2012-06-20 16:38:30 -070012867 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053012868 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
12869 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070012870
Jeff Johnson295189b2012-06-20 16:38:30 -070012871 for ( i = 0; i <
12872 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
12873 i++)
12874 {
12875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12876 "Update Scan Parameters channel: %d",
12877 pUpdateScanParams->aChannels[i]);
12878
12879 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
12880 pUpdateScanParams->aChannels[i];
12881 }
12882
Yue Ma7f44bbe2013-04-12 11:47:39 -070012883 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
12884 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012885
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 /* Store Params pass it to WDI */
12887 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
12888 pWdaParams->pWdaContext = pWDA;
12889 /* Store param pointer as passed in by caller */
12890 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070012891
Jeff Johnson295189b2012-06-20 16:38:30 -070012892
12893
12894 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012895 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012896 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012897 if(IS_WDI_STATUS_FAILURE(status))
12898 {
12899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12900 "Failure in Update Scan Params EQ WDI API, free all the memory " );
12901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12902 vos_mem_free(pWdaParams->wdaMsgParam);
12903 vos_mem_free(pWdaParams);
12904 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012905 return CONVERT_WDI2VOS_STATUS(status) ;
12906}
12907#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012908
12909#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12910/*
12911 * FUNCTION: WDA_RoamOffloadScanReqCallback
12912 *
12913 */
12914void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
12915{
12916 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012917 vos_msg_t vosMsg;
12918 wpt_uint8 reason = 0;
12919
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070012920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012921 "<------ %s " ,__func__);
12922 if (NULL == pWdaParams)
12923 {
12924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12925 "%s: pWdaParams received NULL", __func__);
12926 VOS_ASSERT(0) ;
12927 return ;
12928 }
12929 if ( pWdaParams != NULL )
12930 {
12931 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
12932 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012933 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12935 }
12936 if ( pWdaParams->wdaMsgParam != NULL)
12937 {
12938 vos_mem_free(pWdaParams->wdaMsgParam);
12939 }
12940
12941 vos_mem_free(pWdaParams) ;
12942 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012943 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
12944 vosMsg.bodyptr = NULL;
12945 if (WDI_STATUS_SUCCESS != status)
12946 {
12947 reason = 0;
12948 }
12949 vosMsg.bodyval = reason;
12950 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12951 {
12952 /* free the mem and return */
12953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12954 "Failed to post the rsp to UMAC" ,__func__);
12955 }
12956
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012957 return ;
12958}
12959#endif
12960
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012961/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012962 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012963 *
12964 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012965void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012966{
12967 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12968
12969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12970 "<------ %s " ,__func__);
12971
12972 if(NULL == pWdaParams)
12973 {
12974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12975 "%s: pWdaParams received NULL", __func__);
12976 VOS_ASSERT(0);
12977 return;
12978 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012979
12980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12981 vos_mem_free(pWdaParams->wdaMsgParam);
12982 vos_mem_free(pWdaParams);
12983
12984 return;
12985}
12986/*
12987 * FUNCTION: WDA_SetPowerParamsReqCallback
12988 * Free memory.
12989 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
12990 */
12991void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12992{
12993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12994
12995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12996 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12997
12998 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012999 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13001 "%s: pWdaParams received NULL", __func__);
13002 VOS_ASSERT(0);
13003 return;
13004 }
13005
13006 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13007 {
13008 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13009 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013010 vos_mem_free(pWdaParams);
13011 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013012
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013013 return;
13014}
13015
Jeff Johnson295189b2012-06-20 16:38:30 -070013016#ifdef WLAN_FEATURE_PACKET_FILTERING
13017/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013018 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013019 *
13020 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013021void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013022 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
13023 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013024{
13025 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013027 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013028 if(NULL == pWdaParams)
13029 {
13030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013031 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013032 VOS_ASSERT(0) ;
13033 return ;
13034 }
13035
13036 vos_mem_free(pWdaParams->wdaMsgParam) ;
13037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13038 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013039 //print a msg, nothing else to do
13040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013041 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013042 return ;
13043}
Jeff Johnson295189b2012-06-20 16:38:30 -070013044/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013045 * FUNCTION: WDA_8023MulticastListReqCallback
13046 * Free memory.
13047 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
13048 */
13049void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
13050{
13051 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13052
13053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13054 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13055
13056 if(NULL == pWdaParams)
13057 {
13058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13059 "%s: pWdaParams received NULL", __func__);
13060 VOS_ASSERT(0);
13061 return;
13062 }
13063
13064 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13065 {
13066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13067 vos_mem_free(pWdaParams->wdaMsgParam);
13068 vos_mem_free(pWdaParams);
13069 }
13070
13071 return;
13072}
13073/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013074 * FUNCTION: WDA_Process8023MulticastListReq
13075 * Request to WDI to add 8023 Multicast List
13076 */
13077VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
13078 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
13079{
Jeff Johnson43971f52012-07-17 12:26:56 -070013080 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013081 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
13082 tWDA_ReqParams *pWdaParams ;
13083 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013085 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013086 pwdiFltPktSetMcListReqParamsType =
13087 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
13088 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
13089 ) ;
13090 if(NULL == pwdiFltPktSetMcListReqParamsType)
13091 {
13092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013093 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013094 return VOS_STATUS_E_NOMEM;
13095 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013096 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13097 if(NULL == pWdaParams)
13098 {
13099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013101 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
13102 return VOS_STATUS_E_NOMEM;
13103 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013104
Jeff Johnson295189b2012-06-20 16:38:30 -070013105 //
13106 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
13107 //
13108 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070013109 pRcvFltMcAddrList->ulMulticastAddrCnt;
13110
13111 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13112 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13113 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13114 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13115
Jeff Johnson295189b2012-06-20 16:38:30 -070013116 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13117 {
13118 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13119 &(pRcvFltMcAddrList->multicastAddr[i]),
13120 sizeof(tSirMacAddr));
13121 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013122 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13123 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013124
Jeff Johnson295189b2012-06-20 16:38:30 -070013125 /* Store Params pass it to WDI */
13126 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13127 pWdaParams->pWdaContext = pWDA;
13128 /* Store param pointer as passed in by caller */
13129 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013130 status = WDI_8023MulticastListReq(
13131 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013132 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013133 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013134 if(IS_WDI_STATUS_FAILURE(status))
13135 {
13136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13137 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13138 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13139 vos_mem_free(pWdaParams->wdaMsgParam);
13140 vos_mem_free(pWdaParams);
13141 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013142 return CONVERT_WDI2VOS_STATUS(status) ;
13143}
Jeff Johnson295189b2012-06-20 16:38:30 -070013144/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013145 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013146 *
13147 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013148void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013149 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13150 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013151{
13152 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013154 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013155 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013156 if(NULL == pWdaParams)
13157 {
13158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013159 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013160 VOS_ASSERT(0) ;
13161 return ;
13162 }
13163
13164 vos_mem_free(pWdaParams->wdaMsgParam) ;
13165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13166 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013167 //print a msg, nothing else to do
13168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013169 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013170 return ;
13171}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013172
13173/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013174 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13175 * Free memory.
13176 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013177 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013178void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013179 void* pUserData)
13180{
13181 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13182
13183 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13184 "<------ %s, wdiStatus: %d",
13185 __func__, wdiStatus);
13186
13187 if (NULL == pWdaParams)
13188 {
13189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13190 "%s: Invalid pWdaParams pointer", __func__);
13191 VOS_ASSERT(0);
13192 return;
13193 }
13194
13195 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13196 {
13197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13198 vos_mem_free(pWdaParams->wdaMsgParam);
13199 vos_mem_free(pWdaParams);
13200 }
13201
13202 return;
13203}
13204
Jeff Johnson295189b2012-06-20 16:38:30 -070013205/*
13206 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13207 * Request to WDI to set Receive Filters
13208 */
13209VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13210 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13211{
Jeff Johnson43971f52012-07-17 12:26:56 -070013212 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013213 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13214 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13215 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13216 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13217 tWDA_ReqParams *pWdaParams ;
13218 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013220 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013221 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13222 {
13223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013224 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013225 VOS_ASSERT(0);
13226 return VOS_STATUS_E_NOMEM;
13227 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13229 if(NULL == pWdaParams)
13230 {
13231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013233 VOS_ASSERT(0);
13234 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
13235 return VOS_STATUS_E_NOMEM;
13236 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013237 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
13238 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
13239 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
13240 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013241 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
13242 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
13243
13244 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
13245 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013246
13247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13248 "FID %d FT %d NParams %d CT %d",
13249 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
13250 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
13251 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
13252 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070013253 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
13254 {
13255 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
13256 &pRcvPktFilterCfg->paramsData[i],
13257 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070013258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13259 "Proto %d Comp Flag %d \n",
13260 pwdiSetRcvPktFilterReqParamsType->
13261 wdiPktFilterCfg.paramsData[i].protocolLayer,
13262 pwdiSetRcvPktFilterReqParamsType->
13263 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070013264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13265 "Data Offset %d Data Len %d\n",
13266 pwdiSetRcvPktFilterReqParamsType->
13267 wdiPktFilterCfg.paramsData[i].dataOffset,
13268 pwdiSetRcvPktFilterReqParamsType->
13269 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070013270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13271 "CData: %d:%d:%d:%d:%d:%d\n",
13272 pwdiSetRcvPktFilterReqParamsType->
13273 wdiPktFilterCfg.paramsData[i].compareData[0],
13274 pwdiSetRcvPktFilterReqParamsType->
13275 wdiPktFilterCfg.paramsData[i].compareData[1],
13276 pwdiSetRcvPktFilterReqParamsType->
13277 wdiPktFilterCfg.paramsData[i].compareData[2],
13278 pwdiSetRcvPktFilterReqParamsType->
13279 wdiPktFilterCfg.paramsData[i].compareData[3],
13280 pwdiSetRcvPktFilterReqParamsType->
13281 wdiPktFilterCfg.paramsData[i].compareData[4],
13282 pwdiSetRcvPktFilterReqParamsType->
13283 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13285 "MData: %d:%d:%d:%d:%d:%d\n",
13286 pwdiSetRcvPktFilterReqParamsType->
13287 wdiPktFilterCfg.paramsData[i].dataMask[0],
13288 pwdiSetRcvPktFilterReqParamsType->
13289 wdiPktFilterCfg.paramsData[i].dataMask[1],
13290 pwdiSetRcvPktFilterReqParamsType->
13291 wdiPktFilterCfg.paramsData[i].dataMask[2],
13292 pwdiSetRcvPktFilterReqParamsType->
13293 wdiPktFilterCfg.paramsData[i].dataMask[3],
13294 pwdiSetRcvPktFilterReqParamsType->
13295 wdiPktFilterCfg.paramsData[i].dataMask[4],
13296 pwdiSetRcvPktFilterReqParamsType->
13297 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013298 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013299 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013300 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013301 /* Store Params pass it to WDI */
13302 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
13303 pWdaParams->pWdaContext = pWDA;
13304 /* Store param pointer as passed in by caller */
13305 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013306 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013307 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013308 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013309 if(IS_WDI_STATUS_FAILURE(status))
13310 {
13311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13312 "Failure in SetFilter(),free all the memory,status %d ",status);
13313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13314 vos_mem_free(pWdaParams->wdaMsgParam);
13315 vos_mem_free(pWdaParams);
13316 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013317 return CONVERT_WDI2VOS_STATUS(status) ;
13318}
Jeff Johnson295189b2012-06-20 16:38:30 -070013319/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013320 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013321 *
13322 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013323void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013324 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13325 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013326{
13327 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13328 tWDA_CbContext *pWDA;
13329 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13330 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13331 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13332 tANI_U8 i;
13333 vos_msg_t vosMsg;
13334
13335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013336 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013337 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13338
Jeff Johnsone7245742012-09-05 17:12:55 -070013339 if(NULL == pRcvFltPktMatchCntRsp)
13340 {
13341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013342 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013343 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013344 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013345 return ;
13346 }
13347
Jeff Johnson295189b2012-06-20 16:38:30 -070013348 if(NULL == pWdaParams)
13349 {
13350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013351 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013352 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013353 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013354 return ;
13355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013356 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13357 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013358 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13359 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13360
13361 /* Message Header */
13362 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13363 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13364
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013365 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013366
13367 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13368 {
13369 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13370 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13371 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013372 /* VOS message wrapper */
13373 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13374 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13375 vosMsg.bodyval = 0;
13376 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13377 {
13378 /* free the mem and return */
13379 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13380 }
13381
13382 vos_mem_free(pWdaParams->wdaMsgParam) ;
13383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13384 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013385
13386 return;
13387}
13388/*
13389 * FUNCTION: WDA_FilterMatchCountReqCallback
13390 * Free memory and send RSP back to SME.
13391 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13392 */
13393void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13394{
13395 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13396 vos_msg_t vosMsg;
13397
13398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13399 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13400
13401 if(NULL == pWdaParams)
13402 {
13403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13404 "%s: pWdaParams received NULL", __func__);
13405 VOS_ASSERT(0);
13406 return;
13407 }
13408
13409 /* VOS message wrapper */
13410 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13411 vosMsg.bodyptr = NULL;
13412 vosMsg.bodyval = 0;
13413
13414 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13415 {
13416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13417 vos_mem_free(pWdaParams->wdaMsgParam);
13418 vos_mem_free(pWdaParams);
13419 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13420 }
13421
13422 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013423}
Jeff Johnson295189b2012-06-20 16:38:30 -070013424/*
13425 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13426 * Request to WDI to get PC Filter Match Count
13427 */
13428VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13429{
Jeff Johnson43971f52012-07-17 12:26:56 -070013430 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013431 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13432 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13433 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013435 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013436 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13437 {
13438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013440 VOS_ASSERT(0);
13441 return VOS_STATUS_E_NOMEM;
13442 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013443 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13444 if(NULL == pWdaParams)
13445 {
13446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013448 VOS_ASSERT(0);
13449 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13450 return VOS_STATUS_E_NOMEM;
13451 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013452
Yue Ma7f44bbe2013-04-12 11:47:39 -070013453 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13454 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013455
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013456 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13457 pRcvFltPktMatchRsp->bssId,
13458 sizeof(wpt_macAddr));
13459
Jeff Johnson295189b2012-06-20 16:38:30 -070013460 /* Store Params pass it to WDI */
13461 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13462 pWdaParams->pWdaContext = pWDA;
13463 /* Store param pointer as passed in by caller */
13464 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013465 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013466 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013467 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013468 if(IS_WDI_STATUS_FAILURE(status))
13469 {
13470 /* failure returned by WDI API */
13471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13472 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13474 vos_mem_free(pWdaParams) ;
13475 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13476 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013478 return CONVERT_WDI2VOS_STATUS(status) ;
13479}
Jeff Johnson295189b2012-06-20 16:38:30 -070013480/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013481 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013482 *
13483 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013484void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013485 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13486 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013487{
13488 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013490 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013491/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13492 if(NULL == pWdaParams)
13493 {
13494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013495 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013496 VOS_ASSERT(0) ;
13497 return ;
13498 }
13499
13500 vos_mem_free(pWdaParams->wdaMsgParam) ;
13501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13502 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013503 //print a msg, nothing else to do
13504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013505 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013506 return ;
13507}
Jeff Johnson295189b2012-06-20 16:38:30 -070013508/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013509 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13510 * Free memory.
13511 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13512 */
13513void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13514{
13515 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13516
13517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13518 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13519
13520 if(NULL == pWdaParams)
13521 {
13522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13523 "%s: Invalid pWdaParams pointer", __func__);
13524 VOS_ASSERT(0);
13525 return;
13526 }
13527
13528 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13529 {
13530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13531 vos_mem_free(pWdaParams->wdaMsgParam);
13532 vos_mem_free(pWdaParams);
13533 }
13534
13535 return;
13536}
13537/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013538 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13539 * Request to WDI to clear Receive Filters
13540 */
13541VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13542 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13543{
Jeff Johnson43971f52012-07-17 12:26:56 -070013544 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013545 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13546 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13547 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013549 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013550 if(NULL == pwdiRcvFltPktClearReqParamsType)
13551 {
13552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013553 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013554 VOS_ASSERT(0);
13555 return VOS_STATUS_E_NOMEM;
13556 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013557 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13558 if(NULL == pWdaParams)
13559 {
13560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013561 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013562 VOS_ASSERT(0);
13563 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13564 return VOS_STATUS_E_NOMEM;
13565 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013566 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13567 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013568 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13569 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13570 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13571 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013572
Yue Ma7f44bbe2013-04-12 11:47:39 -070013573 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013574 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013575 /* Store Params pass it to WDI */
13576 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13577 pWdaParams->pWdaContext = pWDA;
13578 /* Store param pointer as passed in by caller */
13579 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013580 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013581 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013582 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013583 if(IS_WDI_STATUS_FAILURE(status))
13584 {
13585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13586 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013588 vos_mem_free(pWdaParams->wdaMsgParam);
13589 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013590 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013591 return CONVERT_WDI2VOS_STATUS(status) ;
13592}
13593#endif // WLAN_FEATURE_PACKET_FILTERING
13594
Jeff Johnson295189b2012-06-20 16:38:30 -070013595/*
13596 * FUNCTION: WDA_ProcessSetPowerParamsReq
13597 * Request to WDI to set power params
13598 */
13599VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13600 tSirSetPowerParamsReq *pPowerParams)
13601{
Jeff Johnson43971f52012-07-17 12:26:56 -070013602 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013603 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13604 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013605 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013607 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013608 if(NULL == pwdiSetPowerParamsReqInfo)
13609 {
13610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013612 VOS_ASSERT(0);
13613 return VOS_STATUS_E_NOMEM;
13614 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013615 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13616 if(NULL == pWdaParams)
13617 {
13618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013619 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013620 VOS_ASSERT(0);
13621 vos_mem_free(pwdiSetPowerParamsReqInfo);
13622 return VOS_STATUS_E_NOMEM;
13623 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013624
Jeff Johnson295189b2012-06-20 16:38:30 -070013625
13626 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13627 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013628 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13629 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013630 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13631 pPowerParams->uListenInterval;
13632 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13633 pPowerParams->uBcastMcastFilter;
13634 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13635 pPowerParams->uEnableBET;
13636 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13637 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070013638 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
13639 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013640 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13641 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013642
Jeff Johnson295189b2012-06-20 16:38:30 -070013643 /* Store Params pass it to WDI */
13644 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13645 pWdaParams->pWdaContext = pWDA;
13646 /* Store param pointer as passed in by caller */
13647 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013648 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013649 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013650 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013651 if(IS_WDI_STATUS_FAILURE(status))
13652 {
13653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13654 "Failure in Set power params REQ WDI API, free all the memory " );
13655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13656 vos_mem_free(pWdaParams->wdaMsgParam);
13657 pWdaParams->wdaWdiApiMsgParam = NULL;
13658 pWdaParams->wdaMsgParam = NULL;
13659 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013660 return CONVERT_WDI2VOS_STATUS(status) ;
13661}
13662
13663/*
13664 * FUNCTION: WDA_SetTmLevelRspCallback
13665 * Set TM Level response
13666 */
13667void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13668{
13669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13670
13671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013672 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013673
13674 if(NULL == pWdaParams)
13675 {
13676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013677 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013678 VOS_ASSERT(0) ;
13679 return ;
13680 }
13681
13682 /* Dose not need to send notification to upper layer
13683 * Just free allocated resources */
13684 if( pWdaParams != NULL )
13685 {
13686 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13687 {
13688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13689 }
13690 vos_mem_free(pWdaParams->wdaMsgParam) ;
13691 vos_mem_free(pWdaParams) ;
13692 }
13693}
13694
13695/*
13696 * FUNCTION: WDA_ProcessSetTmLevelReq
13697 * Set TM Level request
13698 */
13699VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13700 tAniSetTmLevelReq *setTmLevelReq)
13701{
13702 WDI_Status status = WDI_STATUS_SUCCESS ;
13703 tWDA_ReqParams *pWdaParams ;
13704 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13705 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13706 sizeof(WDI_SetTmLevelReqType)) ;
13707 if(NULL == wdiSetTmLevelReq)
13708 {
13709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013710 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013711 VOS_ASSERT(0);
13712 return VOS_STATUS_E_NOMEM;
13713 }
13714
13715 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13716 if(NULL == pWdaParams)
13717 {
13718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013719 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013720 VOS_ASSERT(0);
13721 vos_mem_free(wdiSetTmLevelReq);
13722 return VOS_STATUS_E_NOMEM;
13723 }
13724
13725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013726 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013727
13728 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
13729 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
13730
13731 pWdaParams->pWdaContext = pWDA;
13732 pWdaParams->wdaMsgParam = setTmLevelReq;
13733 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
13734
13735 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
13736 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
13737
13738 if(IS_WDI_STATUS_FAILURE(status))
13739 {
13740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080013741 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070013742 vos_mem_free(pWdaParams->wdaMsgParam) ;
13743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13744 vos_mem_free(pWdaParams) ;
13745 }
13746
13747 return CONVERT_WDI2VOS_STATUS(status) ;
13748}
13749
13750VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
13751 tpTxControlParams pTxCtrlParam)
13752{
13753 VOS_STATUS wdaStatus;
13754
13755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013756 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013757 if( pTxCtrlParam == NULL )
13758 {
13759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013760 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013761 return VOS_STATUS_E_FAILURE;
13762 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013763 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
13764 {
13765 wdaStatus = WDA_SuspendDataTx(pWDA);
13766 }
13767 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
13768 {
13769 wdaStatus = WDA_ResumeDataTx(pWDA);
13770 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013771 return wdaStatus;
13772}
13773
13774 /* FUNCTION WDA_featureCapsExchange
13775 * WDA API to invoke capability exchange between host and FW.
13776 */
13777void WDA_featureCapsExchange(v_PVOID_t pVosContext)
13778{
13779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013780 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013781 WDI_featureCapsExchangeReq( NULL, pVosContext);
13782}
13783
Yathish9f22e662012-12-10 14:21:35 -080013784/* FUNCTION WDA_disableCapablityFeature
13785 * WDA API to diable Active mode offload in host.
13786 */
13787void WDA_disableCapablityFeature(tANI_U8 feature_index)
13788{
13789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13790 "%s:enter", __func__ );
13791 WDI_disableCapablityFeature(feature_index);
13792}
13793
Jeff Johnson295189b2012-06-20 16:38:30 -070013794 /* FUNCTION WDA_getHostWlanFeatCaps
13795 * Wrapper for WDI API, that will return if the feature (enum value).passed
13796 * to this API is supported or not in Host
13797 * return value
13798 * 0 - implies feature is NOT Supported
13799 * any non zero value - implies feature is SUPPORTED
13800 */
13801tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
13802{
13803 return WDI_getHostWlanFeatCaps(featEnumValue);
13804}
13805
13806 /* FUNCTION WDA_getFwWlanFeatCaps
13807 * Wrapper for WDI API, that will return if the feature (enum value).passed
13808 * to this API is supported or not in FW
13809 * return value
13810 * 0 - implies feature is NOT Supported
13811 * any non zero value - implies feature is SUPPORTED
13812 */
13813tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
13814{
13815 return WDI_getFwWlanFeatCaps(featEnumValue);
13816}
13817
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013818
Jeff Johnson295189b2012-06-20 16:38:30 -070013819/*
13820 * FUNCTION: WDA_shutdown
13821 * Shutdown WDA/WDI without handshaking with Riva.
13822 * Synchronous function.
13823 */
13824VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
13825{
13826 WDI_Status wdiStatus;
13827 //tANI_U8 eventIdx = 0;
13828 VOS_STATUS status = VOS_STATUS_SUCCESS;
13829 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013830 if (NULL == pWDA)
13831 {
13832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013833 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013834 VOS_ASSERT(0);
13835 return VOS_STATUS_E_FAILURE;
13836 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013837 /* FTM mode stay START_STATE */
13838 if( (WDA_READY_STATE != pWDA->wdaState) &&
13839 (WDA_INIT_STATE != pWDA->wdaState) &&
13840 (WDA_START_STATE != pWDA->wdaState) )
13841 {
13842 VOS_ASSERT(0);
13843 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013844
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013845 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
13846 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070013847 {
13848 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013849 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013850 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013851
Jeff Johnson295189b2012-06-20 16:38:30 -070013852 /* call WDI shutdown */
13853 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070013854 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
13855 {
13856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13857 "error in WDA Stop" );
13858 status = VOS_STATUS_E_FAILURE;
13859 }
13860 /* WDI stop is synchrnous, shutdown is complete when it returns */
13861 pWDA->wdaState = WDA_STOP_STATE;
13862
Jeff Johnson295189b2012-06-20 16:38:30 -070013863 /* shutdown should perform the stop & close actions. */
13864 /* Destroy the event */
13865 status = vos_event_destroy(&pWDA->txFrameEvent);
13866 if(!VOS_IS_STATUS_SUCCESS(status))
13867 {
13868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13869 "VOS Event destroy failed - status = %d\n", status);
13870 status = VOS_STATUS_E_FAILURE;
13871 }
13872 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
13873 if(!VOS_IS_STATUS_SUCCESS(status))
13874 {
13875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13876 "VOS Event destroy failed - status = %d\n", status);
13877 status = VOS_STATUS_E_FAILURE;
13878 }
13879 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
13880 if(!VOS_IS_STATUS_SUCCESS(status))
13881 {
13882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13883 "VOS Event destroy failed - status = %d\n", status);
13884 status = VOS_STATUS_E_FAILURE;
13885 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013886 /* free WDA context */
13887 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
13888 if ( !VOS_IS_STATUS_SUCCESS(status) )
13889 {
13890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13891 "error in WDA close " );
13892 status = VOS_STATUS_E_FAILURE;
13893 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013894 return status;
13895}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013896
Jeff Johnsone7245742012-09-05 17:12:55 -070013897/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013898 * FUNCTION: WDA_setNeedShutdown
13899 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070013900 */
13901
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013902void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070013903{
13904 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013905 if(pWDA == NULL)
13906 {
13907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13908 "Could not get the WDA Context pointer" );
13909 return;
13910 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013911 pWDA->needShutdown = TRUE;
13912}
13913/*
13914 * FUNCTION: WDA_needShutdown
13915 * WDA needs a shutdown
13916 */
13917
13918v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
13919{
13920 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013921 if(pWDA == NULL)
13922 {
13923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13924 "Could not get the WDA Context pointer" );
13925 return 0;
13926 }
13927 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070013928}
13929
Mohit Khanna4a70d262012-09-11 16:30:12 -070013930#ifdef WLAN_FEATURE_11AC
13931/*
13932 * FUNCTION: WDA_SetBeaconFilterReqCallback
13933 *
13934 */
13935void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
13936{
13937 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013939 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013940 if(NULL == pWdaParams)
13941 {
13942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013943 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013944 VOS_ASSERT(0) ;
13945 return ;
13946 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013947
Mohit Khanna4a70d262012-09-11 16:30:12 -070013948 vos_mem_free(pWdaParams->wdaMsgParam) ;
13949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13950 vos_mem_free(pWdaParams) ;
13951 /*
13952 * No respone required for SetBeaconFilter req so just free the request
13953 * param here
13954 */
13955
13956 return ;
13957}
13958
13959VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
13960 tUpdateVHTOpMode *pData)
13961{
13962 WDI_Status status = WDI_STATUS_SUCCESS ;
13963 tWDA_ReqParams *pWdaParams ;
13964 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
13965 sizeof(WDI_UpdateVHTOpMode)) ;
13966 if(NULL == wdiTemp)
13967 {
13968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013969 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013970 VOS_ASSERT(0);
13971 return VOS_STATUS_E_NOMEM;
13972 }
13973 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13974 if(NULL == pWdaParams)
13975 {
13976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013977 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013978 VOS_ASSERT(0);
13979 vos_mem_free(wdiTemp);
13980 return VOS_STATUS_E_NOMEM;
13981 }
13982
13983 wdiTemp->opMode = pData->opMode;
13984 wdiTemp->staId = pData->staId;
13985
13986 pWdaParams->pWdaContext = pWDA;
13987 /* Store Req pointer, as this will be used for response */
13988 pWdaParams->wdaMsgParam = (void *)pData;
13989 /* store Params pass it to WDI */
13990 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
13991
13992 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
13993
13994 if(IS_WDI_STATUS_FAILURE(status))
13995 {
13996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13997 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
13998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13999 vos_mem_free(pWdaParams->wdaMsgParam);
14000 vos_mem_free(pWdaParams);
14001 }
14002 return CONVERT_WDI2VOS_STATUS(status) ;
14003}
14004#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014005
14006/*==========================================================================
14007 FUNCTION WDA_TransportChannelDebug
14008
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070014009 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014010 Display Transport Channel debugging information
14011 User may request to display DXE channel snapshot
14012 Or if host driver detects any abnormal stcuk may display
14013
14014 PARAMETERS
schang6295e542013-03-12 15:31:23 -070014015 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080014016 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014017 enableStallDetect : Enable stall detect feature
14018 This feature will take effect to data performance
14019 Not integrate till fully verification
14020
14021 RETURN VALUE
14022 NONE
14023
14024===========================================================================*/
14025void WDA_TransportChannelDebug
14026(
schang6295e542013-03-12 15:31:23 -070014027 tpAniSirGlobal pMac,
14028 v_BOOL_t displaySnapshot,
14029 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014030)
14031{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070014032 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014033 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014034}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070014035
14036/*==========================================================================
14037 FUNCTION WDA_SetEnableSSR
14038
14039 DESCRIPTION
14040 API to enable/disable SSR on WDI timeout
14041
14042 PARAMETERS
14043 enableSSR : enable/disable SSR
14044
14045 RETURN VALUE
14046 NONE
14047
14048===========================================================================*/
14049void WDA_SetEnableSSR(v_BOOL_t enableSSR)
14050{
14051 WDI_SetEnableSSR(enableSSR);
14052}