blob: 31260b2b63446b0453419787bf02edfafce407c9 [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
Leo Chang9056f462013-08-01 19:21:11 -0700228
229#ifdef FEATURE_WLAN_LPHB
230VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
231 tSirLPHBReq *pData);
232#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700233/*
234 * FUNCTION: WDA_open
235 * Allocate the WDA context
236 */
237VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
238 tMacOpenParameters *pMacParams )
239{
240 tWDA_CbContext *wdaContext;
241 VOS_STATUS status;
242 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700243 /* Allocate WDA context */
244 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
245 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
246 if(!VOS_IS_STATUS_SUCCESS(status))
247 {
248 return VOS_STATUS_E_NOMEM;
249 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700250 /*__asm int 3;*/
251 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
252
253 /* Initialize data structures */
254 wdaContext->pVosContext = pVosContext;
255 wdaContext->wdaState = WDA_INIT_STATE;
256 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
257
258 /* Initialize WDA-WDI synchronization event */
259 status = vos_event_init(&wdaContext->wdaWdiEvent);
260 if(!VOS_IS_STATUS_SUCCESS(status))
261 {
262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
263 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800264 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700265 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700266 /* Init Frame transfer event */
267 status = vos_event_init(&wdaContext->txFrameEvent);
268 if(!VOS_IS_STATUS_SUCCESS(status))
269 {
270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
271 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800272 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700273 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 status = vos_event_init(&wdaContext->suspendDataTxEvent);
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
278 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800279 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
282 if(!VOS_IS_STATUS_SUCCESS(status))
283 {
284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
285 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800286 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700287 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700289 wdaContext->driverMode = pMacParams->driverType;
290 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
291 &wdiDevCapability, pMacParams->driverType))
292 {
293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
294 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800295 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 }
297 else
298 {
299 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
300 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
301 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 /* update max STA in WDA used for BA */
303 wdaContext->wdaMaxSta = pMacParams->maxStation;
304 /* store the frameTransRequired flag in wdaContext, to send this to HAL
305 * in WDA_Start
306 */
307 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
308 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800310
311error:
312 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
313 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700314}
315
Jeff Johnson295189b2012-06-20 16:38:30 -0700316/*
317 * FUNCTION: WDA_preStart
318 * Trigger DAL-AL to start CFG download
319 */
320VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
321{
322 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
323 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 /*
325 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
326 */
327 wdaMsg.type = WNI_CFG_DNLD_REQ ;
328 wdaMsg.bodyptr = NULL;
329 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700330 /* post the message.. */
331 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
332 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
333 {
334 vosStatus = VOS_STATUS_E_BADMSG;
335 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 return( vosStatus );
337}
Jeff Johnson295189b2012-06-20 16:38:30 -0700338/*
339 * FUNCTION: WDA_wdiStartCallback
340 * Once WDI_Start is finished, WDI start callback will be called by WDI
341 * to indicate completion of WDI_Start.
342 */
343void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
344 void *pVosContext)
345{
346 tWDA_CbContext *wdaContext;
347 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 if (NULL == pVosContext)
349 {
350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700351 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 return;
353 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
355 if (NULL == wdaContext)
356 {
357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700358 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 return;
360 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
362 {
363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700364 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
366 else
367 {
368 wdaContext->wdaState = WDA_START_STATE;
369 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700370 /* extract and save version information from the Start Response */
371 wdaContext->wcnssWlanCompiledVersion.major =
372 wdiRspParams->wlanCompiledVersion.major;
373 wdaContext->wcnssWlanCompiledVersion.minor =
374 wdiRspParams->wlanCompiledVersion.minor;
375 wdaContext->wcnssWlanCompiledVersion.version =
376 wdiRspParams->wlanCompiledVersion.version;
377 wdaContext->wcnssWlanCompiledVersion.revision =
378 wdiRspParams->wlanCompiledVersion.revision;
379 wdaContext->wcnssWlanReportedVersion.major =
380 wdiRspParams->wlanReportedVersion.major;
381 wdaContext->wcnssWlanReportedVersion.minor =
382 wdiRspParams->wlanReportedVersion.minor;
383 wdaContext->wcnssWlanReportedVersion.version =
384 wdiRspParams->wlanReportedVersion.version;
385 wdaContext->wcnssWlanReportedVersion.revision =
386 wdiRspParams->wlanReportedVersion.revision;
387 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
388 wdiRspParams->wcnssSoftwareVersion,
389 sizeof(wdaContext->wcnssSoftwareVersionString));
390 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
391 wdiRspParams->wcnssHardwareVersion,
392 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700393 /* Notify WDA_start that WDI_Start has completed */
394 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700395 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 {
397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700398 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 return;
401}
402
Jeff Johnson295189b2012-06-20 16:38:30 -0700403/*
404 * FUNCTION: WDA_start
405 * Prepare TLV configuration and call WDI_Start.
406 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700407VOS_STATUS WDA_start(v_PVOID_t pVosContext)
408{
409 tWDA_CbContext *wdaContext;
410 VOS_STATUS status;
411 WDI_Status wdiStatus;
412 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 if (NULL == pVosContext)
414 {
415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700416 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700417 return VOS_STATUS_E_FAILURE;
418 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
420 if (NULL == wdaContext)
421 {
422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700423 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 return VOS_STATUS_E_FAILURE;
425 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 /* Non-FTM mode, WDA status for START must be INIT
427 * FTM mode, WDA Status for START can be INIT or STOP */
428 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
429 (WDA_STOP_STATE != wdaContext->wdaState) )
430 {
431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
432 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700433 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return VOS_STATUS_E_FAILURE;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* initialize the wdiStartParam. Note that we can create this on
437 the stack since we won't exit until WDI_Start() completes or
438 times out */
439 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* prepare the config TLV for the WDI */
442 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
443 if ( !VOS_IS_STATUS_SUCCESS(status) )
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700446 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 return VOS_STATUS_E_FAILURE;
448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* note from here onwards if an error occurs we must
450 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
452 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
453 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 /* initialize the WDA-WDI synchronization event */
455 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* call WDI start */
457 wdiStatus = WDI_Start(&wdiStartParam,
458 (WDI_StartRspCb)WDA_wdiStartCallback,
459 (v_VOID_t *)pVosContext);
460 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
461 {
462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700463 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 vos_mem_free(wdiStartParam.pConfigBuffer);
465 return VOS_STATUS_E_FAILURE;
466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 /* wait for WDI start to invoke our callback */
468 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
469 WDA_WDI_START_TIMEOUT );
470 if ( !VOS_IS_STATUS_SUCCESS(status) )
471 {
472 if ( VOS_STATUS_E_TIMEOUT == status )
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700475 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 }
477 else
478 {
479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
480 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700481 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 }
483 vos_mem_free(wdiStartParam.pConfigBuffer);
484 return VOS_STATUS_E_FAILURE;
485 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700487 /* we no longer need the config TLV */
488 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 /* if we are not in the START state then WDI_Start() failed */
490 if (WDA_START_STATE != wdaContext->wdaState)
491 {
492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700493 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 return VOS_STATUS_E_FAILURE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 /* FTM mode does not need to monitor BA activity */
497 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
498 {
499 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800500 if(VOS_STATUS_SUCCESS == status)
501 {
502 wdaContext->wdaTimersCreated = VOS_TRUE;
503 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700505 return status;
506}
507
Jeff Johnson295189b2012-06-20 16:38:30 -0700508/*
509 * FUNCTION: WDA_prepareConfigTLV
510 * Function to prepare CFG for DAL(WDA)
511 */
512VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
513 WDI_StartReqParamsType *wdiStartParams )
514{
515 /* get pMac to acess CFG data base */
516 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
517 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
518 tHalCfg *tlvStruct = NULL ;
519 tANI_U8 *tlvStructStart = NULL ;
520 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
521 v_PVOID_t *configParam;
522 tANI_U32 configParamSize;
523 tANI_U32 *configDataValue;
524 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 if ((NULL == pMac)||(NULL == wdaContext))
526 {
527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700528 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700529 VOS_ASSERT(0);
530 return VOS_STATUS_E_FAILURE;
531 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
533 WNI_CFG_STA_ID_LEN +
534 WNI_CFG_EDCA_WME_ACBK_LEN +
535 WNI_CFG_EDCA_WME_ACBE_LEN +
536 WNI_CFG_EDCA_WME_ACVI_LEN +
537 WNI_CFG_EDCA_WME_ACVO_LEN +
538 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700539 /* malloc memory for all configs in one shot */
540 configParam = vos_mem_malloc(configParamSize);
541
542 if(NULL == configParam )
543 {
544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700545 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 VOS_ASSERT(0) ;
547 return VOS_STATUS_E_NOMEM;
548 }
549 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700550 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 tlvStruct = (tHalCfg *)configParam;
552 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700553 /* TODO: Remove Later */
554 /* QWLAN_HAL_CFG_STA_ID */
555 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
556 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
557 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
558 eSIR_SUCCESS)
559 {
560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
561 "Failed to get value for WNI_CFG_STA_ID");
562 goto handle_failure;
563 }
564 tlvStruct->length = strLength ;
565 /* calculate the pad bytes to have the CFG in aligned format */
566 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
567 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700568 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
569 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700570 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
571 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
572 tlvStruct->length = sizeof(tANI_U32);
573 configDataValue = (tANI_U32 *)(tlvStruct + 1);
574 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
575 != eSIR_SUCCESS)
576 {
577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
578 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
579 goto handle_failure;
580 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
582 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
584 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
585 tlvStruct->length = sizeof(tANI_U32);
586 configDataValue = (tANI_U32 *)(tlvStruct + 1);
587 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
588 eSIR_SUCCESS)
589 {
590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
591 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
592 goto handle_failure;
593 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
595 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700596 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
597 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
598 tlvStruct->length = sizeof(tANI_U32);
599 configDataValue = (tANI_U32 *)(tlvStruct + 1);
600 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
601 != eSIR_SUCCESS)
602 {
603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
604 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
605 goto handle_failure;
606 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700607 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
608 + sizeof(tHalCfg) + tlvStruct->length)) ;
609
610 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
611 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
612 tlvStruct->length = sizeof(tANI_U32);
613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
614 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
615 configDataValue ) != eSIR_SUCCESS)
616 {
617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
618 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
619 goto handle_failure;
620 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700621 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
622 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700623 /* QWLAN_HAL_CFG_CAL_PERIOD */
624 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
625 tlvStruct->length = sizeof(tANI_U32);
626 configDataValue = (tANI_U32 *)(tlvStruct + 1);
627 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
628 != eSIR_SUCCESS)
629 {
630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
631 "Failed to get value for WNI_CFG_CAL_PERIOD");
632 goto handle_failure;
633 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700634 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
635 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 /* QWLAN_HAL_CFG_CAL_CONTROL */
637 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
638 tlvStruct->length = sizeof(tANI_U32);
639 configDataValue = (tANI_U32 *)(tlvStruct + 1);
640 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
641 != eSIR_SUCCESS)
642 {
643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
644 "Failed to get value for WNI_CFG_CAL_CONTROL");
645 goto handle_failure;
646 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
648 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 /* QWLAN_HAL_CFG_PROXIMITY */
650 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
651 tlvStruct->length = sizeof(tANI_U32);
652 configDataValue = (tANI_U32 *)(tlvStruct + 1);
653 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
654 != eSIR_SUCCESS)
655 {
656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
657 "Failed to get value for WNI_CFG_PROXIMITY");
658 goto handle_failure;
659 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
661 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
663 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
664 tlvStruct->length = sizeof(tANI_U32);
665 configDataValue = (tANI_U32 *)(tlvStruct + 1);
666 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
667 != eSIR_SUCCESS)
668 {
669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
670 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
671 goto handle_failure;
672 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
674 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
676 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
677 tlvStruct->length = sizeof(tANI_U32);
678 configDataValue = (tANI_U32 *)(tlvStruct + 1);
679 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
680 eSIR_SUCCESS)
681 {
682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
683 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
684 goto handle_failure;
685 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700686 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
687 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700688 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
689 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
690 tlvStruct->length = sizeof(tANI_U32);
691 configDataValue = (tANI_U32 *)(tlvStruct + 1);
692 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
693 configDataValue ) != eSIR_SUCCESS)
694 {
695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
696 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
697 goto handle_failure;
698 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700699 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
700 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700701 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
702 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
703 tlvStruct->length = sizeof(tANI_U32);
704 configDataValue = (tANI_U32 *)(tlvStruct + 1);
705 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
706 eSIR_SUCCESS)
707 {
708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
709 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
710 goto handle_failure;
711 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
713 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700714 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
715 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
716 tlvStruct->length = sizeof(tANI_U32);
717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
718 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
719 eSIR_SUCCESS)
720 {
721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
722 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
723 goto handle_failure;
724 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
726 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
728 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
729 tlvStruct->length = sizeof(tANI_U32);
730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
731 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
732 eSIR_SUCCESS)
733 {
734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
735 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
736 goto handle_failure;
737 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
739 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
741 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
742 tlvStruct->length = sizeof(tANI_U32);
743 configDataValue = (tANI_U32 *)(tlvStruct + 1);
744 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
745 configDataValue ) != eSIR_SUCCESS)
746 {
747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
748 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
749 goto handle_failure;
750 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700751 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
752 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700753 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
754 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
755 tlvStruct->length = sizeof(tANI_U32);
756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
757 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
758 configDataValue ) != eSIR_SUCCESS)
759 {
760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
761 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
762 goto handle_failure;
763 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700764 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
765 + sizeof(tHalCfg) + tlvStruct->length));
766
767 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
768 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
769 tlvStruct->length = sizeof(tANI_U32);
770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
771 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
772 configDataValue ) != eSIR_SUCCESS)
773 {
774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
775 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
776 goto handle_failure;
777 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
779 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700780 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
781 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
782 tlvStruct->length = sizeof(tANI_U32);
783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
784 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
785 configDataValue ) != eSIR_SUCCESS)
786 {
787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
788 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
789 goto handle_failure;
790 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700791 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
792 + sizeof(tHalCfg) + tlvStruct->length));
793
794 /* QWLAN_HAL_CFG_FIXED_RATE */
795 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
796 tlvStruct->length = sizeof(tANI_U32);
797 configDataValue = (tANI_U32 *)(tlvStruct + 1);
798 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
799 != eSIR_SUCCESS)
800 {
801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
802 "Failed to get value for WNI_CFG_FIXED_RATE");
803 goto handle_failure;
804 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700805 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
806 + sizeof(tHalCfg) + tlvStruct->length));
807
808 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
809 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
810 tlvStruct->length = sizeof(tANI_U32);
811 configDataValue = (tANI_U32 *)(tlvStruct + 1);
812 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
813 != eSIR_SUCCESS)
814 {
815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
816 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
817 goto handle_failure;
818 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700819 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
820 + sizeof(tHalCfg) + tlvStruct->length));
821
822 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
823 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
824 tlvStruct->length = sizeof(tANI_U32);
825 configDataValue = (tANI_U32 *)(tlvStruct + 1);
826 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
827 configDataValue ) != eSIR_SUCCESS)
828 {
829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
830 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
831 goto handle_failure;
832 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700835 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
836 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
837 tlvStruct->length = sizeof(tANI_U32);
838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
839 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
840 configDataValue ) != eSIR_SUCCESS)
841 {
842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
843 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
844 goto handle_failure;
845 }
846 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
847 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700848 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
849 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
850 tlvStruct->length = sizeof(tANI_U32);
851 configDataValue = (tANI_U32 *)(tlvStruct + 1);
852 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
853 configDataValue ) != eSIR_SUCCESS)
854 {
855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
856 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
857 goto handle_failure;
858 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
860 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700861 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
862 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
863 tlvStruct->length = sizeof(tANI_U32);
864 configDataValue = (tANI_U32 *)(tlvStruct + 1);
865 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
866 configDataValue ) != eSIR_SUCCESS)
867 {
868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
869 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
870 goto handle_failure;
871 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
873 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700874 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
875 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
876 tlvStruct->length = sizeof(tANI_U32);
877 configDataValue = (tANI_U32 *)(tlvStruct + 1);
878 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
879 configDataValue ) != eSIR_SUCCESS)
880 {
881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
882 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
883 goto handle_failure;
884 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700885 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
886 + sizeof(tHalCfg) + tlvStruct->length);
887
888#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
889 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
890 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
891 tlvStruct->length = sizeof(tANI_U32);
892 configDataValue = (tANI_U32 *)(tlvStruct + 1);
893 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
894 configDataValue ) != eSIR_SUCCESS)
895 {
896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
897 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
898 goto handle_failure;
899 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700900 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
901 + sizeof(tHalCfg) + tlvStruct->length);
902#endif
903 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
904 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
905 tlvStruct->length = sizeof(tANI_U32);
906 configDataValue = (tANI_U32 *)(tlvStruct + 1);
907 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
908 configDataValue ) != eSIR_SUCCESS)
909 {
910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
911 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
912 goto handle_failure;
913 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700914 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
915 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700916 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
917 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
918 tlvStruct->length = sizeof(tANI_U32);
919 configDataValue = (tANI_U32 *)(tlvStruct + 1);
920 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
921 eSIR_SUCCESS)
922 {
923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
924 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
925 goto handle_failure;
926 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700927 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
928 + sizeof(tHalCfg) + tlvStruct->length);
929
930 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
931 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
932 tlvStruct->length = sizeof(tANI_U32);
933 configDataValue = (tANI_U32 *)(tlvStruct + 1);
934 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
935 configDataValue ) != eSIR_SUCCESS)
936 {
937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
938 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
939 goto handle_failure;
940 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700941 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
942 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700943 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
944 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
945 tlvStruct->length = sizeof(tANI_U32);
946 configDataValue = (tANI_U32 *)(tlvStruct + 1);
947 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
948 configDataValue ) != eSIR_SUCCESS)
949 {
950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
951 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
952 goto handle_failure;
953 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700954 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
955 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700956 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
957 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
958 tlvStruct->length = sizeof(tANI_U32);
959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
960 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
961 configDataValue ) != eSIR_SUCCESS)
962 {
963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
964 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
965 goto handle_failure;
966 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
968 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700969 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
970 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
971 tlvStruct->length = sizeof(tANI_U32);
972 configDataValue = (tANI_U32 *)(tlvStruct + 1);
973 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
974 configDataValue ) != eSIR_SUCCESS)
975 {
976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
977 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
978 goto handle_failure;
979 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700980 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
981 + sizeof(tHalCfg) + tlvStruct->length);
982
983 /* QWLAN_HAL_CFG_STATS_PERIOD */
984 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
985 tlvStruct->length = sizeof(tANI_U32);
986 configDataValue = (tANI_U32 *)(tlvStruct + 1);
987 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
988 eSIR_SUCCESS)
989 {
990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
991 "Failed to get value for WNI_CFG_STATS_PERIOD");
992 goto handle_failure;
993 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700994 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
995 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700996 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
997 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
998 tlvStruct->length = sizeof(tANI_U32);
999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1000 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1001 eSIR_SUCCESS)
1002 {
1003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1004 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1005 goto handle_failure;
1006 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001007 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1008 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001009 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1010 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1011 tlvStruct->length = sizeof(tANI_U32);
1012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1013 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1014 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1016 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001017 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1018 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1019 tlvStruct->length = sizeof(tANI_U32);
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1022 != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1026 goto handle_failure;
1027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1031 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1032 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1035 &strLength) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1039 goto handle_failure;
1040 }
1041 tlvStruct->length = strLength;
1042 /* calculate the pad bytes to have the CFG in aligned format */
1043 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1044 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1046 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001047 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1048 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1049 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1051 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1052 &strLength) != eSIR_SUCCESS)
1053 {
1054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1055 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1056 goto handle_failure;
1057 }
1058 tlvStruct->length = strLength;
1059 /* calculate the pad bytes to have the CFG in aligned format */
1060 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1061 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001062 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1063 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001064 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1065 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1066 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1067 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1068 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1069 &strLength) != eSIR_SUCCESS)
1070 {
1071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1072 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1073 goto handle_failure;
1074 }
1075 tlvStruct->length = strLength;
1076 /* calculate the pad bytes to have the CFG in aligned format */
1077 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1078 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001079 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1080 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001081 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1082 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1083 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1084 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1085 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1086 &strLength) != eSIR_SUCCESS)
1087 {
1088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1089 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1090 goto handle_failure;
1091 }
1092 tlvStruct->length = strLength;
1093 /* calculate the pad bytes to have the CFG in aligned format */
1094 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1095 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1097 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001098 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1099 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1100 tlvStruct->length = sizeof(tANI_U32);
1101 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1102 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1103 != eSIR_SUCCESS)
1104 {
1105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1106 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1107 goto handle_failure;
1108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1110 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1112 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1113 tlvStruct->length = sizeof(tANI_U32);
1114 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1115 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1116 != eSIR_SUCCESS)
1117 {
1118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1119 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1120 goto handle_failure;
1121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001122 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1123 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001124 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1125 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1126 tlvStruct->length = sizeof(tANI_U32);
1127 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1128 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1129 != eSIR_SUCCESS)
1130 {
1131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1132 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1133 goto handle_failure;
1134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001135 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1136 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001137 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1138 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1139 tlvStruct->length = sizeof(tANI_U32);
1140 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1141 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1142 != eSIR_SUCCESS)
1143 {
1144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1145 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1146 goto handle_failure;
1147 }
1148 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1149 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001150 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1151 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1152 tlvStruct->length = sizeof(tANI_U32);
1153 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1154 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1155 != eSIR_SUCCESS)
1156 {
1157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1158 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1159 goto handle_failure;
1160 }
1161 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1162 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1164 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1165 tlvStruct->length = sizeof(tANI_U32);
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1168 != eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1172 goto handle_failure;
1173 }
1174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1175 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1177 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1181 != eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1185 goto handle_failure;
1186 }
1187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1190 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1194 != eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1198 goto handle_failure;
1199 }
1200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1203 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1211 goto handle_failure;
1212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1216 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1217 tlvStruct->length = sizeof(tANI_U32);
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1220 != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1224 goto handle_failure;
1225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1227 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001228 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1229 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1230 tlvStruct->length = sizeof(tANI_U32);
1231 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1232 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1233 != eSIR_SUCCESS)
1234 {
1235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1236 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1237 goto handle_failure;
1238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1240 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001241 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1242 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1243 * into FW, so the parameters are added here.
1244 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1246 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1247 tlvStruct->length = sizeof(tANI_U32);
1248 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1249 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1250 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1251 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1253 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1254 tlvStruct->length = sizeof(tANI_U32);
1255 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1256 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1260 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1261 tlvStruct->length = sizeof(tANI_U32);
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1264 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1265 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001266 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1267 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1268 tlvStruct->length = sizeof(tANI_U32);
1269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1270 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1271 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1272 + sizeof(tHalCfg) + tlvStruct->length) ;
1273
1274 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1275 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1276 tlvStruct->length = sizeof(tANI_U32);
1277 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1278 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1279 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1280 + sizeof(tHalCfg) + tlvStruct->length) ;
1281
1282 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1283 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1284 tlvStruct->length = sizeof(tANI_U32);
1285 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1286 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1287 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1288 + sizeof(tHalCfg) + tlvStruct->length) ;
1289
1290 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1291 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1292 tlvStruct->length = sizeof(tANI_U32);
1293 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1294 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1295 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1296 + sizeof(tHalCfg) + tlvStruct->length) ;
1297
1298 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1299 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1300 tlvStruct->length = sizeof(tANI_U32);
1301 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1302 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1303 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1304 + sizeof(tHalCfg) + tlvStruct->length) ;
1305
1306 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1307 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1308 tlvStruct->length = sizeof(tANI_U32);
1309 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1310 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1311 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1312 + sizeof(tHalCfg) + tlvStruct->length) ;
1313
1314 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1315 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1316 tlvStruct->length = sizeof(tANI_U32);
1317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1318 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1319 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1320 + sizeof(tHalCfg) + tlvStruct->length) ;
1321
1322 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1323 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1324 tlvStruct->length = sizeof(tANI_U32);
1325 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1326 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1327 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1328 + sizeof(tHalCfg) + tlvStruct->length) ;
1329
1330 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1331 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1335 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1336 + sizeof(tHalCfg) + tlvStruct->length) ;
1337
1338 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1339 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1340 tlvStruct->length = sizeof(tANI_U32);
1341 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1342 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1343 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1344 + sizeof(tHalCfg) + tlvStruct->length) ;
1345
1346 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1347 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1348 tlvStruct->length = sizeof(tANI_U32);
1349 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1350 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1351 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1352 + sizeof(tHalCfg) + tlvStruct->length) ;
1353
1354 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1355 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1356 tlvStruct->length = sizeof(tANI_U32);
1357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1358 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1359 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1360 + sizeof(tHalCfg) + tlvStruct->length) ;
1361
1362 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1363 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1364 tlvStruct->length = sizeof(tANI_U32);
1365 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1366 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1368 + sizeof(tHalCfg) + tlvStruct->length) ;
1369
1370 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001371 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1372 tlvStruct->length = sizeof(tANI_U32);
1373 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1374 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1375 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1376 wcnssCompiledApiVersion.minor,
1377 wcnssCompiledApiVersion.version,
1378 wcnssCompiledApiVersion.revision);
1379 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1380 + sizeof(tHalCfg) + tlvStruct->length) ;
1381
Jeff Johnsond13512a2012-07-17 11:42:19 -07001382 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1383 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1384 tlvStruct->length = sizeof(tANI_U32);
1385 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1386 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1387 configDataValue ) != eSIR_SUCCESS)
1388 {
1389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1390 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1391 goto handle_failure;
1392 }
1393
1394 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1395 + sizeof(tHalCfg) + tlvStruct->length) ;
1396 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1397 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1398 tlvStruct->length = sizeof(tANI_U32);
1399 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1400 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1401 configDataValue ) != eSIR_SUCCESS)
1402 {
1403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1404 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1405 goto handle_failure;
1406 }
1407
1408 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1409 + sizeof(tHalCfg) + tlvStruct->length) ;
1410
1411 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1412 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1413 tlvStruct->length = sizeof(tANI_U32);
1414 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1415 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1416 != eSIR_SUCCESS)
1417 {
1418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1419 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1420 goto handle_failure;
1421 }
1422
1423 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1424 + sizeof(tHalCfg) + tlvStruct->length) ;
1425
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001426 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1427 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1428 tlvStruct->length = sizeof(tANI_U32);
1429 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1430 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1431 != eSIR_SUCCESS)
1432 {
1433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1434 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1435 goto handle_failure;
1436 }
1437
1438 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1439 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001440#ifdef WLAN_SOFTAP_VSTA_FEATURE
1441 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1442 tlvStruct->length = sizeof(tANI_U32);
1443 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1444 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1445 != eSIR_SUCCESS)
1446 {
1447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1448 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1449 goto handle_failure;
1450 }
1451
1452 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1453 + sizeof(tHalCfg) + tlvStruct->length) ;
1454#endif
1455
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001456 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1457 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1458 tlvStruct->length = sizeof(tANI_U32);
1459 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1460
1461 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1462 != eSIR_SUCCESS)
1463 {
1464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1465 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1466 goto handle_failure;
1467 }
1468
1469 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1470 + sizeof(tHalCfg) + tlvStruct->length) ;
1471
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301472/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1473 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1474 tlvStruct->length = sizeof(tANI_U32);
1475 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1476 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1477 configDataValue ) != eSIR_SUCCESS)
1478 {
1479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1480 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1481 goto handle_failure;
1482 }
1483
1484 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1485 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301486#ifdef FEATURE_WLAN_TDLS
1487 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1488 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1489 tlvStruct->length = sizeof(tANI_U32);
1490 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1491 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1492 configDataValue ) != eSIR_SUCCESS)
1493 {
1494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1495 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1496 goto handle_failure;
1497 }
1498 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1499 + sizeof(tHalCfg) + tlvStruct->length) ;
1500
1501 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1502 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1503 tlvStruct->length = sizeof(tANI_U32);
1504 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1505 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1506 configDataValue ) != eSIR_SUCCESS)
1507 {
1508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1509 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1510 goto handle_failure;
1511 }
1512 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1513 + sizeof(tHalCfg) + tlvStruct->length) ;
1514 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1515 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1516 tlvStruct->length = sizeof(tANI_U32);
1517 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1518 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1519 configDataValue ) != eSIR_SUCCESS)
1520 {
1521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1522 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1523 goto handle_failure;
1524 }
1525 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1526 + sizeof(tHalCfg) + tlvStruct->length) ;
1527 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1528 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1529 tlvStruct->length = sizeof(tANI_U32);
1530 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1531 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1532 configDataValue ) != eSIR_SUCCESS)
1533 {
1534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1535 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1536 goto handle_failure;
1537 }
1538 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1539 + sizeof(tHalCfg) + tlvStruct->length) ;
1540#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301541
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001542 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1543 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1544 tlvStruct->length = sizeof(tANI_U32);
1545 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1546 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1547 configDataValue ) != eSIR_SUCCESS)
1548 {
1549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1550 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1551 goto handle_failure;
1552 }
1553
1554 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1555 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001556
1557 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1558 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1559 tlvStruct->length = sizeof(tANI_U32);
1560 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1561 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1562 != eSIR_SUCCESS)
1563 {
1564 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1565 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1566 goto handle_failure;
1567 }
1568 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1569 + sizeof(tHalCfg) + tlvStruct->length));
1570
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301571 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1572 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1573 tlvStruct->length = sizeof(tANI_U32);
1574 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1575 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1576 configDataValue ) != eSIR_SUCCESS)
1577 {
1578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1579 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1580 goto handle_failure;
1581 }
1582
1583 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1584 + sizeof(tHalCfg) + tlvStruct->length) ;
1585
Jeff Johnson295189b2012-06-20 16:38:30 -07001586 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001587#ifdef WLAN_DEBUG
1588 {
1589 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1591 "****** Dumping CFG TLV ***** ");
1592 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1593 {
1594 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1595 "%02x %02x %02x %02x %02x %02x %02x %02x",
1596 tlvStructStart[i],
1597 tlvStructStart[i+1],
1598 tlvStructStart[i+2],
1599 tlvStructStart[i+3],
1600 tlvStructStart[i+4],
1601 tlvStructStart[i+5],
1602 tlvStructStart[i+6],
1603 tlvStructStart[i+7]);
1604 }
1605 /* Dump the bytes in the last line*/
1606 for (; i < wdiStartParams->usConfigBufferLen; i++)
1607 {
1608 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1609 "%02x ",tlvStructStart[i]);
1610 }
1611 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1612 "**************************** ");
1613 }
1614#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001615 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001616handle_failure:
1617 vos_mem_free(configParam);
1618 return VOS_STATUS_E_FAILURE;
1619}
Jeff Johnson295189b2012-06-20 16:38:30 -07001620/*
1621 * FUNCTION: WDA_wdiCompleteCB
1622 * call the voss call back function
1623 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001624void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001625{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001626 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1627 tWDA_CbContext *wdaContext;
1628
1629 if(NULL == pWdaParams)
1630 {
1631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001632 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001633 VOS_ASSERT(0) ;
1634 return ;
1635 }
1636
1637 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1638
Jeff Johnson295189b2012-06-20 16:38:30 -07001639 if (NULL == wdaContext)
1640 {
1641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001642 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001643 return ;
1644 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001645
Jeff Johnson295189b2012-06-20 16:38:30 -07001646 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001647 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001648 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001650 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001651 vos_mem_free(pWdaParams);
1652
Jeff Johnson295189b2012-06-20 16:38:30 -07001653 if(WDI_STATUS_SUCCESS != status)
1654 {
1655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1656 "WDI stop callback returned failure" );
1657 VOS_ASSERT(0) ;
1658 }
1659 else
1660 {
1661 wdaContext->wdaState = WDA_STOP_STATE;
1662 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001663
Jeff Johnson295189b2012-06-20 16:38:30 -07001664 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001665 vos_WDAComplete_cback(wdaContext->pVosContext);
1666
Jeff Johnson295189b2012-06-20 16:38:30 -07001667 return ;
1668}
Jeff Johnson295189b2012-06-20 16:38:30 -07001669/*
1670 * FUNCTION: WDA_stop
1671 * call WDI_stop
1672 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001673VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1674{
1675 WDI_Status wdiStatus;
1676 VOS_STATUS status = VOS_STATUS_SUCCESS;
1677 WDI_StopReqParamsType *wdiStopReq;
1678 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001679 tWDA_ReqParams *pWdaParams ;
1680
Jeff Johnson295189b2012-06-20 16:38:30 -07001681 if (NULL == pWDA)
1682 {
1683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001684 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001685 VOS_ASSERT(0);
1686 return VOS_STATUS_E_FAILURE;
1687 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001688 if (pWDA->wdiFailed == true)
1689 {
1690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001691 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001692 return VOS_STATUS_E_ALREADY;
1693 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001694
Jeff Johnson295189b2012-06-20 16:38:30 -07001695 /* FTM mode stay START_STATE */
1696 if( (WDA_READY_STATE != pWDA->wdaState) &&
1697 (WDA_INIT_STATE != pWDA->wdaState) &&
1698 (WDA_START_STATE != pWDA->wdaState) )
1699 {
1700 VOS_ASSERT(0);
1701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001702 wdiStopReq = (WDI_StopReqParamsType *)
1703 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1704 if(NULL == wdiStopReq)
1705 {
1706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001708 VOS_ASSERT(0);
1709 return VOS_STATUS_E_NOMEM;
1710 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001711
Jeff Johnson295189b2012-06-20 16:38:30 -07001712 wdiStopReq->wdiStopReason = reason;
1713 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001714
1715 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1716 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001719 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001720 VOS_ASSERT(0);
1721 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001722 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001723 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001724
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001725 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1726 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001727 {
1728 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001729 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001730 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001731
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001732 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1733 pWdaParams->wdaMsgParam = NULL;
1734 pWdaParams->pWdaContext = pWDA;
1735
Jeff Johnson295189b2012-06-20 16:38:30 -07001736 /* call WDI stop */
1737 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001738 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1739
Jeff Johnson295189b2012-06-20 16:38:30 -07001740 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1741 {
1742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1743 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1745 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001746 status = VOS_STATUS_E_FAILURE;
1747 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001748 return status;
1749}
Jeff Johnson295189b2012-06-20 16:38:30 -07001750/*
1751 * FUNCTION: WDA_close
1752 * call WDI_close and free the WDA context
1753 */
1754VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1755{
Jeff Johnson43971f52012-07-17 12:26:56 -07001756 VOS_STATUS status = VOS_STATUS_SUCCESS;
1757 WDI_Status wstatus;
1758 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001759 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001760 if (NULL == wdaContext)
1761 {
1762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001763 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001764 return VOS_STATUS_E_FAILURE;
1765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1767 (WDA_STOP_STATE != wdaContext->wdaState))
1768 {
1769 VOS_ASSERT(0);
1770 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001771 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001772 wstatus = WDI_Close();
1773 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001774 {
1775 status = VOS_STATUS_E_FAILURE;
1776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001777 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001778 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001779 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1780 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001781 {
1782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1783 "WDI Sync Event destroy failed - status = %d\n", status);
1784 status = VOS_STATUS_E_FAILURE;
1785 }
1786
Jeff Johnson43971f52012-07-17 12:26:56 -07001787 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001788 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001789 {
1790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1791 "VOS Event destroy failed - status = %d\n", status);
1792 status = VOS_STATUS_E_FAILURE;
1793 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001794 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001795 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001796 {
1797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1798 "VOS Event destroy failed - status = %d\n", status);
1799 status = VOS_STATUS_E_FAILURE;
1800 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001801 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001802 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001803 {
1804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1805 "VOS Event destroy failed - status = %d\n", status);
1806 status = VOS_STATUS_E_FAILURE;
1807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001808 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001809 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001810 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001811 {
1812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1813 "error in WDA close " );
1814 status = VOS_STATUS_E_FAILURE;
1815 }
1816 return status;
1817}
Jeff Johnson295189b2012-06-20 16:38:30 -07001818/*
1819 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1820 * returns 1 if the compiled version is greater than or equal to the input version
1821 */
1822
1823uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1824{
1825 VOS_STATUS status = VOS_STATUS_SUCCESS;
1826 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1827 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001828 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001829 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1830 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1831 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1832 (compiledVersion.revision >= revision)))
1833 return 1;
1834 else
1835 return 0;
1836}
Jeff Johnson295189b2012-06-20 16:38:30 -07001837/*
1838 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1839 * returns 1 if the compiled version is greater than or equal to the input version
1840 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001841uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1842{
1843 VOS_STATUS status = VOS_STATUS_SUCCESS;
1844 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1845 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001846 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001847 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1848 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1849 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1850 (reportedVersion.revision >= revision)))
1851 return 1;
1852 else
1853 return 0;
1854}
Jeff Johnson295189b2012-06-20 16:38:30 -07001855/*
1856 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1857 * Returns the version of the WCNSS WLAN API with which the HOST
1858 * device driver was compiled
1859 */
1860VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1861 tSirVersionType *pVersion)
1862{
1863 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001865 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001866 if ((NULL == pvosGCtx) || (NULL == pVersion))
1867 {
1868 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001869 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001870 VOS_ASSERT(0);
1871 return VOS_STATUS_E_FAILURE;
1872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1874 if (NULL == pWDA )
1875 {
1876 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001877 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001878 VOS_ASSERT(0);
1879 return VOS_STATUS_E_FAILURE;
1880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001881 *pVersion = pWDA->wcnssWlanCompiledVersion;
1882 return VOS_STATUS_SUCCESS;
1883}
Jeff Johnson295189b2012-06-20 16:38:30 -07001884/*
1885 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1886 * Returns the version of the WCNSS WLAN API with which the WCNSS
1887 * device driver was compiled
1888 */
1889VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1890 tSirVersionType *pVersion)
1891{
1892 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001893 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001894 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001895 if ((NULL == pvosGCtx) || (NULL == pVersion))
1896 {
1897 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001898 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001899 VOS_ASSERT(0);
1900 return VOS_STATUS_E_FAILURE;
1901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001902 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1903 if (NULL == pWDA )
1904 {
1905 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001906 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001907 VOS_ASSERT(0);
1908 return VOS_STATUS_E_FAILURE;
1909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001910 *pVersion = pWDA->wcnssWlanReportedVersion;
1911 return VOS_STATUS_SUCCESS;
1912}
Jeff Johnson295189b2012-06-20 16:38:30 -07001913/*
1914 * FUNCTION: WDA_GetWcnssSoftwareVersion
1915 * Returns the WCNSS Software version string
1916 */
1917VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1918 tANI_U8 *pVersion,
1919 tANI_U32 versionBufferSize)
1920{
1921 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001922 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001923 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001924 if ((NULL == pvosGCtx) || (NULL == pVersion))
1925 {
1926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001927 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001928 VOS_ASSERT(0);
1929 return VOS_STATUS_E_FAILURE;
1930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001931 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1932 if (NULL == pWDA )
1933 {
1934 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001935 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001936 VOS_ASSERT(0);
1937 return VOS_STATUS_E_FAILURE;
1938 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001939 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1940 return VOS_STATUS_SUCCESS;
1941}
Jeff Johnson295189b2012-06-20 16:38:30 -07001942/*
1943 * FUNCTION: WDA_GetWcnssHardwareVersion
1944 * Returns the WCNSS Hardware version string
1945 */
1946VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1947 tANI_U8 *pVersion,
1948 tANI_U32 versionBufferSize)
1949{
1950 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001952 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001953 if ((NULL == pvosGCtx) || (NULL == pVersion))
1954 {
1955 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001956 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001957 VOS_ASSERT(0);
1958 return VOS_STATUS_E_FAILURE;
1959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001960 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1961 if (NULL == pWDA )
1962 {
1963 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001964 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001965 VOS_ASSERT(0);
1966 return VOS_STATUS_E_FAILURE;
1967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001968 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1969 return VOS_STATUS_SUCCESS;
1970}
Jeff Johnson295189b2012-06-20 16:38:30 -07001971/*
1972 * FUNCTION: WDA_WniCfgDnld
1973 * Trigger CFG Download
1974 */
1975VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1976{
1977 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001978 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001979 v_VOID_t *pFileImage = NULL;
1980 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001981 v_VOID_t *pCfgBinary = NULL;
1982 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001983 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07001984
Jeff Johnson295189b2012-06-20 16:38:30 -07001985 if (NULL == pMac )
1986 {
1987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001988 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001989 VOS_ASSERT(0);
1990 return VOS_STATUS_E_FAILURE;
1991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001992 /* get the number of bytes in the CFG Binary... */
1993 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1994 &cbFileImageSize );
1995 if ( VOS_STATUS_E_NOMEM != vosStatus )
1996 {
1997 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1998 "Error obtaining binary size" );
1999 goto fail;
2000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002001 // malloc a buffer to read in the Configuration binary file.
2002 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002003 if ( NULL == pFileImage )
2004 {
2005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2006 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2007 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002008 vosStatus = VOS_STATUS_E_NOMEM;
2009 goto fail;
2010 }
2011
2012 /* Get the entire CFG file image... */
2013 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2014 &cbFileImageSize );
2015 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2018 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2019 cbFileImageSize );
2020 goto fail;
2021 }
2022
2023 /*
2024 * Validate the binary image. This function will return a pointer
2025 * and length where the CFG binary is located within the binary image file.
2026 */
2027 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2028 &pCfgBinary, &cbCfgBinarySize );
2029 if ( VOS_FALSE == bStatus )
2030 {
2031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2032 "Error: Cannot find STA CFG in binary image file" );
2033 vosStatus = VOS_STATUS_E_FAILURE;
2034 goto fail;
2035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002036 /*
2037 * TODO: call the config download function
2038 * for now calling the existing cfg download API
2039 */
2040 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002041 vosStatus = VOS_STATUS_SUCCESS;
2042
2043 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002044
2045fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002046 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002047 return vosStatus;
2048}
Jeff Johnson295189b2012-06-20 16:38:30 -07002049/* -----------------------------------------------------------------
2050 * WDI interface
2051 * -----------------------------------------------------------------
2052 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002053/*
2054 * FUNCTION: WDA_suspendDataTxCallback
2055 * call back function called from TL after suspend Transmission
2056 */
2057VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2058 v_U8_t* ucSTAId,
2059 VOS_STATUS vosStatus)
2060{
2061 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002063 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 if (NULL == pWDA )
2065 {
2066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002067 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002068 VOS_ASSERT(0);
2069 return VOS_STATUS_E_FAILURE;
2070 }
2071 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2072 {
2073 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2074 }
2075 else
2076 {
2077 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2078 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002079 /* Trigger the event to bring the WDA TL suspend function to come
2080 * out of wait*/
2081 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2082 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2083 {
2084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2085 "NEW VOS Event Set failed - status = %d \n", vosStatus);
2086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002087 /* If TL suspended had timedout before this callback was called, resume back
2088 * TL.*/
2089 if (pWDA->txSuspendTimedOut)
2090 {
2091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2092 "Late TLSuspendCallback, resuming TL back again\n");
2093 WDA_ResumeDataTx(pWDA);
2094 pWDA->txSuspendTimedOut = FALSE;
2095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 return VOS_STATUS_SUCCESS;
2097}
Jeff Johnson295189b2012-06-20 16:38:30 -07002098/*
2099 * FUNCTION: WDA_suspendDataTx
2100 * Update TL to suspend the data Transmission
2101 */
2102VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2103{
2104 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2105 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002106
2107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002108 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002109 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 if (pWDA->txSuspendTimedOut)
2111 {
2112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2113 "TL suspend timedout previously, CB not called yet\n");
2114 return status;
2115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002116 /* Reset the event to be not signalled */
2117 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2118 if(!VOS_IS_STATUS_SUCCESS(status))
2119 {
2120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2121 "VOS Event reset failed - status = %d\n",status);
2122 return VOS_STATUS_E_FAILURE;
2123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002124 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002125 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002126 WDA_SuspendDataTxCallback);
2127 if(status != VOS_STATUS_SUCCESS)
2128 {
2129 return status;
2130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 /* Wait for the event to be set by the TL, to get the response of
2132 * suspending the TX queues, this event should be set by the Callback
2133 * function called by TL*/
2134 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2135 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2136 if(!VOS_IS_STATUS_SUCCESS(status))
2137 {
2138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2139 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002140 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002141 /* Set this flag to true when TL suspend times out, so that when TL
2142 * suspend eventually happens and calls the callback, TL can be resumed
2143 * right away by looking at this flag when true.*/
2144 pWDA->txSuspendTimedOut = TRUE;
2145 }
2146 else
2147 {
2148 pWDA->txSuspendTimedOut = FALSE;
2149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002150 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2151 {
2152 status = VOS_STATUS_SUCCESS;
2153 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 return status;
2155}
Jeff Johnson295189b2012-06-20 16:38:30 -07002156/*
2157 * FUNCTION: WDA_resumeDataTx
2158 * Update TL to resume the data Transmission
2159 */
2160VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2161{
2162 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002163
2164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002165 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002166
2167 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 return status;
2169}
Jeff Johnson295189b2012-06-20 16:38:30 -07002170/*
2171 * FUNCTION: WDA_InitScanReqCallback
2172 * Trigger Init SCAN callback
2173 */
2174void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2175{
2176 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2177 tWDA_CbContext *pWDA;
2178 tInitScanParams *pWDA_ScanParam ;
2179 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002181 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 if(NULL == pWdaParams)
2183 {
2184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002185 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002186 VOS_ASSERT(0) ;
2187 return ;
2188 }
2189 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2190 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002191 if(NULL == pWDA_ScanParam)
2192 {
2193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002194 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002195 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2197 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002198 return ;
2199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002200 if(WDI_STATUS_SUCCESS != wdiStatus)
2201 {
2202 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 if(VOS_STATUS_SUCCESS != status)
2204 {
2205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002206 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002207 }
2208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002209 /* free WDI command buffer */
2210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002211 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002212
Jeff Johnson295189b2012-06-20 16:38:30 -07002213
2214 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002215 /* without converting the Status to Failure or Success Just
2216 pass the same status to lim */
2217 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 /* send SCAN RSP message back to PE */
2219 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 return ;
2221}
2222
2223/*
2224 * FUNCTION: WDA_ProcessInitScanReq
2225 * Trigger Init SCAN in DAL
2226 */
2227VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2228 tInitScanParams *initScanParams)
2229{
2230 WDI_Status status = WDI_STATUS_SUCCESS ;
2231 WDI_InitScanReqParamsType *wdiInitScanParam =
2232 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2233 sizeof(WDI_InitScanReqParamsType)) ;
2234 tWDA_ReqParams *pWdaParams;
2235 tANI_U8 i = 0;
2236
2237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002238 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 if(NULL == wdiInitScanParam)
2240 {
2241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002242 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002243 VOS_ASSERT(0);
2244 return VOS_STATUS_E_NOMEM;
2245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2247 if(NULL == pWdaParams)
2248 {
2249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002251 VOS_ASSERT(0);
2252 vos_mem_free(wdiInitScanParam);
2253 return VOS_STATUS_E_NOMEM;
2254 }
2255
2256 /* Copy init Scan params to WDI structure */
2257 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2258 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2259 sizeof(tSirMacAddr)) ;
2260 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2261 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2262 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002263 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2264 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2266 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002267 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2268 {
2269 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2270 initScanParams->scanEntry.bssIdx[i] ;
2271 }
2272
2273 /* if Frame length, copy macMgmtHdr or WDI structure */
2274 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2275 {
2276 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2277 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2278 }
2279 wdiInitScanParam->wdiReqStatusCB = NULL ;
2280
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 /* Store Init Req pointer, as this will be used for response */
2282 pWdaParams->pWdaContext = pWDA;
2283 pWdaParams->wdaMsgParam = initScanParams;
2284 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 /* first try to suspend TX */
2286 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002287 if(WDI_STATUS_SUCCESS != status)
2288 {
2289 goto handleWdiFailure;
2290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 /* call DAL API to pass init scan request to DAL */
2292 status = WDI_InitScanReq(wdiInitScanParam,
2293 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 if(IS_WDI_STATUS_FAILURE(status))
2295 {
2296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2297 "error in WDA Init Scan, Resume Tx " );
2298 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 VOS_ASSERT(0) ;
2300
2301 goto handleWdiFailure;
2302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002304handleWdiFailure:
2305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2306 "Failure in WDI Api, free all the memory " );
2307 /* free WDI command buffer */
2308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2309 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 /* send Failure to PE */
2311 initScanParams->status = eSIR_FAILURE ;
2312 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 return CONVERT_WDI2VOS_STATUS(status) ;
2314}
2315
Jeff Johnson295189b2012-06-20 16:38:30 -07002316/*
2317 * FUNCTION: WDA_StartScanReqCallback
2318 * send Start SCAN RSP back to PE
2319 */
2320void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2321 void* pUserData)
2322{
2323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2324 tWDA_CbContext *pWDA;
2325 tStartScanParams *pWDA_ScanParam;
2326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002327 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 if(NULL == pWdaParams)
2329 {
2330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002331 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 VOS_ASSERT(0) ;
2333 return ;
2334 }
2335 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2336 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002337 if(NULL == pWDA_ScanParam)
2338 {
2339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002340 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002342 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 return ;
2344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2346 {
2347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002348 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002349 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002350 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002351 return ;
2352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2354 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002355
Jeff Johnson295189b2012-06-20 16:38:30 -07002356
2357 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002358 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 /* send SCAN RSP message back to PE */
2360 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 return ;
2362}
2363
Jeff Johnson295189b2012-06-20 16:38:30 -07002364/*
2365 * FUNCTION: WDA_ProcessStartScanReq
2366 * Trigger start SCAN in WDI
2367 */
2368VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2369 tStartScanParams *startScanParams)
2370{
2371 WDI_Status status = WDI_STATUS_SUCCESS;
2372 WDI_StartScanReqParamsType *wdiStartScanParams =
2373 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2374 sizeof(WDI_StartScanReqParamsType)) ;
2375 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002377 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002378 if(NULL == wdiStartScanParams)
2379 {
2380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002382 VOS_ASSERT(0);
2383 return VOS_STATUS_E_NOMEM;
2384 }
2385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2386 if(NULL == pWdaParams)
2387 {
2388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 VOS_ASSERT(0);
2391 vos_mem_free(wdiStartScanParams);
2392 return VOS_STATUS_E_NOMEM;
2393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002394 /* Copy init Scan params to WDI structure */
2395 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2396 wdiStartScanParams->wdiReqStatusCB = NULL ;
2397
Jeff Johnson295189b2012-06-20 16:38:30 -07002398 /* Store Init Req pointer, as this will be used for response */
2399 /* store Params pass it to WDI */
2400 pWdaParams->pWdaContext = pWDA;
2401 pWdaParams->wdaMsgParam = startScanParams;
2402 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 /* call DAL API to pass init scan request to DAL */
2404 status = WDI_StartScanReq(wdiStartScanParams,
2405 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002406 /* failure returned by WDI API */
2407 if(IS_WDI_STATUS_FAILURE(status))
2408 {
2409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2410 "Failure in Start Scan WDI API, free all the memory "
2411 "It should be due to previous abort scan." );
2412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2413 vos_mem_free(pWdaParams) ;
2414 startScanParams->status = eSIR_FAILURE ;
2415 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 return CONVERT_WDI2VOS_STATUS(status) ;
2418}
Jeff Johnson295189b2012-06-20 16:38:30 -07002419/*
2420 * FUNCTION: WDA_EndScanReqCallback
2421 * END SCAN callback
2422 */
2423void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2424{
2425 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2426 tWDA_CbContext *pWDA;
2427 tEndScanParams *endScanParam;
2428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002429 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002430 if(NULL == pWdaParams)
2431 {
2432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002433 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 VOS_ASSERT(0) ;
2435 return ;
2436 }
2437 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2438 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 if(NULL == endScanParam)
2440 {
2441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002442 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2445 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 return ;
2447 }
2448
2449 /* Free WDI command buffer */
2450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2451 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002453 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 /* send response back to PE */
2455 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2456 return ;
2457}
2458
Jeff Johnson295189b2012-06-20 16:38:30 -07002459/*
2460 * FUNCTION: WDA_ProcessEndScanReq
2461 * Trigger END SCAN in WDI
2462 */
2463VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2464 tEndScanParams *endScanParams)
2465{
2466 WDI_Status status = WDI_STATUS_SUCCESS;
2467 WDI_EndScanReqParamsType *wdiEndScanParams =
2468 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2469 sizeof(WDI_EndScanReqParamsType)) ;
2470 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002472 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 if(NULL == wdiEndScanParams)
2474 {
2475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002476 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 VOS_ASSERT(0);
2478 return VOS_STATUS_E_NOMEM;
2479 }
2480 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2481 if(NULL == pWdaParams)
2482 {
2483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 VOS_ASSERT(0);
2486 vos_mem_free(wdiEndScanParams);
2487 return VOS_STATUS_E_NOMEM;
2488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 /* Copy init Scan params to WDI structure */
2490 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2491 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 /* Store Init Req pointer, as this will be used for response */
2493 /* store Params pass it to WDI */
2494 pWdaParams->pWdaContext = pWDA;
2495 pWdaParams->wdaMsgParam = endScanParams;
2496 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 /* call DAL API to pass init scan request to DAL */
2498 status = WDI_EndScanReq(wdiEndScanParams,
2499 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002500 if(IS_WDI_STATUS_FAILURE(status))
2501 {
2502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2503 "Failure in End Scan WDI API, free all the memory "
2504 "It should be due to previous abort scan." );
2505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2506 vos_mem_free(pWdaParams) ;
2507 endScanParams->status = eSIR_FAILURE ;
2508 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2509 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 return CONVERT_WDI2VOS_STATUS(status) ;
2511}
Jeff Johnson295189b2012-06-20 16:38:30 -07002512/*
2513 * FUNCTION: WDA_FinishScanReqCallback
2514 * Trigger Finish SCAN callback
2515 */
2516void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2517{
2518 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2519 tWDA_CbContext *pWDA;
2520 tFinishScanParams *finishScanParam;
2521 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002523 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 if(NULL == pWdaParams)
2525 {
2526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002527 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002528 VOS_ASSERT(0) ;
2529 return ;
2530 }
2531
2532 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2533 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 if(NULL == finishScanParam)
2535 {
2536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002537 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2540 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 return ;
2542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2544 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 /*
2546 * Now Resume TX, if we reached here means, TX is already suspended, we
2547 * have to resume it unconditionaly
2548 */
2549 status = WDA_ResumeDataTx(pWDA) ;
2550
2551 if(VOS_STATUS_SUCCESS != status)
2552 {
2553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002554 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002556 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2558 return ;
2559}
Jeff Johnson295189b2012-06-20 16:38:30 -07002560/*
2561 * FUNCTION: WDA_ProcessFinshScanReq
2562 * Trigger Finish SCAN in WDI
2563 */
2564VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2565 tFinishScanParams *finishScanParams)
2566{
2567 WDI_Status status = WDI_STATUS_SUCCESS;
2568 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2569 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2570 sizeof(WDI_FinishScanReqParamsType)) ;
2571 tWDA_ReqParams *pWdaParams ;
2572 tANI_U8 i = 0;
2573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002574 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 if(NULL == wdiFinishScanParams)
2576 {
2577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 VOS_ASSERT(0);
2580 return VOS_STATUS_E_NOMEM;
2581 }
2582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2583 if(NULL == pWdaParams)
2584 {
2585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 VOS_ASSERT(0);
2588 vos_mem_free(wdiFinishScanParams);
2589 return VOS_STATUS_E_NOMEM;
2590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002591 /* Copy init Scan params to WDI structure */
2592 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2593 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2594 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2596 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2597 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2598 finishScanParams->frameLength ;
2599 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2600 finishScanParams->currentOperChannel ;
2601 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2602 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2603 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2605 {
2606 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2607 finishScanParams->scanEntry.bssIdx[i] ;
2608 }
2609
2610
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 /* if Frame length, copy macMgmtHdr ro WDI structure */
2612 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2613 {
2614 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2615 &finishScanParams->macMgmtHdr,
2616 sizeof(WDI_MacMgmtHdr)) ;
2617 }
2618 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 /* Store Init Req pointer, as this will be used for response */
2620 /* store Params pass it to WDI */
2621 pWdaParams->pWdaContext = pWDA;
2622 pWdaParams->wdaMsgParam = finishScanParams;
2623 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 /* call DAL API to pass init scan request to DAL */
2625 status = WDI_FinishScanReq(wdiFinishScanParams,
2626 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002627
Jeff Johnson295189b2012-06-20 16:38:30 -07002628
2629 /*
2630 * WDI API returns failure..
2631 */
2632 if(IS_WDI_STATUS_FAILURE( status))
2633 {
2634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2635 "Failure in Finish Scan WDI API, free all the memory " );
2636 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2637 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 finishScanParams->status = eSIR_FAILURE ;
2639 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2640 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 return CONVERT_WDI2VOS_STATUS(status) ;
2642}
Jeff Johnson295189b2012-06-20 16:38:30 -07002643/*---------------------------------------------------------------------
2644 * ASSOC API's
2645 *---------------------------------------------------------------------
2646 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002647/*
2648 * FUNCTION: WDA_JoinReqCallback
2649 * Trigger Init SCAN callback
2650 */
2651void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2652{
2653 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2654 tWDA_CbContext *pWDA;
2655 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002657 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 if(NULL == pWdaParams)
2659 {
2660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002661 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 VOS_ASSERT(0) ;
2663 return ;
2664 }
2665 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2666 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2668 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 /* reset macBSSID */
2670 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 /* reset macSTASelf */
2672 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002673 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 return ;
2676}
Jeff Johnson295189b2012-06-20 16:38:30 -07002677/*
2678 * FUNCTION: WDA_ProcessJoinReq
2679 * Trigger Join REQ in WDI
2680 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002681VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2682 tSwitchChannelParams* joinReqParam)
2683{
2684 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 WDI_JoinReqParamsType *wdiJoinReqParam =
2686 (WDI_JoinReqParamsType *)vos_mem_malloc(
2687 sizeof(WDI_JoinReqParamsType)) ;
2688 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002690 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002691 if(NULL == wdiJoinReqParam)
2692 {
2693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002695 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002696 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 return VOS_STATUS_E_NOMEM;
2698 }
2699 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2700 if(NULL == pWdaParams)
2701 {
2702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002703 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 VOS_ASSERT(0);
2705 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002706 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 return VOS_STATUS_E_NOMEM;
2708 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002709
2710 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2711 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2712 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2713 {
2714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2715 "%s: received join request when BSSID or self-STA is NULL "
2716 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002717 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002718 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2719 VOS_ASSERT(0);
2720 vos_mem_free(wdiJoinReqParam);
2721 vos_mem_free(pWdaParams);
2722 joinReqParam->status = eSIR_FAILURE ;
2723 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2724 return VOS_STATUS_E_INVAL;
2725 }
2726
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 /* copy the BSSID for pWDA */
2728 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2729 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2731 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2733 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002734#ifdef WLAN_FEATURE_VOWIFI
2735 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2736 joinReqParam->maxTxPower ;
2737#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2739 joinReqParam->localPowerConstraint ;
2740#endif
2741 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2742 joinReqParam->secondaryChannelOffset ;
2743 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2744
2745 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 /* Store Init Req pointer, as this will be used for response */
2747 /* store Params pass it to WDI */
2748 pWdaParams->pWdaContext = pWDA;
2749 pWdaParams->wdaMsgParam = joinReqParam;
2750 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002751 status = WDI_JoinReq(wdiJoinReqParam,
2752 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 if(IS_WDI_STATUS_FAILURE(status))
2754 {
2755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2756 "Failure in Join WDI API, free all the memory " );
2757 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2758 vos_mem_free(pWdaParams) ;
2759 joinReqParam->status = eSIR_FAILURE ;
2760 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 return CONVERT_WDI2VOS_STATUS(status) ;
2763}
Jeff Johnson295189b2012-06-20 16:38:30 -07002764/*
2765 * FUNCTION: WDA_SwitchChannelReqCallback
2766 * send Switch channel RSP back to PE
2767 */
2768void WDA_SwitchChannelReqCallback(
2769 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2770{
2771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2772 tWDA_CbContext *pWDA;
2773 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002775 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 if(NULL == pWdaParams)
2777 {
2778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002779 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 VOS_ASSERT(0) ;
2781 return ;
2782 }
2783 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2784 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2785
2786#ifdef WLAN_FEATURE_VOWIFI
2787 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2788#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2790 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002792 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 return ;
2795}
Jeff Johnson295189b2012-06-20 16:38:30 -07002796/*
2797 * FUNCTION: WDA_ProcessChannelSwitchReq
2798 * Request to WDI to switch channel REQ params.
2799 */
2800VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2801 tSwitchChannelParams *pSwitchChanParams)
2802{
2803 WDI_Status status = WDI_STATUS_SUCCESS ;
2804 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2805 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2806 sizeof(WDI_SwitchChReqParamsType)) ;
2807 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002809 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 if(NULL == wdiSwitchChanParam)
2811 {
2812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 VOS_ASSERT(0);
2815 return VOS_STATUS_E_NOMEM;
2816 }
2817 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2818 if(NULL == pWdaParams)
2819 {
2820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002821 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 VOS_ASSERT(0);
2823 vos_mem_free(wdiSwitchChanParam);
2824 return VOS_STATUS_E_NOMEM;
2825 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002826 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2827#ifndef WLAN_FEATURE_VOWIFI
2828 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2829 pSwitchChanParams->localPowerConstraint;
2830#endif
2831 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2832 pSwitchChanParams->secondaryChannelOffset;
2833 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 /* Store req pointer, as this will be used for response */
2835 /* store Params pass it to WDI */
2836 pWdaParams->pWdaContext = pWDA;
2837 pWdaParams->wdaMsgParam = pSwitchChanParams;
2838 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839#ifdef WLAN_FEATURE_VOWIFI
2840 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2841 = pSwitchChanParams->maxTxPower;
2842 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2843 pSwitchChanParams ->selfStaMacAddr,
2844 sizeof(tSirMacAddr));
2845#endif
2846 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2847 pSwitchChanParams->bssId,
2848 sizeof(tSirMacAddr));
2849
2850 status = WDI_SwitchChReq(wdiSwitchChanParam,
2851 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 if(IS_WDI_STATUS_FAILURE(status))
2853 {
2854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2855 "Failure in process channel switch Req WDI API, free all the memory " );
2856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2857 vos_mem_free(pWdaParams) ;
2858 pSwitchChanParams->status = eSIR_FAILURE ;
2859 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 return CONVERT_WDI2VOS_STATUS(status) ;
2862}
Jeff Johnson295189b2012-06-20 16:38:30 -07002863/*
2864 * FUNCTION: WDA_ConfigBssReqCallback
2865 * config BSS Req Callback, called by WDI
2866 */
2867void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2868 ,void* pUserData)
2869{
2870 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2871 tWDA_CbContext *pWDA;
2872 tAddBssParams *configBssReqParam;
2873 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002875 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 if(NULL == pWdaParams)
2877 {
2878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002879 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002880 VOS_ASSERT(0) ;
2881 return ;
2882 }
2883 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2884 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2885 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002887 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2889 {
2890 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2891 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2893 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2894 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2895
2896 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2897 {
2898 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2899 {
2900 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2901 staConfigBssParam->staType = STA_ENTRY_BSSID;
2902 }
2903 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2904 (staConfigBssParam->staType == STA_ENTRY_SELF))
2905 {
2906 /* This is the 1st add BSS Req for the BTAMP STA */
2907 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2908 staConfigBssParam->staType = STA_ENTRY_BSSID;
2909 }
2910 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2911 (staConfigBssParam->staType == STA_ENTRY_PEER))
2912 {
2913 /* This is the 2nd ADD BSS Request that is sent
2914 * on the BTAMP STA side. The Sta type is
2915 * set to STA_ENTRY_PEER here.*/
2916 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2917 }
2918 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2919 (staConfigBssParam->staType == STA_ENTRY_SELF))
2920 {
2921 /* statype is already set by PE.
2922 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2923 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2924 staConfigBssParam->staType = STA_ENTRY_BSSID;
2925 }
2926 else
2927 {
2928 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2929 staConfigBssParam->staType = STA_ENTRY_PEER;
2930 }
2931 }
2932 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2933 {
2934 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2935 staConfigBssParam->staType = STA_ENTRY_SELF;
2936 }
2937 else
2938 {
2939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2940 "Invalid operation mode specified");
2941 VOS_ASSERT(0);
2942 }
2943
2944 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2949 sizeof(tSirMacAddr));
2950 staConfigBssParam->txChannelWidthSet =
2951 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2953 staConfigBssParam->htCapable)
2954 {
2955 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2956 wdiConfigBssRsp->ucBSSIdx;
2957 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2958 WDA_VALID_STA_INDEX ;
2959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2961 wdiConfigBssRsp->ucBSSIdx,
2962 wdiConfigBssRsp->ucSTAIdx))
2963 {
2964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002965 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 VOS_ASSERT(0) ;
2967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2969 {
2970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002971 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 VOS_ASSERT(0) ;
2973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002974#ifdef WLAN_FEATURE_VOWIFI
2975 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2976#endif
2977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2979 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 return ;
2982}
Jeff Johnson295189b2012-06-20 16:38:30 -07002983/*
2984 * FUNCTION: WDA_UpdateEdcaParamsForAC
2985 * Update WDI EDCA params with PE edca params
2986 */
2987void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2988 WDI_EdcaParamRecord *wdiEdcaParam,
2989 tSirMacEdcaParamRecord *macEdcaParam)
2990{
2991 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2992 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2993 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2994 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2995 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2996 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2997}
Jeff Johnson295189b2012-06-20 16:38:30 -07002998/*
2999 * FUNCTION: WDA_ProcessConfigBssReq
3000 * Configure BSS before starting Assoc with AP
3001 */
3002VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3003 tAddBssParams* configBssReqParam)
3004{
3005 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303006 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003007 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003009 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303010 if (NULL == configBssReqParam)
3011 {
3012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3013 "%s: configBssReqParam is NULL", __func__);
3014 return VOS_STATUS_E_INVAL;
3015 }
3016
3017 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3018 sizeof(WDI_ConfigBSSReqParamsType)) ;
3019
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 if(NULL == wdiConfigBssReqParam)
3021 {
3022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 VOS_ASSERT(0);
3025 return VOS_STATUS_E_NOMEM;
3026 }
3027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3028 if(NULL == pWdaParams)
3029 {
3030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 VOS_ASSERT(0);
3033 vos_mem_free(wdiConfigBssReqParam);
3034 return VOS_STATUS_E_NOMEM;
3035 }
Kiran4a17ebe2013-01-31 10:43:43 -08003036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3037 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3040 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 /* Store Init Req pointer, as this will be used for response */
3042 /* store Params pass it to WDI */
3043 pWdaParams->pWdaContext = pWDA;
3044 pWdaParams->wdaMsgParam = configBssReqParam;
3045 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3047 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 if(IS_WDI_STATUS_FAILURE(status))
3049 {
3050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3051 "Failure in Config BSS WDI API, free all the memory " );
3052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3053 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3056 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 return CONVERT_WDI2VOS_STATUS(status) ;
3058}
Jeff Johnson295189b2012-06-20 16:38:30 -07003059#ifdef ENABLE_HAL_COMBINED_MESSAGES
3060/*
3061 * FUNCTION: WDA_PostAssocReqCallback
3062 * Post ASSOC req callback, send RSP back to PE
3063 */
3064void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3065 void* pUserData)
3066{
3067 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3068 tPostAssocParams *postAssocReqParam =
3069 (tPostAssocParams *)pWDA->wdaMsgParam ;
3070 /*STA context within the BSS Params*/
3071 tAddStaParams *staPostAssocParam =
3072 &postAssocReqParam->addBssParams.staContext ;
3073 /*STA Params for self STA*/
3074 tAddStaParams *selfStaPostAssocParam =
3075 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003077 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003079 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3081 {
3082 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3083 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3084 sizeof(tSirMacAddr)) ;
3085 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3086 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3087 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3089 }
3090 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3091 pWDA->wdaWdiApiMsgParam = NULL;
3092 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 return ;
3095}
Jeff Johnson295189b2012-06-20 16:38:30 -07003096/*
3097 * FUNCTION: WDA_ProcessPostAssocReq
3098 * Trigger POST ASSOC processing in WDI
3099 */
3100VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3101 tPostAssocParams *postAssocReqParam)
3102{
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 WDI_Status status = WDI_STATUS_SUCCESS ;
3104
3105 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3106 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3107 sizeof(WDI_PostAssocReqParamsType)) ;
3108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003109 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003110
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 if(NULL == wdiPostAssocReqParam)
3112 {
3113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003114 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 VOS_ASSERT(0);
3116 return VOS_STATUS_E_NOMEM;
3117 }
3118
3119 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3120 {
3121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003122 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 VOS_ASSERT(0);
3124 return VOS_STATUS_E_FAILURE;
3125 }
3126
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 /* update BSS params into WDI structure */
3128 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3129 &postAssocReqParam->addBssParams) ;
3130 /* update STA params into WDI structure */
3131 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3132 &postAssocReqParam->addStaParams) ;
3133
3134 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3135 postAssocReqParam->addBssParams.highPerformance;
3136 WDA_UpdateEdcaParamsForAC(pWDA,
3137 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3138 &postAssocReqParam->addBssParams.acbe);
3139 WDA_UpdateEdcaParamsForAC(pWDA,
3140 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3141 &postAssocReqParam->addBssParams.acbk);
3142 WDA_UpdateEdcaParamsForAC(pWDA,
3143 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3144 &postAssocReqParam->addBssParams.acvi);
3145 WDA_UpdateEdcaParamsForAC(pWDA,
3146 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3147 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 /* Store Init Req pointer, as this will be used for response */
3149 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 /* store Params pass it to WDI */
3151 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003152 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3153 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 if(IS_WDI_STATUS_FAILURE(status))
3155 {
3156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3157 "Failure in Post Assoc WDI API, free all the memory " );
3158 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3159 pWDA->wdaWdiApiMsgParam = NULL;
3160 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 return CONVERT_WDI2VOS_STATUS(status) ;
3165}
3166#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003167/*
3168 * FUNCTION: WDA_AddStaReqCallback
3169 * ADD STA req callback, send RSP back to PE
3170 */
3171void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3172 void* pUserData)
3173{
3174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3175 tWDA_CbContext *pWDA;
3176 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003178 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 if(NULL == pWdaParams)
3180 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 VOS_ASSERT(0) ;
3183 return ;
3184 }
3185 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3186 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003188 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3190 {
3191 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3192 /*TODO: UMAC structure doesn't have these fields*/
3193 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3194 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3195 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3196 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3197 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3198 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003199#ifdef FEATURE_WLAN_TDLS
3200 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3201 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3202#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003204#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 {
3206 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3207 wdiConfigStaRsp->ucBssIdx;
3208 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3209 WDA_VALID_STA_INDEX ;
3210 }
3211 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3212 {
3213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003214 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 VOS_ASSERT(0) ;
3216 return ;
3217 }
3218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3220 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003222 return ;
3223}
Jeff Johnson295189b2012-06-20 16:38:30 -07003224/*
3225 * FUNCTION: WDA_ConfigStaReq
3226 * Trigger Config STA processing in WDI
3227 */
3228VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3229 tAddStaParams *addStaReqParam)
3230{
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3233 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3234 sizeof(WDI_ConfigSTAReqParamsType)) ;
3235 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003237 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003238 if(NULL == wdiConfigStaReqParam)
3239 {
3240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 VOS_ASSERT(0);
3243 return VOS_STATUS_E_NOMEM;
3244 }
3245 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3246 if(NULL == pWdaParams)
3247 {
3248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003249 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 VOS_ASSERT(0);
3251 vos_mem_free(wdiConfigStaReqParam);
3252 return VOS_STATUS_E_NOMEM;
3253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003254 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 /* update STA params into WDI structure */
3256 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3257 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 /* Store Init Req pointer, as this will be used for response */
3259 /* store Params pass it to WDI */
3260 pWdaParams->pWdaContext = pWDA;
3261 pWdaParams->wdaMsgParam = addStaReqParam;
3262 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3264 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 if(IS_WDI_STATUS_FAILURE(status))
3266 {
3267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3268 "Failure in Config STA WDI API, free all the memory " );
3269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3270 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 return CONVERT_WDI2VOS_STATUS(status) ;
3275}
Jeff Johnson295189b2012-06-20 16:38:30 -07003276/*
3277 * FUNCTION: WDA_DelBSSReqCallback
3278 * Dens DEL BSS RSP back to PE
3279 */
3280void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3281 void* pUserData)
3282{
3283 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3284 tWDA_CbContext *pWDA;
3285 tDeleteBssParams *delBssReqParam;
3286 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003288 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 if(NULL == pWdaParams)
3290 {
3291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003292 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 VOS_ASSERT(0) ;
3294 return ;
3295 }
3296 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3297 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003298 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3300 {
3301 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3302 sizeof(tSirMacAddr)) ;
3303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003304 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3305 {
3306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003307 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 VOS_ASSERT(0) ;
3309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003310 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3311 {
3312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 VOS_ASSERT(0) ;
3315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3317 {
3318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003319 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 VOS_ASSERT(0) ;
3321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3323 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 /* reset the the system role*/
3325 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3326
3327 /* Reset the BA related information */
3328 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3329 {
3330 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3331 {
3332 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3333 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3334 /* Reset framesTxed counters here */
3335 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3336 {
3337 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3338 }
3339 }
3340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 return ;
3343}
3344
Jeff Johnson295189b2012-06-20 16:38:30 -07003345/*
3346 * FUNCTION: WDA_ProcessDelBssReq
3347 * Init DEL BSS req with WDI
3348 */
3349VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3350 tDeleteBssParams *delBssParam)
3351{
3352 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3354 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3355 sizeof(WDI_DelBSSReqParamsType)) ;
3356 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003358 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 if(NULL == wdiDelBssReqParam)
3360 {
3361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003362 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 VOS_ASSERT(0);
3364 return VOS_STATUS_E_NOMEM;
3365 }
3366 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3367 if(NULL == pWdaParams)
3368 {
3369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003371 VOS_ASSERT(0);
3372 vos_mem_free(wdiDelBssReqParam);
3373 return VOS_STATUS_E_NOMEM;
3374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3376 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3377
3378 /* Store Init Req pointer, as this will be used for response */
3379 /* store Params pass it to WDI */
3380 pWdaParams->pWdaContext = pWDA;
3381 pWdaParams->wdaMsgParam = delBssParam;
3382 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 status = WDI_DelBSSReq(wdiDelBssReqParam,
3384 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 if(IS_WDI_STATUS_FAILURE(status))
3386 {
3387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3388 "Failure in Del BSS WDI API, free all the memory " );
3389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3390 vos_mem_free(pWdaParams) ;
3391 delBssParam->status = eSIR_FAILURE ;
3392 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 return CONVERT_WDI2VOS_STATUS(status) ;
3395}
Jeff Johnson295189b2012-06-20 16:38:30 -07003396/*
3397 * FUNCTION: WDA_DelSTAReqCallback
3398 * Dens DEL STA RSP back to PE
3399 */
3400void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3401 void* pUserData)
3402{
3403 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3404 tWDA_CbContext *pWDA;
3405 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003407 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 if(NULL == pWdaParams)
3409 {
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003411 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 VOS_ASSERT(0) ;
3413 return ;
3414 }
3415 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3416 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003417 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3419 {
3420 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3421 {
3422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003423 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 VOS_ASSERT(0) ;
3425 }
3426 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3427 }
3428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3429 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003430 /*Reset the BA information corresponding to this STAIdx */
3431 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3432 WDA_INVALID_STA_INDEX;
3433 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3434
3435 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 return ;
3437}
Jeff Johnson295189b2012-06-20 16:38:30 -07003438/*
3439 * FUNCTION: WDA_ProcessDelStaReq
3440 * Init DEL STA req with WDI
3441 */
3442VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3443 tDeleteStaParams *delStaParam)
3444{
3445 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003446 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3447 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3448 sizeof(WDI_DelSTAReqParamsType)) ;
3449 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003451 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 if(NULL == wdiDelStaReqParam)
3453 {
3454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003455 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003456 VOS_ASSERT(0);
3457 return VOS_STATUS_E_NOMEM;
3458 }
3459 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3460 if(NULL == pWdaParams)
3461 {
3462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003463 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 VOS_ASSERT(0);
3465 vos_mem_free(wdiDelStaReqParam);
3466 return VOS_STATUS_E_NOMEM;
3467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003468 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3469 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 /* Store Init Req pointer, as this will be used for response */
3471 /* store Params pass it to WDI */
3472 pWdaParams->pWdaContext = pWDA;
3473 pWdaParams->wdaMsgParam = delStaParam;
3474 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003475 status = WDI_DelSTAReq(wdiDelStaReqParam,
3476 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 if(IS_WDI_STATUS_FAILURE(status))
3478 {
3479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3480 "Failure in Del STA WDI API, free all the memory status = %d",
3481 status );
3482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3483 vos_mem_free(pWdaParams) ;
3484 delStaParam->status = eSIR_FAILURE ;
3485 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3486 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 return CONVERT_WDI2VOS_STATUS(status) ;
3488}
Jeff Johnson295189b2012-06-20 16:38:30 -07003489void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3490{
3491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3492 tWDA_CbContext *pWDA;
3493 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003495 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 if(NULL == pWdaParams)
3497 {
3498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003499 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 VOS_ASSERT(0) ;
3501 return ;
3502 }
3503 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3504 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3506 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3508 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3509 pwdiAddSTASelfRsp->macSelfSta,
3510 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003511 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003512 return ;
3513}
Jeff Johnson295189b2012-06-20 16:38:30 -07003514/*
3515 * FUNCTION: WDA_ProcessAddStaSelfReq
3516 *
3517 */
3518VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3519{
3520 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003521 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3523 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3524 sizeof(WDI_AddSTASelfReqParamsType)) ;
3525 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003527 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 if( NULL == wdiAddStaSelfReq )
3529 {
3530 VOS_ASSERT( 0 );
3531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003532 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003533 return( VOS_STATUS_E_NOMEM );
3534 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003535 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 if( NULL == pWdaParams )
3537 {
3538 VOS_ASSERT( 0 );
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003540 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 vos_mem_free(wdiAddStaSelfReq) ;
3542 return( VOS_STATUS_E_NOMEM );
3543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003546 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 /* Store Init Req pointer, as this will be used for response */
3548 /* store Params pass it to WDI */
3549 pWdaParams->pWdaContext = pWDA;
3550 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3551 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003552 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003553
Jeff Johnson43971f52012-07-17 12:26:56 -07003554 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 {
3556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3557 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003558 wstatus );
3559 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3561 vos_mem_free(pWdaParams) ;
3562 pAddStaSelfReq->status = eSIR_FAILURE ;
3563 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3564 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003565 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003566}
Jeff Johnson295189b2012-06-20 16:38:30 -07003567/*
3568 * FUNCTION: WDA_DelSTASelfRespCallback
3569 *
3570 */
3571void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3572 wdiDelStaSelfRspParams , void* pUserData)
3573{
3574 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3575 tWDA_CbContext *pWDA;
3576 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003578 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 if (NULL == pWdaParams)
3580 {
3581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003582 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 VOS_ASSERT(0);
3584 return;
3585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3587 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003589 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003590
3591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3592 vos_mem_free(pWdaParams) ;
3593
3594 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 return ;
3596}
Jeff Johnson295189b2012-06-20 16:38:30 -07003597/*
3598 * FUNCTION: WDA_DelSTASelfReqCallback
3599 *
3600 */
3601void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3602 void* pUserData)
3603{
3604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3605 tWDA_CbContext *pWDA;
3606 tDelStaSelfParams *delStaSelfParams;
3607
3608 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303609 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003610 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003611
3612 if (NULL == pWdaParams)
3613 {
3614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003615 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 VOS_ASSERT(0);
3617 return;
3618 }
3619
3620 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3621 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3622
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003623 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003624
3625 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3626 {
3627 VOS_ASSERT(0);
3628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3629 vos_mem_free(pWdaParams) ;
3630 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3631 }
3632
3633 return ;
3634}
3635
3636/*
3637 * FUNCTION: WDA_DelSTASelfReq
3638 * Trigger Config STA processing in WDI
3639 */
3640VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3641 tDelStaSelfParams* pDelStaSelfReqParam)
3642{
3643 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003644 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003645 tWDA_ReqParams *pWdaParams = NULL;
3646 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3647 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3648 sizeof(WDI_DelSTASelfReqParamsType)) ;
3649
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003651 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003652 if( NULL == wdiDelStaSelfReq )
3653 {
3654 VOS_ASSERT( 0 );
3655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003656 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 return( VOS_STATUS_E_NOMEM );
3658 }
3659
3660 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3661 if( NULL == pWdaParams )
3662 {
3663 VOS_ASSERT( 0 );
3664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003665 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003666 vos_mem_free(wdiDelStaSelfReq) ;
3667 return( VOS_STATUS_E_NOMEM );
3668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003669 pWdaParams->pWdaContext = pWDA;
3670 /* Store param pointer as passed in by caller */
3671 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3672 /* store Params pass it to WDI */
3673 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3675 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3676
3677 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3678 wdiDelStaSelfReq->pUserData = pWdaParams;
3679
Jeff Johnson43971f52012-07-17 12:26:56 -07003680 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3682
Jeff Johnson43971f52012-07-17 12:26:56 -07003683 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 {
3685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3686 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3687 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003688 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3690 vos_mem_free(pWdaParams) ;
3691 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3692 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3693 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003694 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695}
3696
Jeff Johnson295189b2012-06-20 16:38:30 -07003697/*
3698 * FUNCTION: WDA_SendMsg
3699 * Send Message back to PE
3700 */
3701void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3702 void *pBodyptr, tANI_U32 bodyVal)
3703{
3704 tSirMsgQ msg = {0} ;
3705 tANI_U32 status = VOS_STATUS_SUCCESS ;
3706 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 msg.type = msgType;
3708 msg.bodyval = bodyVal;
3709 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003710 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 if (VOS_STATUS_SUCCESS != status)
3712 {
3713 if(NULL != pBodyptr)
3714 {
3715 vos_mem_free(pBodyptr);
3716 }
3717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003718 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003719 VOS_ASSERT(0) ;
3720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 return ;
3722}
Jeff Johnson295189b2012-06-20 16:38:30 -07003723/*
3724 * FUNCTION: WDA_UpdateBSSParams
3725 * Translated WDA/PE BSS info into WDI BSS info..
3726 */
3727void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3728 WDI_ConfigBSSReqInfoType *wdiBssParams,
3729 tAddBssParams *wdaBssParams)
3730{
3731 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003732 /* copy bssReq Params to WDI structure */
3733 vos_mem_copy(wdiBssParams->macBSSID,
3734 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3735 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3736 sizeof(tSirMacAddr)) ;
3737 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3738 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3739 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 wdiBssParams->ucShortSlotTimeSupported =
3741 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3743 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3744 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3745 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3746 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3747
3748 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3749 wdiBssParams->ucTXOPProtectionFullSupport =
3750 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003751 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3752 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003753 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3755 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3756 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3757 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3758
Chet Lanctot186b5732013-03-18 10:26:30 -07003759 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3760
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 /* copy SSID into WDI structure */
3762 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3763 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3764 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003765 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3766 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003767 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768#ifdef WLAN_FEATURE_VOWIFI
3769 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3770#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003773#ifdef WLAN_FEATURE_VOWIFI_11R
3774 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003775 if(wdiBssParams->bExtSetStaKeyParamValid)
3776 {
3777 /* copy set STA key params to WDI structure */
3778 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3779 wdaBssParams->extSetStaKeyParam.staIdx;
3780 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3781 wdaBssParams->extSetStaKeyParam.encType;
3782 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3783 wdaBssParams->extSetStaKeyParam.wepType;
3784 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3785 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003786 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3787 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003788 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003789 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3790 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3791 {
3792 WDA_GetWepKeysFromCfg( pWDA,
3793 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3794 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3795 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3796 }
3797 else
3798 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003799 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3800 keyIndex++)
3801 {
3802 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3803 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3804 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3805 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3806 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3807 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3809 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3810 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3811 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3812 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3813 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3814 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3815 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003817 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3818 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003819 }
3820 }
3821 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3822 }
3823 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3824 {
3825 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3826 sizeof(wdaBssParams->extSetStaKeyParam) );
3827 }
3828#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003829#ifdef WLAN_FEATURE_11AC
3830 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3831 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3832#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003833
3834 return ;
3835}
Jeff Johnson295189b2012-06-20 16:38:30 -07003836/*
3837 * FUNCTION: WDA_UpdateSTAParams
3838 * Translated WDA/PE BSS info into WDI BSS info..
3839 */
3840void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3841 WDI_ConfigStaReqInfoType *wdiStaParams,
3842 tAddStaParams *wdaStaParams)
3843{
3844 tANI_U8 i = 0;
3845 /* Update STA params */
3846 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3847 sizeof(tSirMacAddr)) ;
3848 wdiStaParams->usAssocId = wdaStaParams->assocId;
3849 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003850 wdiStaParams->staIdx = wdaStaParams->staIdx;
3851
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 wdiStaParams->ucShortPreambleSupported =
3853 wdaStaParams->shortPreambleSupported;
3854 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3855 sizeof(tSirMacAddr)) ;
3856 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3857
3858 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3859
3860 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3861 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3862 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3863 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3864 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3865 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3866 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3867
3868 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3869 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 wdiStaParams->wdiSupportedRates.opRateMode =
3871 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3873 {
3874 wdiStaParams->wdiSupportedRates.llbRates[i] =
3875 wdaStaParams->supportedRates.llbRates[i];
3876 }
3877 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3878 {
3879 wdiStaParams->wdiSupportedRates.llaRates[i] =
3880 wdaStaParams->supportedRates.llaRates[i];
3881 }
3882 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3883 {
3884 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3885 wdaStaParams->supportedRates.aniLegacyRates[i];
3886 }
3887 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3888 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003889#ifdef WLAN_FEATURE_11AC
3890 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3891 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3892 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3893 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3894#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3896 {
3897 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3898 wdaStaParams->supportedRates.supportedMCSSet[i];
3899 }
3900 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3901 wdaStaParams->supportedRates.rxHighestDataRate;
3902
3903 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3904
3905 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3906
3907 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3908 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3909 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3910
3911 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3912 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3913 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3914 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003915 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003916#ifdef WLAN_FEATURE_11AC
3917 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3918 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003919 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003920#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003921 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3922 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 return ;
3924}
Jeff Johnson295189b2012-06-20 16:38:30 -07003925/*
3926 * -------------------------------------------------------------------------
3927 * CFG update to WDI
3928 * -------------------------------------------------------------------------
3929 */
3930
3931 /*
3932 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3933 * Convert the WNI CFG ID to HAL CFG ID
3934 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003935static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003936{
3937 switch(wniCfgId)
3938 {
3939 case WNI_CFG_STA_ID:
3940 return QWLAN_HAL_CFG_STA_ID;
3941 case WNI_CFG_CURRENT_TX_ANTENNA:
3942 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3943 case WNI_CFG_CURRENT_RX_ANTENNA:
3944 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3945 case WNI_CFG_LOW_GAIN_OVERRIDE:
3946 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3947 case WNI_CFG_POWER_STATE_PER_CHAIN:
3948 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3949 case WNI_CFG_CAL_PERIOD:
3950 return QWLAN_HAL_CFG_CAL_PERIOD;
3951 case WNI_CFG_CAL_CONTROL:
3952 return QWLAN_HAL_CFG_CAL_CONTROL;
3953 case WNI_CFG_PROXIMITY:
3954 return QWLAN_HAL_CFG_PROXIMITY;
3955 case WNI_CFG_NETWORK_DENSITY:
3956 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3957 case WNI_CFG_MAX_MEDIUM_TIME:
3958 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3959 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3960 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3961 case WNI_CFG_RTS_THRESHOLD:
3962 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3963 case WNI_CFG_SHORT_RETRY_LIMIT:
3964 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3965 case WNI_CFG_LONG_RETRY_LIMIT:
3966 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3967 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3968 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3969 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3970 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3971 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3972 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3973 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3974 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3975 case WNI_CFG_FIXED_RATE:
3976 return QWLAN_HAL_CFG_FIXED_RATE;
3977 case WNI_CFG_RETRYRATE_POLICY:
3978 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3979 case WNI_CFG_RETRYRATE_SECONDARY:
3980 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3981 case WNI_CFG_RETRYRATE_TERTIARY:
3982 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3983 case WNI_CFG_FORCE_POLICY_PROTECTION:
3984 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3985 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3986 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3987 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3988 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3989 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3990 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3991 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3992 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3993 case WNI_CFG_MAX_BA_SESSIONS:
3994 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3995 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3996 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3997 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3998 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3999 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4000 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4001 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4002 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4003 case WNI_CFG_STATS_PERIOD:
4004 return QWLAN_HAL_CFG_STATS_PERIOD;
4005 case WNI_CFG_CFP_MAX_DURATION:
4006 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4007#if 0 /*This is not part of CFG*/
4008 case WNI_CFG_FRAME_TRANS_ENABLED:
4009 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4010#endif
4011 case WNI_CFG_DTIM_PERIOD:
4012 return QWLAN_HAL_CFG_DTIM_PERIOD;
4013 case WNI_CFG_EDCA_WME_ACBK:
4014 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4015 case WNI_CFG_EDCA_WME_ACBE:
4016 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4017 case WNI_CFG_EDCA_WME_ACVI:
4018 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4019 case WNI_CFG_EDCA_WME_ACVO:
4020 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4021#if 0
4022 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4023 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4024 case WNI_CFG_TELE_BCN_TRANS_LI:
4025 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4026 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4027 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4028 case WNI_CFG_TELE_BCN_MAX_LI:
4029 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4030 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4031 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4032#endif
4033 case WNI_CFG_ENABLE_CLOSE_LOOP:
4034 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004035 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4036 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 default:
4038 {
4039 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4040 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
4041 wniCfgId);
4042 return VOS_STATUS_E_INVAL;
4043 }
4044 }
4045}
Jeff Johnson295189b2012-06-20 16:38:30 -07004046/*
4047 * FUNCTION: WDA_UpdateCfgCallback
4048 *
4049 */
4050void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4051{
4052 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4053 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4054 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004056 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 /*
4058 * currently there is no response message is expected between PE and
4059 * WDA, Failure return from WDI is a ASSERT condition
4060 */
4061 if(WDI_STATUS_SUCCESS != wdiStatus)
4062 {
4063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004064 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004065 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4066 }
4067
4068 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4069 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4070 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 return ;
4072}
Jeff Johnson295189b2012-06-20 16:38:30 -07004073/*
4074 * FUNCTION: WDA_UpdateCfg
4075 *
4076 */
4077VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4078{
4079
4080 WDI_Status status = WDI_STATUS_SUCCESS ;
4081 tANI_U32 val =0;
4082 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4083 tHalCfg *configData;
4084 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4085 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004087 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004088 if (NULL == pMac )
4089 {
4090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004091 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004092 return VOS_STATUS_E_FAILURE;
4093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 if(WDA_START_STATE != pWDA->wdaState)
4095 {
4096 return VOS_STATUS_E_FAILURE;
4097 }
4098
4099 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4100 {
4101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004102 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 VOS_ASSERT(0);
4104 return VOS_STATUS_E_FAILURE;
4105 }
4106
4107 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4108 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 if(NULL == wdiCfgReqParam)
4110 {
4111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004112 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004113 VOS_ASSERT(0);
4114 return VOS_STATUS_E_NOMEM;
4115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4117 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 if(NULL == wdiCfgReqParam->pConfigBuffer)
4119 {
4120 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004121 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004122 vos_mem_free(wdiCfgReqParam);
4123 VOS_ASSERT(0);
4124 return VOS_STATUS_E_NOMEM;
4125 }
4126
4127 /*convert the WNI CFG Id to HAL CFG Id*/
4128 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4129 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4130
4131 /*TODO: revisit this for handling string parameters */
4132 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4133 &val) != eSIR_SUCCESS)
4134 {
4135 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4136 "Failed to cfg get id %d\n", cfgParam->bodyval);
4137 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4138 vos_mem_free(wdiCfgReqParam);
4139 return eSIR_FAILURE;
4140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4142 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4143 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4144 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4145 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4146
4147 /* store Params pass it to WDI */
4148 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004149#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4150 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4151 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 if(IS_WDI_STATUS_FAILURE(status))
4153 {
4154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4155 "Failure in Update CFG WDI API, free all the memory " );
4156 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4157 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4158 pWDA->wdaWdiCfgApiMsgParam = NULL;
4159 /* Failure is not expected */
4160 VOS_ASSERT(0) ;
4161 }
4162#else
4163 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4164 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4165 pWDA->wdaWdiCfgApiMsgParam = NULL;
4166#endif
4167 return CONVERT_WDI2VOS_STATUS(status) ;
4168}
4169
Jeff Johnson295189b2012-06-20 16:38:30 -07004170VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4171 v_U8_t *pDefaultKeyId,
4172 v_U8_t *pNumKeys,
4173 WDI_KeysType *pWdiKeys )
4174{
4175 v_U32_t i, j, defKeyId = 0;
4176 v_U32_t val = SIR_MAC_KEY_LENGTH;
4177 VOS_STATUS status = WDI_STATUS_SUCCESS;
4178 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 if (NULL == pMac )
4180 {
4181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004182 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 return VOS_STATUS_E_FAILURE;
4184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4186 &defKeyId ))
4187 {
4188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4189 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4190 }
4191
4192 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 /* Need to extract ALL of the configured WEP Keys */
4194 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4195 {
4196 val = SIR_MAC_KEY_LENGTH;
4197 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4198 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4199 pWdiKeys[j].key,
4200 &val ))
4201 {
4202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4203 "WEP Key index [%d] may not configured in CFG\n",i);
4204 }
4205 else
4206 {
4207 pWdiKeys[j].keyId = (tANI_U8) i;
4208 /*
4209 * Actually, a DC (Don't Care) because
4210 * this is determined (and set) by PE/MLME
4211 */
4212 pWdiKeys[j].unicast = 0;
4213 /*
4214 * Another DC (Don't Care)
4215 */
4216 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4217 /* Another DC (Don't Care). Unused for WEP */
4218 pWdiKeys[j].paeRole = 0;
4219 /* Determined from wlan_cfgGetStr() above.*/
4220 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 j++;
4222 *pNumKeys = (tANI_U8) j;
4223 }
4224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 return status;
4226}
Jeff Johnson295189b2012-06-20 16:38:30 -07004227/*
4228 * FUNCTION: WDA_SetBssKeyReqCallback
4229 * send SET BSS key RSP back to PE
4230 */
4231void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4232{
4233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4234 tWDA_CbContext *pWDA;
4235 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004237 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 if(NULL == pWdaParams)
4239 {
4240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 VOS_ASSERT(0) ;
4243 return ;
4244 }
4245 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4246 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4248 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004249 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 return ;
4252}
Jeff Johnson295189b2012-06-20 16:38:30 -07004253/*
4254 * FUNCTION: WDA_ProcessSetBssKeyReq
4255 * Request to WDI for programming the BSS key( key for
4256 * broadcast/multicast frames Encryption)
4257 */
4258VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4259 tSetBssKeyParams *setBssKeyParams )
4260{
4261 WDI_Status status = WDI_STATUS_SUCCESS ;
4262 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4263 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4264 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4265 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004268 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 if(NULL == wdiSetBssKeyParam)
4270 {
4271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 VOS_ASSERT(0);
4274 return VOS_STATUS_E_NOMEM;
4275 }
4276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4277 if(NULL == pWdaParams)
4278 {
4279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004281 VOS_ASSERT(0);
4282 vos_mem_free(wdiSetBssKeyParam);
4283 return VOS_STATUS_E_NOMEM;
4284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 /* copy set BSS params to WDI structure */
4287 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4288 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4289 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 if(setBssKeyParams->encType != eSIR_ED_NONE)
4291 {
4292 if( setBssKeyParams->numKeys == 0 &&
4293 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4294 setBssKeyParams->encType == eSIR_ED_WEP104))
4295 {
4296 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4298 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4299 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4300 }
4301 else
4302 {
4303 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4304 {
4305 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4306 setBssKeyParams->key[keyIndex].keyId;
4307 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4308 setBssKeyParams->key[keyIndex].unicast;
4309 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4310 setBssKeyParams->key[keyIndex].keyDirection;
4311 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4312 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4313 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4314 setBssKeyParams->key[keyIndex].paeRole;
4315 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4316 setBssKeyParams->key[keyIndex].keyLength;
4317 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4318 setBssKeyParams->key[keyIndex].key,
4319 SIR_MAC_MAX_KEY_LENGTH);
4320 }
4321 }
4322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4324 setBssKeyParams->singleTidRc;
4325 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 /* Store set key pointer, as this will be used for response */
4327 /* store Params pass it to WDI */
4328 pWdaParams->pWdaContext = pWDA;
4329 pWdaParams->wdaMsgParam = setBssKeyParams;
4330 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004331 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4332 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4333
4334 if(IS_WDI_STATUS_FAILURE(status))
4335 {
4336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4337 "Failure in Set BSS Key Req WDI API, free all the memory " );
4338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4339 vos_mem_free(pWdaParams) ;
4340 setBssKeyParams->status = eSIR_FAILURE ;
4341 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004343 return CONVERT_WDI2VOS_STATUS(status) ;
4344}
Jeff Johnson295189b2012-06-20 16:38:30 -07004345/*
4346 * FUNCTION: WDA_RemoveBssKeyReqCallback
4347 * send SET BSS key RSP back to PE
4348 */
4349void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4350{
4351 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4352 tWDA_CbContext *pWDA;
4353 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004355 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 if(NULL == pWdaParams)
4357 {
4358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004359 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 VOS_ASSERT(0) ;
4361 return ;
4362 }
4363 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4364 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4366 vos_mem_free(pWdaParams) ;
4367
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004368 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004369 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004370 return ;
4371}
Jeff Johnson295189b2012-06-20 16:38:30 -07004372/*
4373 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4374 * Request to WDI to remove the BSS key( key for broadcast/multicast
4375 * frames Encryption)
4376 */
4377VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4378 tRemoveBssKeyParams *removeBssKeyParams )
4379{
4380 WDI_Status status = WDI_STATUS_SUCCESS ;
4381 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4382 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4383 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4384 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004386 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 if(NULL == wdiRemoveBssKeyParam)
4388 {
4389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 VOS_ASSERT(0);
4392 return VOS_STATUS_E_NOMEM;
4393 }
4394 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4395 if(NULL == pWdaParams)
4396 {
4397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004398 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004399 VOS_ASSERT(0);
4400 vos_mem_free(wdiRemoveBssKeyParam);
4401 return VOS_STATUS_E_NOMEM;
4402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 /* copy Remove BSS key params to WDI structure*/
4404 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4405 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4406 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4407 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4408 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 /* Store remove key pointer, as this will be used for response */
4410 /* store Params pass it to WDI */
4411 pWdaParams->pWdaContext = pWDA;
4412 pWdaParams->wdaMsgParam = removeBssKeyParams;
4413 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4415 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 if(IS_WDI_STATUS_FAILURE(status))
4417 {
4418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4419 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4421 vos_mem_free(pWdaParams) ;
4422 removeBssKeyParams->status = eSIR_FAILURE ;
4423 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 return CONVERT_WDI2VOS_STATUS(status) ;
4426}
Jeff Johnson295189b2012-06-20 16:38:30 -07004427/*
4428 * FUNCTION: WDA_SetBssKeyReqCallback
4429 * send SET BSS key RSP back to PE
4430 */
4431void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4432{
4433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4434 tWDA_CbContext *pWDA;
4435 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004437 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004438 if(NULL == pWdaParams)
4439 {
4440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004441 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 VOS_ASSERT(0) ;
4443 return ;
4444 }
4445 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4446 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4448 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004449 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004450 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 return ;
4452}
Jeff Johnson295189b2012-06-20 16:38:30 -07004453/*
4454 * FUNCTION: WDA_ProcessSetStaKeyReq
4455 * Request to WDI for programming the STA key( key for Unicast frames
4456 * Encryption)
4457 */
4458VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4459 tSetStaKeyParams *setStaKeyParams )
4460{
4461 WDI_Status status = WDI_STATUS_SUCCESS ;
4462 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4463 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4464 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4465 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004468 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 if(NULL == wdiSetStaKeyParam)
4470 {
4471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 VOS_ASSERT(0);
4474 return VOS_STATUS_E_NOMEM;
4475 }
4476 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4477 if(NULL == pWdaParams)
4478 {
4479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 VOS_ASSERT(0);
4482 vos_mem_free(wdiSetStaKeyParam);
4483 return VOS_STATUS_E_NOMEM;
4484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 /* copy set STA key params to WDI structure */
4488 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4489 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4490 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4491 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 if(setStaKeyParams->encType != eSIR_ED_NONE)
4493 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004494 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4496 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4497 {
4498 WDA_GetWepKeysFromCfg( pWDA,
4499 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4500 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4501 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4502 }
4503 else
4504 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4506 keyIndex++)
4507 {
4508 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4509 setStaKeyParams->key[keyIndex].keyId;
4510 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4511 setStaKeyParams->key[keyIndex].unicast;
4512 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4513 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4515 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4516 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4517 setStaKeyParams->key[keyIndex].paeRole;
4518 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4519 setStaKeyParams->key[keyIndex].keyLength;
4520 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4521 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4522 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4523 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4524 {
4525 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4526 }
4527 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4529 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 }
4531 }
4532 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4533 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 /* Store set key pointer, as this will be used for response */
4535 /* store Params pass it to WDI */
4536 pWdaParams->pWdaContext = pWDA;
4537 pWdaParams->wdaMsgParam = setStaKeyParams;
4538 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4540 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 if(IS_WDI_STATUS_FAILURE(status))
4542 {
4543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4544 "Failure in set STA Key Req WDI API, free all the memory " );
4545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4546 vos_mem_free(pWdaParams) ;
4547 setStaKeyParams->status = eSIR_FAILURE ;
4548 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004550 return CONVERT_WDI2VOS_STATUS(status) ;
4551}
Jeff Johnson295189b2012-06-20 16:38:30 -07004552/*
4553 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4554 * send SET Bcast STA key RSP back to PE
4555 */
4556void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4557{
4558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4559 tWDA_CbContext *pWDA;
4560 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004562 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 if(NULL == pWdaParams)
4564 {
4565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004566 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004567 VOS_ASSERT(0) ;
4568 return ;
4569 }
4570 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4571 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4573 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004574 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 return ;
4577}
4578
Jeff Johnson295189b2012-06-20 16:38:30 -07004579/*
4580 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4581 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4582 * Encryption)
4583 */
4584VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4585 tSetStaKeyParams *setStaKeyParams )
4586{
4587 WDI_Status status = WDI_STATUS_SUCCESS ;
4588 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4589 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4590 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4591 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004594 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 if(NULL == wdiSetStaKeyParam)
4596 {
4597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 VOS_ASSERT(0);
4600 return VOS_STATUS_E_NOMEM;
4601 }
4602 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4603 if(NULL == pWdaParams)
4604 {
4605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004606 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004607 VOS_ASSERT(0);
4608 vos_mem_free(wdiSetStaKeyParam);
4609 return VOS_STATUS_E_NOMEM;
4610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004611 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 /* copy set STA key params to WDI structure */
4614 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4615 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4616 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4617 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 if(setStaKeyParams->encType != eSIR_ED_NONE)
4619 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4621 keyIndex++)
4622 {
4623 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4624 setStaKeyParams->key[keyIndex].keyId;
4625 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4626 setStaKeyParams->key[keyIndex].unicast;
4627 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4628 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004629 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4630 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4631 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4632 setStaKeyParams->key[keyIndex].paeRole;
4633 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4634 setStaKeyParams->key[keyIndex].keyLength;
4635 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4636 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4637 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4639 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004640 }
4641 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 /* Store set key pointer, as this will be used for response */
4643 /* store Params pass it to WDI */
4644 pWdaParams->pWdaContext = pWDA;
4645 pWdaParams->wdaMsgParam = setStaKeyParams;
4646 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4648 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 if(IS_WDI_STATUS_FAILURE(status))
4650 {
4651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4652 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4654 vos_mem_free(pWdaParams) ;
4655 setStaKeyParams->status = eSIR_FAILURE ;
4656 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4657 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004658 return CONVERT_WDI2VOS_STATUS(status) ;
4659}
Jeff Johnson295189b2012-06-20 16:38:30 -07004660/*
4661 * FUNCTION: WDA_RemoveStaKeyReqCallback
4662 * send SET BSS key RSP back to PE
4663 */
4664void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4665{
4666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4667 tWDA_CbContext *pWDA;
4668 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004670 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 if(NULL == pWdaParams)
4672 {
4673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004674 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004675 VOS_ASSERT(0) ;
4676 return ;
4677 }
4678 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4679 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4681 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004682 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 return ;
4685}
4686
Jeff Johnson295189b2012-06-20 16:38:30 -07004687/*
4688 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4689 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4690 */
4691VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4692 tRemoveStaKeyParams *removeStaKeyParams )
4693{
4694 WDI_Status status = WDI_STATUS_SUCCESS ;
4695 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4696 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4697 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4698 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004700 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 if(NULL == wdiRemoveStaKeyParam)
4702 {
4703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 VOS_ASSERT(0);
4706 return VOS_STATUS_E_NOMEM;
4707 }
4708 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4709 if(NULL == pWdaParams)
4710 {
4711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004712 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 VOS_ASSERT(0);
4714 vos_mem_free(wdiRemoveStaKeyParam);
4715 return VOS_STATUS_E_NOMEM;
4716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 /* copy remove STA key params to WDI structure*/
4718 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4719 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4720 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4721 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4722 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004723 /* Store remove key pointer, as this will be used for response */
4724 /* store Params pass it to WDI */
4725 pWdaParams->pWdaContext = pWDA;
4726 pWdaParams->wdaMsgParam = removeStaKeyParams;
4727 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4729 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 if(IS_WDI_STATUS_FAILURE(status))
4731 {
4732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4733 "Failure in remove STA Key Req WDI API, free all the memory " );
4734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4735 vos_mem_free(pWdaParams) ;
4736 removeStaKeyParams->status = eSIR_FAILURE ;
4737 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 return CONVERT_WDI2VOS_STATUS(status) ;
4740}
Jeff Johnson295189b2012-06-20 16:38:30 -07004741/*
4742 * FUNCTION: WDA_IsHandleSetLinkStateReq
4743 * Update the WDA state and return the status to handle this message or not
4744 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004745WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4746 tWDA_CbContext *pWDA,
4747 tLinkStateParams *linkStateParams)
4748{
4749 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 switch(linkStateParams->state)
4751 {
4752 case eSIR_LINK_PREASSOC_STATE:
4753 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4754 /*
4755 * set the WDA state to PRE ASSOC
4756 * copy the BSSID into pWDA to use it in join request and return,
4757 * No need to handle these messages.
4758 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004759 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4760 {
4761 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004763 }
4764 else
4765 {
4766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004767 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004768 VOS_ASSERT(0);
4769 }
4770
4771 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4772 {
4773 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004775 }
4776 else
4777 {
4778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004779 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004780 VOS_ASSERT(0);
4781 }
4782
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4784 *channel and after ) so reset the WDA state to ready when the second
4785 * time UMAC issue the link state with PREASSOC
4786 */
4787 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4788 {
4789 /* RESET WDA state back to WDA_READY_STATE */
4790 pWDA->wdaState = WDA_READY_STATE;
4791 }
4792 else
4793 {
4794 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4795 }
4796 //populate linkState info in WDACbCtxt
4797 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 default:
4800 if(pWDA->wdaState != WDA_READY_STATE)
4801 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004802 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4803 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4804 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4805 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4806 *the ASSERT in WDA_Stop during module unload.*/
4807 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4808 {
4809 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004810 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004811 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004812 else
4813 {
4814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004815 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004816 status = WDA_IGNORE_SET_LINK_STATE;
4817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004818 }
4819 break;
4820 }
4821
4822 return status;
4823}
Jeff Johnson295189b2012-06-20 16:38:30 -07004824/*
4825 * FUNCTION: WDA_SetLinkStateCallback
4826 * call back function for set link state from WDI
4827 */
4828void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4829{
4830 tWDA_CbContext *pWDA;
4831 tLinkStateParams *linkStateParams;
4832 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004834 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004835 if(NULL == pWdaParams)
4836 {
4837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004838 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004839 VOS_ASSERT(0) ;
4840 return ;
4841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004844 /*
4845 * In STA mode start the BA activity check timer after association
4846 * and in AP mode start BA activity check timer after BSS start */
4847 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4848 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004849 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4850 ((status == WDI_STATUS_SUCCESS) &&
4851 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 {
4853 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 /*
4857 * No respone required for WDA_SET_LINK_STATE so free the request
4858 * param here
4859 */
4860 if( pWdaParams != NULL )
4861 {
4862 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4863 {
4864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4865 }
4866 vos_mem_free(pWdaParams);
4867 }
4868 return ;
4869}
Jeff Johnson295189b2012-06-20 16:38:30 -07004870/*
4871 * FUNCTION: WDA_ProcessSetLinkState
4872 * Request to WDI to set the link status.
4873 */
4874VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4875 tLinkStateParams *linkStateParams)
4876{
4877 WDI_Status status = WDI_STATUS_SUCCESS ;
4878 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4879 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4880 sizeof(WDI_SetLinkReqParamsType)) ;
4881 tWDA_ReqParams *pWdaParams ;
4882 tpAniSirGlobal pMac;
4883 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4884
4885 if(NULL == pMac)
4886 {
4887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004888 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004889 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004890 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 return VOS_STATUS_E_FAILURE;
4892 }
4893
4894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004895 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 if(NULL == wdiSetLinkStateParam)
4897 {
4898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004899 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 VOS_ASSERT(0);
4901 return VOS_STATUS_E_NOMEM;
4902 }
4903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4904 if(NULL == pWdaParams)
4905 {
4906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 VOS_ASSERT(0);
4909 vos_mem_free(wdiSetLinkStateParam);
4910 return VOS_STATUS_E_NOMEM;
4911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 if(WDA_IGNORE_SET_LINK_STATE ==
4913 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4914 {
4915 status = WDI_STATUS_E_FAILURE;
4916 }
4917 else
4918 {
4919 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4920 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4922 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4924 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 pWdaParams->pWdaContext = pWDA;
4926 /* Store remove key pointer, as this will be used for response */
4927 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 /* store Params pass it to WDI */
4929 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4930 /* Stop Timer only other than GO role and concurrent session */
4931 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07004932 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004933 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4934 {
4935 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004937 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4938 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 if(IS_WDI_STATUS_FAILURE(status))
4940 {
4941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4942 "Failure in set link state Req WDI API, free all the memory " );
4943 }
4944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 if(IS_WDI_STATUS_FAILURE(status))
4946 {
4947 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004948 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 vos_mem_free(pWdaParams);
4950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 return CONVERT_WDI2VOS_STATUS(status) ;
4952}
Jeff Johnson295189b2012-06-20 16:38:30 -07004953/*
4954 * FUNCTION: WDA_GetStatsReqParamsCallback
4955 * send the response to PE with Stats received from WDI
4956 */
4957void WDA_GetStatsReqParamsCallback(
4958 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4959 void* pUserData)
4960{
4961 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4962 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4963
4964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004965 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 pGetPEStatsRspParams =
4967 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4968 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4969
4970 if(NULL == pGetPEStatsRspParams)
4971 {
4972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004973 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004974 VOS_ASSERT(0);
4975 return;
4976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4978 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4979 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4980 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004981
4982 //Fill the Session Id Properly in PE
4983 pGetPEStatsRspParams->sessionId = 0;
4984 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004985 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004986 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4987 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 vos_mem_copy( pGetPEStatsRspParams + 1,
4989 wdiGetStatsRsp + 1,
4990 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004991 /* send response to UMAC*/
4992 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4993
4994 return;
4995}
4996
Jeff Johnson295189b2012-06-20 16:38:30 -07004997/*
4998 * FUNCTION: WDA_ProcessGetStatsReq
4999 * Request to WDI to get the statistics
5000 */
5001VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5002 tAniGetPEStatsReq *pGetStatsParams)
5003{
5004 WDI_Status status = WDI_STATUS_SUCCESS ;
5005 WDI_GetStatsReqParamsType wdiGetStatsParam;
5006 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005008 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5010 pGetStatsParams->staId;
5011 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5012 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 status = WDI_GetStatsReq(&wdiGetStatsParam,
5015 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 if(IS_WDI_STATUS_FAILURE(status))
5017 {
5018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5019 "Failure in Get Stats Req WDI API, free all the memory " );
5020 pGetPEStatsRspParams =
5021 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5022 if(NULL == pGetPEStatsRspParams)
5023 {
5024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005027 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005028 return VOS_STATUS_E_NOMEM;
5029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5031 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5032 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5033 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5034 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5035 (void *)pGetPEStatsRspParams, 0) ;
5036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005037 /* Free the request message */
5038 vos_mem_free(pGetStatsParams);
5039 return CONVERT_WDI2VOS_STATUS(status);
5040}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005041
5042#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5043/*
5044 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5045 * send the response to PE with roam Rssi received from WDI
5046 */
5047void WDA_GetRoamRssiReqParamsCallback(
5048 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5049 void* pUserData)
5050{
5051 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5052 tWDA_CbContext *pWDA = NULL;
5053 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5054 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5056 "<------ %s " ,__func__);
5057 if(NULL == pWdaParams)
5058 {
5059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5060 "%s: pWdaParams received NULL", __func__);
5061 VOS_ASSERT(0) ;
5062 return ;
5063 }
5064 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5065 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5066
5067 if(NULL == pGetRoamRssiReqParams)
5068 {
5069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5070 "%s: pGetRoamRssiReqParams received NULL", __func__);
5071 VOS_ASSERT(0);
5072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5073 vos_mem_free(pWdaParams);
5074 return ;
5075 }
5076 pGetRoamRssiRspParams =
5077 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5078
5079 if(NULL == pGetRoamRssiRspParams)
5080 {
5081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5082 "%s: VOS MEM Alloc Failure", __func__);
5083 VOS_ASSERT(0);
5084 return;
5085 }
5086 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5087 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005088 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005089 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5090 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5091
5092 /* Assign get roam rssi req (backup) in to the response */
5093 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5094
5095 /* free WDI command buffer */
5096 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5097 vos_mem_free(pWdaParams) ;
5098
5099 /* send response to UMAC*/
5100 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5101
5102 return;
5103}
5104
5105
5106
5107/*
5108 * FUNCTION: WDA_ProcessGetRoamRssiReq
5109 * Request to WDI to get the statistics
5110 */
5111VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5112 tAniGetRssiReq *pGetRoamRssiParams)
5113{
5114 WDI_Status status = WDI_STATUS_SUCCESS ;
5115 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5116 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5117 tWDA_ReqParams *pWdaParams = NULL;
5118
5119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5120 "------> %s " ,__func__);
5121 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5122 pGetRoamRssiParams->staId;
5123 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5124
5125 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5126 if(NULL == pWdaParams)
5127 {
5128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5129 "%s: VOS MEM Alloc Failure", __func__);
5130 VOS_ASSERT(0);
5131 return VOS_STATUS_E_NOMEM;
5132 }
5133
5134 /* Store Init Req pointer, as this will be used for response */
5135 pWdaParams->pWdaContext = pWDA;
5136
5137 /* Take Get roam Rssi req backup as it stores the callback to be called after
5138 receiving the response */
5139 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5140 pWdaParams->wdaWdiApiMsgParam = NULL;
5141
5142 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5143 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5144 if(IS_WDI_STATUS_FAILURE(status))
5145 {
5146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5147 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5148 pGetRoamRssiRspParams =
5149 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5150 if(NULL == pGetRoamRssiRspParams)
5151 {
5152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5153 "%s: VOS MEM Alloc Failure", __func__);
5154 VOS_ASSERT(0);
5155 vos_mem_free(pGetRoamRssiParams);
5156 vos_mem_free(pWdaParams);
5157 return VOS_STATUS_E_NOMEM;
5158 }
5159 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5160 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5161 pGetRoamRssiRspParams->rssi = 0;
5162 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5163 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5164 (void *)pGetRoamRssiRspParams, 0) ;
5165 }
5166 return CONVERT_WDI2VOS_STATUS(status);
5167}
5168#endif
5169
5170
Jeff Johnson295189b2012-06-20 16:38:30 -07005171/*
5172 * FUNCTION: WDA_UpdateEDCAParamCallback
5173 * call back function for Update EDCA params from WDI
5174 */
5175void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5176{
5177 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5178 tEdcaParams *pEdcaParams;
5179
5180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005181 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 if(NULL == pWdaParams)
5183 {
5184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005185 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005186 VOS_ASSERT(0) ;
5187 return ;
5188 }
5189 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5191 vos_mem_free(pWdaParams);
5192 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005193 return ;
5194}
Jeff Johnson295189b2012-06-20 16:38:30 -07005195/*
5196 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5197 * Request to WDI to Update the EDCA params.
5198 */
5199VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5200 tEdcaParams *pEdcaParams)
5201{
5202 WDI_Status status = WDI_STATUS_SUCCESS ;
5203 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5204 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5205 sizeof(WDI_UpdateEDCAParamsType)) ;
5206 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005208 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 if(NULL == wdiEdcaParam)
5210 {
5211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005212 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005213 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005214 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 return VOS_STATUS_E_NOMEM;
5216 }
5217 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5218 if(NULL == pWdaParams)
5219 {
5220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 VOS_ASSERT(0);
5223 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005224 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005225 return VOS_STATUS_E_NOMEM;
5226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005228 /*
5229 Since firmware is not using highperformance flag, we have removed
5230 this flag from wdiEDCAInfo structure to match sizeof the structure
5231 between host and firmware.In future if we are planning to use
5232 highperformance flag then Please define this flag in wdiEDCAInfo
5233 structure, update it here and send it to firmware. i.e.
5234 Following is the original line which we removed as part of the fix
5235 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5236 pEdcaParams->highPerformance;
5237 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5239 &pEdcaParams->acbe);
5240 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5241 &pEdcaParams->acbk);
5242 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5243 &pEdcaParams->acvi);
5244 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5245 &pEdcaParams->acvo);
5246 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 pWdaParams->pWdaContext = pWDA;
5248 /* Store remove key pointer, as this will be used for response */
5249 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005250 /* store Params pass it to WDI */
5251 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5253 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 if(IS_WDI_STATUS_FAILURE(status))
5255 {
5256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5257 "Failure in Update EDCA Params WDI API, free all the memory " );
5258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5259 vos_mem_free(pWdaParams);
5260 vos_mem_free(pEdcaParams);
5261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 return CONVERT_WDI2VOS_STATUS(status) ;
5263}
Jeff Johnson295189b2012-06-20 16:38:30 -07005264/*
5265 * FUNCTION: WDA_AddBAReqCallback
5266 * send ADD BA RSP back to PE
5267 */
5268void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5269 void* pUserData)
5270{
5271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5272 tWDA_CbContext *pWDA;
5273 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005275 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005276 if(NULL == pWdaParams)
5277 {
5278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005279 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005280 VOS_ASSERT(0) ;
5281 return ;
5282 }
5283 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5284 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5286 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005287 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005288 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005289 return ;
5290}
5291
Jeff Johnson295189b2012-06-20 16:38:30 -07005292/*
5293 * FUNCTION: WDA_ProcessAddBAReq
5294 * Request to WDI to Update the ADDBA REQ params.
5295 */
5296VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5297 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5298{
Jeff Johnson43971f52012-07-17 12:26:56 -07005299 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005300 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5301 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5302 sizeof(WDI_AddBAReqParamsType)) ;
5303 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 if(NULL == wdiAddBAReqParam)
5307 {
5308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 VOS_ASSERT(0);
5311 return VOS_STATUS_E_NOMEM;
5312 }
5313 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5314 if(NULL == pWdaParams)
5315 {
5316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 VOS_ASSERT(0);
5319 vos_mem_free(wdiAddBAReqParam);
5320 return VOS_STATUS_E_NOMEM;
5321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 do
5323 {
5324 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 wdiAddBaInfo->ucSTAIdx = staIdx ;
5326 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5327 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 } while(0) ;
5329 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005330 pWdaParams->pWdaContext = pWDA;
5331 /* store Params pass it to WDI */
5332 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5333 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005334 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5335 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005336
Jeff Johnson43971f52012-07-17 12:26:56 -07005337 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005338 {
5339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005340 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5341 status = CONVERT_WDI2VOS_STATUS(wstatus);
5342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 vos_mem_free(pWdaParams);
5344 pAddBAReqParams->status = eSIR_FAILURE;
5345 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5346 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005347 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005348}
Jeff Johnson295189b2012-06-20 16:38:30 -07005349/*
5350 * FUNCTION: WDA_AddBASessionReqCallback
5351 * send ADD BA SESSION RSP back to PE/(or TL)
5352 */
5353void WDA_AddBASessionReqCallback(
5354 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5355{
5356 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5357 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5358 tWDA_CbContext *pWDA;
5359 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005361 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 if(NULL == pWdaParams)
5363 {
5364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005365 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005366 VOS_ASSERT(0) ;
5367 return ;
5368 }
5369 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5370 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 if( NULL == pAddBAReqParams )
5372 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005374 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005375 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5377 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005378 return ;
5379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5381 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005382 /*
5383 * if WDA in update TL state, update TL with BA session parama and send
5384 * another request to HAL(/WDI) (ADD_BA_REQ)
5385 */
5386
5387 if((VOS_STATUS_SUCCESS ==
5388 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5389 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5390 {
5391 /* Update TL with BA info received from HAL/WDI */
5392 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5393 wdiAddBaSession->usBaSessionID,
5394 wdiAddBaSession->ucSTAIdx,
5395 wdiAddBaSession->ucBaTID,
5396 wdiAddBaSession->ucBaBufferSize,
5397 wdiAddBaSession->ucWinSize,
5398 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5400 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5401 }
5402 else
5403 {
5404 pAddBAReqParams->status =
5405 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5406
5407 /* Setting Flag to indicate that Set BA is success */
5408 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5409 {
5410 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5411 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5412 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005416 /*Reset the WDA state to READY */
5417 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005418 return ;
5419}
5420
Jeff Johnson295189b2012-06-20 16:38:30 -07005421/*
5422 * FUNCTION: WDA_ProcessAddBASessionReq
5423 * Request to WDI to Update the ADDBA REQ params.
5424 */
5425VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5426 tAddBAParams *pAddBAReqParams)
5427{
5428 WDI_Status status = WDI_STATUS_SUCCESS ;
5429 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5430 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5431 sizeof(WDI_AddBASessionReqParamsType)) ;
5432 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005433 WLANTL_STAStateType tlSTAState = 0;
5434
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005436 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 if(NULL == wdiAddBASessionReqParam)
5438 {
5439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 VOS_ASSERT(0);
5442 return VOS_STATUS_E_NOMEM;
5443 }
5444 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5445 if(NULL == pWdaParams)
5446 {
5447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 VOS_ASSERT(0);
5450 vos_mem_free(wdiAddBASessionReqParam);
5451 return VOS_STATUS_E_NOMEM;
5452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 /*
5454 * Populate ADD BA parameters and pass these paarmeters to WDI.
5455 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5456 * the state to track if these is BA recipient case or BA initiator
5457 * case.
5458 */
5459 do
5460 {
5461 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5462 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5463 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5464 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5465 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5466 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5467 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005468 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5470 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5471 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5472 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5473 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 /* check the BA direction and update state accordingly */
5475 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5476 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5477 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5478
5479 }while(0) ;
5480 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005481 pWdaParams->pWdaContext = pWDA;
5482 /* Store ADD BA pointer, as this will be used for response */
5483 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5484 /* store Params pass it to WDI */
5485 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005486
5487 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5488 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5489 */
5490 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5491 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5492 {
5493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5494 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5495 status = WDI_STATUS_E_NOT_ALLOWED;
5496 pAddBAReqParams->status =
5497 CONVERT_WDI2SIR_STATUS(status) ;
5498 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5499 /*Reset the WDA state to READY */
5500 pWDA->wdaState = WDA_READY_STATE;
5501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5502 vos_mem_free(pWdaParams);
5503
5504 return CONVERT_WDI2VOS_STATUS(status) ;
5505 }
5506
Jeff Johnson295189b2012-06-20 16:38:30 -07005507 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5508 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 if(IS_WDI_STATUS_FAILURE(status))
5510 {
5511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005512 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5514 "Send ADD BA failure response to PE\n");
5515 pAddBAReqParams->status =
5516 CONVERT_WDI2SIR_STATUS(status) ;
5517 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005518 /*Reset the WDA state to READY */
5519 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 vos_mem_free(pWdaParams);
5522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524}
Jeff Johnson295189b2012-06-20 16:38:30 -07005525/*
5526 * FUNCTION: WDA_DelBANotifyTL
5527 * send DEL BA IND to TL
5528 */
5529void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5530 tDelBAParams *pDelBAReqParams)
5531{
5532 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5533 //tSirMsgQ msg;
5534 vos_msg_t vosMsg;
5535 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 if(NULL == pDelBAInd)
5537 {
5538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005539 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 VOS_ASSERT(0) ;
5541 return;
5542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5544 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5545 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5546 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005547
Jeff Johnson295189b2012-06-20 16:38:30 -07005548
5549 vosMsg.type = WDA_DELETEBA_IND;
5550 vosMsg.bodyptr = pDelBAInd;
5551 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5552 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5553 {
5554 vosStatus = VOS_STATUS_E_BADMSG;
5555 }
5556}
Jeff Johnson295189b2012-06-20 16:38:30 -07005557/*
5558 * FUNCTION: WDA_DelBAReqCallback
5559 * send DEL BA RSP back to PE
5560 */
5561void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5562{
5563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5564 tWDA_CbContext *pWDA;
5565 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005567 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 if(NULL == pWdaParams)
5569 {
5570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005571 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 VOS_ASSERT(0) ;
5573 return ;
5574 }
5575 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5576 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005577 /* Notify TL about DEL BA in case of recipinet */
5578 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5579 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5580 {
5581 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 /*
5584 * No respone required for WDA_DELBA_IND so just free the request
5585 * param here
5586 */
5587 vos_mem_free(pDelBAReqParams);
5588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5589 vos_mem_free(pWdaParams);
5590 return ;
5591}
5592
Jeff Johnson295189b2012-06-20 16:38:30 -07005593/*
5594 * FUNCTION: WDA_ProcessDelBAReq
5595 * Request to WDI to Update the DELBA REQ params.
5596 */
5597VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5598 tDelBAParams *pDelBAReqParams)
5599{
5600 WDI_Status status = WDI_STATUS_SUCCESS ;
5601 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5602 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5603 sizeof(WDI_DelBAReqParamsType)) ;
5604 tWDA_ReqParams *pWdaParams ;
5605 tANI_U16 staIdx = 0;
5606 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005608 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005609 if(NULL == wdiDelBAReqParam)
5610 {
5611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005612 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 VOS_ASSERT(0);
5614 return VOS_STATUS_E_NOMEM;
5615 }
5616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5617 if(NULL == pWdaParams)
5618 {
5619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005621 VOS_ASSERT(0);
5622 vos_mem_free(wdiDelBAReqParam);
5623 return VOS_STATUS_E_NOMEM;
5624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005625 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5626 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5627 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5628 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 pWdaParams->pWdaContext = pWDA;
5630 /* Store DEL BA pointer, as this will be used for response */
5631 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 /* store Params pass it to WDI */
5633 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5635 * maintained in WDA, so that WDA can retry for another BA session
5636 */
5637 staIdx = pDelBAReqParams->staIdx;
5638 tid = pDelBAReqParams->baTID;
5639 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005640 status = WDI_DelBAReq(wdiDelBAReqParam,
5641 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005642 if(IS_WDI_STATUS_FAILURE(status))
5643 {
5644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5645 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5647 vos_mem_free(pWdaParams->wdaMsgParam);
5648 vos_mem_free(pWdaParams);
5649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005650 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005651}
Jeff Johnson295189b2012-06-20 16:38:30 -07005652/*
5653 * FUNCTION: WDA_AddTSReqCallback
5654 * send ADD TS RSP back to PE
5655 */
5656void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5657{
5658 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5659 tWDA_CbContext *pWDA;
5660 tAddTsParams *pAddTsReqParams;
5661
5662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005663 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005664 if(NULL == pWdaParams)
5665 {
5666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005667 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005668 VOS_ASSERT(0) ;
5669 return ;
5670 }
5671 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5672 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5674 vos_mem_free(pWdaParams);
5675
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005676 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 return ;
5679}
5680
Jeff Johnson295189b2012-06-20 16:38:30 -07005681/*
5682 * FUNCTION: WDA_ProcessAddTSReq
5683 * Request to WDI to Update the ADD TS REQ params.
5684 */
5685VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5686 tAddTsParams *pAddTsReqParams)
5687{
5688 WDI_Status status = WDI_STATUS_SUCCESS ;
5689 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5690 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5691 sizeof(WDI_AddTSReqParamsType)) ;
5692 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005694 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 if(NULL == wdiAddTSReqParam)
5696 {
5697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005698 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 VOS_ASSERT(0);
5700 return VOS_STATUS_E_NOMEM;
5701 }
5702 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5703 if(NULL == pWdaParams)
5704 {
5705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005706 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005707 VOS_ASSERT(0);
5708 vos_mem_free(wdiAddTSReqParam);
5709 return VOS_STATUS_E_NOMEM;
5710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005711 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5712 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 //TS IE
5714 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5715 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5716 pAddTsReqParams->tspec.length;
5717
5718 //TS IE : TS INFO : TRAFFIC
5719 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5720 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5721 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5722 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5723 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5724 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5725 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5726 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5727 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5728 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5729 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5730 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5731 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5732 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5733 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5734 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5735
5736 //TS IE : TS INFO : SCHEDULE
5737 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5738 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5739 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5740 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005741 //TS IE
5742 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5743 pAddTsReqParams->tspec.nomMsduSz;
5744 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5745 pAddTsReqParams->tspec.maxMsduSz;
5746 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5747 pAddTsReqParams->tspec.minSvcInterval;
5748 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5749 pAddTsReqParams->tspec.maxSvcInterval;
5750 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5751 pAddTsReqParams->tspec.inactInterval;
5752 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5753 pAddTsReqParams->tspec.suspendInterval;
5754 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5755 pAddTsReqParams->tspec.svcStartTime;
5756 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5757 pAddTsReqParams->tspec.minDataRate;
5758 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5759 pAddTsReqParams->tspec.meanDataRate;
5760 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5761 pAddTsReqParams->tspec.peakDataRate;
5762 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5763 pAddTsReqParams->tspec.maxBurstSz;
5764 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5765 pAddTsReqParams->tspec.delayBound;
5766 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5767 pAddTsReqParams->tspec.minPhyRate;
5768 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5769 pAddTsReqParams->tspec.surplusBw;
5770 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5771 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 /* TODO: tAddTsParams doesn't have the following fields */
5773#if 0
5774 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5775 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5776 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5777 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5778#endif
5779 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5780
5781 pWdaParams->pWdaContext = pWDA;
5782 /* Store ADD TS pointer, as this will be used for response */
5783 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005784 /* store Params pass it to WDI */
5785 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005786 status = WDI_AddTSReq(wdiAddTSReqParam,
5787 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005788 if(IS_WDI_STATUS_FAILURE(status))
5789 {
5790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5791 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5793 vos_mem_free(pWdaParams);
5794 pAddTsReqParams->status = eSIR_FAILURE ;
5795 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005798}
5799
Jeff Johnson295189b2012-06-20 16:38:30 -07005800/*
5801 * FUNCTION: WDA_DelTSReqCallback
5802 * send DEL TS RSP back to PE
5803 */
5804void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5805{
5806 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005808 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5810 vos_mem_free(pWdaParams->wdaMsgParam) ;
5811 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005812 /*
5813 * No respone required for WDA_DEL_TS_REQ so just free the request
5814 * param here
5815 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005816 return ;
5817}
5818
Jeff Johnson295189b2012-06-20 16:38:30 -07005819/*
5820 * FUNCTION: WDA_ProcessDelTSReq
5821 * Request to WDI to Update the DELTS REQ params.
5822 */
5823VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5824 tDelTsParams *pDelTSReqParams)
5825{
5826 WDI_Status status = WDI_STATUS_SUCCESS ;
5827 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5828 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5829 sizeof(WDI_DelTSReqParamsType)) ;
5830 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005832 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005833 if(NULL == wdiDelTSReqParam)
5834 {
5835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005837 VOS_ASSERT(0);
5838 return VOS_STATUS_E_NOMEM;
5839 }
5840 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5841 if(NULL == pWdaParams)
5842 {
5843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005845 VOS_ASSERT(0);
5846 vos_mem_free(wdiDelTSReqParam);
5847 return VOS_STATUS_E_NOMEM;
5848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005849 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5850 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5851 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5852 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5853 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 pWdaParams->pWdaContext = pWDA;
5855 /* Store DEL TS pointer, as this will be used for response */
5856 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 /* store Params pass it to WDI */
5858 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005859 status = WDI_DelTSReq(wdiDelTSReqParam,
5860 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 if(IS_WDI_STATUS_FAILURE(status))
5862 {
5863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5864 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5866 vos_mem_free(pWdaParams->wdaMsgParam);
5867 vos_mem_free(pWdaParams);
5868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005870}
Jeff Johnson295189b2012-06-20 16:38:30 -07005871/*
5872 * FUNCTION: WDA_UpdateBeaconParamsCallback
5873 * Free the memory. No need to send any response to PE in this case
5874 */
5875void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5876{
5877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005879 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 if(NULL == pWdaParams)
5881 {
5882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005883 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005884 VOS_ASSERT(0) ;
5885 return ;
5886 }
5887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5888 vos_mem_free(pWdaParams->wdaMsgParam) ;
5889 vos_mem_free(pWdaParams);
5890 /*
5891 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5892 * param here
5893 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005894 return ;
5895}
Jeff Johnson295189b2012-06-20 16:38:30 -07005896/*
5897 * FUNCTION: WDA_ProcessUpdateBeaconParams
5898 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5899 */
5900VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5901 tUpdateBeaconParams *pUpdateBeaconParams)
5902{
5903 WDI_Status status = WDI_STATUS_SUCCESS ;
5904 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5905 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5906 sizeof(WDI_UpdateBeaconParamsType)) ;
5907 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005909 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005910 if(NULL == wdiUpdateBeaconParams)
5911 {
5912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 VOS_ASSERT(0);
5915 return VOS_STATUS_E_NOMEM;
5916 }
5917 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5918 if(NULL == pWdaParams)
5919 {
5920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 VOS_ASSERT(0);
5923 vos_mem_free(wdiUpdateBeaconParams);
5924 return VOS_STATUS_E_NOMEM;
5925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5927 pUpdateBeaconParams->bssIdx;
5928 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5929 pUpdateBeaconParams->fShortPreamble;
5930 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5931 pUpdateBeaconParams->fShortSlotTime;
5932 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5933 pUpdateBeaconParams->beaconInterval;
5934 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5935 pUpdateBeaconParams->llaCoexist;
5936 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5937 pUpdateBeaconParams->llbCoexist;
5938 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5939 pUpdateBeaconParams->llgCoexist;
5940 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5941 pUpdateBeaconParams->ht20MhzCoexist;
5942 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5943 pUpdateBeaconParams->llnNonGFCoexist;
5944 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5945 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5946 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5947 pUpdateBeaconParams->fRIFSMode;
5948 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5949 pUpdateBeaconParams->paramChangeBitmap;
5950 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5951
5952 pWdaParams->pWdaContext = pWDA;
5953 /* Store UpdateBeacon Req pointer, as this will be used for response */
5954 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 /* store Params pass it to WDI */
5956 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5958 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5959 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 if(IS_WDI_STATUS_FAILURE(status))
5961 {
5962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5963 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5965 vos_mem_free(pWdaParams->wdaMsgParam);
5966 vos_mem_free(pWdaParams);
5967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005969}
Jeff Johnson295189b2012-06-20 16:38:30 -07005970#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005971/*
5972 * FUNCTION: WDA_TSMStatsReqCallback
5973 * send TSM Stats RSP back to PE
5974 */
5975void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5976{
5977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5978 tWDA_CbContext *pWDA = NULL;
5979 tTSMStats *pTsmRspParams = NULL;
5980
5981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005982 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005983 if(NULL == pWdaParams)
5984 {
5985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005986 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005987 VOS_ASSERT(0) ;
5988 return ;
5989 }
5990 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5991 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 if( NULL == pTsmRspParams )
5993 {
5994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005995 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005996 VOS_ASSERT( 0 );
5997 return ;
5998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6000 vos_mem_free(pWdaParams);
6001
6002 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6003 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6004 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6005 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6006 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6007 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6008 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6009 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6010 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6011 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 return ;
6014}
6015
6016
Jeff Johnson295189b2012-06-20 16:38:30 -07006017/*
6018 * FUNCTION: WDA_ProcessTsmStatsReq
6019 * Request to WDI to get the TSM Stats params.
6020 */
6021VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
6022 tTSMStats *pTsmStats)
6023{
6024 WDI_Status status = WDI_STATUS_SUCCESS ;
6025 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
6026 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006028 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006029 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6030 sizeof(WDI_TSMStatsReqParamsType));
6031 if(NULL == wdiTSMReqParam)
6032 {
6033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 VOS_ASSERT(0);
6036 return VOS_STATUS_E_NOMEM;
6037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6039 if(NULL == pWdaParams)
6040 {
6041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006042 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 VOS_ASSERT(0);
6044 vos_mem_free(wdiTSMReqParam);
6045 return VOS_STATUS_E_NOMEM;
6046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6048 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6049 pTsmStats->bssId,
6050 sizeof(wpt_macAddr));
6051 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6052
6053 pWdaParams->pWdaContext = pWDA;
6054 /* Store TSM Stats pointer, as this will be used for response */
6055 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 /* store Params pass it to WDI */
6057 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 status = WDI_TSMStatsReq(wdiTSMReqParam,
6059 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 if(IS_WDI_STATUS_FAILURE(status))
6061 {
6062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6063 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
6064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6065 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08006066 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 return CONVERT_WDI2VOS_STATUS(status) ;
6069}
6070#endif
6071/*
6072 * FUNCTION: WDA_SendBeaconParamsCallback
6073 * No need to send any response to PE in this case
6074 */
6075void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6076{
6077
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006079 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 return ;
6081}
Jeff Johnson295189b2012-06-20 16:38:30 -07006082/*
6083 * FUNCTION: WDA_ProcessSendBeacon
6084 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6085 * start beacon trasmission
6086 */
6087VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6088 tSendbeaconParams *pSendbeaconParams)
6089{
6090 WDI_Status status = WDI_STATUS_SUCCESS ;
6091 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006093 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6095 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6096 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6097 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6099 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306100 /* p2pIeOffset should be atleast greater than timIeOffset */
6101 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6102 (pSendbeaconParams->p2pIeOffset <
6103 pSendbeaconParams->timIeOffset))
6104 {
6105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6106 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6107 VOS_ASSERT( 0 );
6108 return WDI_STATUS_E_FAILURE;
6109 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006110 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6111 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 /* Copy the beacon template to local buffer */
6113 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6114 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6115 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6116
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6118 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 if(IS_WDI_STATUS_FAILURE(status))
6120 {
6121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6122 "Failure in SEND BEACON REQ Params WDI API" );
6123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 vos_mem_free(pSendbeaconParams);
6125 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006126}
Jeff Johnson295189b2012-06-20 16:38:30 -07006127/*
6128 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6129 * No need to send any response to PE in this case
6130 */
6131void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6132{
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006134 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 return ;
6136}
6137
Jeff Johnson295189b2012-06-20 16:38:30 -07006138/*
6139 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6140 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6141 * send probe response
6142 */
6143VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6144 tSendProbeRespParams *pSendProbeRspParams)
6145{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006146 WDI_Status status = WDI_STATUS_SUCCESS;
6147 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6148 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006150 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006151
6152 if (!wdiSendProbeRspParam)
6153 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6154
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006156 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006157 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006158 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 /* Copy the Probe Response template to local buffer */
6161 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006162 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 pSendProbeRspParams->pProbeRespTemplate,
6164 pSendProbeRspParams->probeRespTemplateLen);
6165 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006166 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6168 WDI_PROBE_REQ_BITMAP_IE_LEN);
6169
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006170 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006171
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006172 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006173 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 if(IS_WDI_STATUS_FAILURE(status))
6175 {
6176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6177 "Failure in SEND Probe RSP Params WDI API" );
6178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006179 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006180 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006181 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006182}
Jeff Johnson295189b2012-06-20 16:38:30 -07006183#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6184/*
6185 * FUNCTION: WDA_SetMaxTxPowerCallBack
6186 * send the response to PE with power value received from WDI
6187 */
6188void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6189 void* pUserData)
6190{
6191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6192 tWDA_CbContext *pWDA = NULL;
6193 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6194
6195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006196 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006197 if(NULL == pWdaParams)
6198 {
6199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006200 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006201 VOS_ASSERT(0) ;
6202 return ;
6203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6205 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006206 if( NULL == pMaxTxPowerParams )
6207 {
6208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006209 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006210 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6212 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 return ;
6214 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006215
Jeff Johnson295189b2012-06-20 16:38:30 -07006216
6217 /*need to free memory for the pointers used in the
6218 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6220 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006222
Jeff Johnson295189b2012-06-20 16:38:30 -07006223
6224 /* send response to UMAC*/
6225 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6226
6227 return;
6228}
Jeff Johnson295189b2012-06-20 16:38:30 -07006229/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006230 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006231 * Request to WDI to send set Max Tx Power Request
6232 */
6233 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6234 tMaxTxPowerParams *MaxTxPowerParams)
6235{
6236 WDI_Status status = WDI_STATUS_SUCCESS;
6237 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6238 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006239
Jeff Johnson295189b2012-06-20 16:38:30 -07006240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006241 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006242
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6244 sizeof(WDI_SetMaxTxPowerParamsType));
6245 if(NULL == wdiSetMaxTxPowerParams)
6246 {
6247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006249 VOS_ASSERT(0);
6250 return VOS_STATUS_E_NOMEM;
6251 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6253 if(NULL == pWdaParams)
6254 {
6255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006256 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 vos_mem_free(wdiSetMaxTxPowerParams);
6258 VOS_ASSERT(0);
6259 return VOS_STATUS_E_NOMEM;
6260 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 /* Copy.Max.Tx.Power Params to WDI structure */
6262 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6263 MaxTxPowerParams->bssId,
6264 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006265 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6266 MaxTxPowerParams->selfStaMacAddr,
6267 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006268 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6269 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 pWdaParams->pWdaContext = pWDA;
6272 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006273 /* store Params pass it to WDI */
6274 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6276 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 if(IS_WDI_STATUS_FAILURE(status))
6278 {
6279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6280 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6282 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006283 /* send response to UMAC*/
6284 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 }
6286 return CONVERT_WDI2VOS_STATUS(status);
6287
6288}
Jeff Johnson295189b2012-06-20 16:38:30 -07006289#endif
schang86c22c42013-03-13 18:41:24 -07006290
6291/*
6292 * FUNCTION: WDA_SetTxPowerCallBack
6293 * send the response to PE with power value received from WDI
6294 */
6295void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6296 void* pUserData)
6297{
6298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6299 tWDA_CbContext *pWDA = NULL;
6300 tSirSetTxPowerReq *pTxPowerParams = NULL;
6301
6302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6303 "<------ %s ", __func__);
6304 if(NULL == pWdaParams)
6305 {
6306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6307 "%s: pWdaParams received NULL", __func__);
6308 VOS_ASSERT(0) ;
6309 return ;
6310 }
6311 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6312 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6313 if(NULL == pTxPowerParams)
6314 {
6315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6316 "%s: pTxPowerParams received NULL " ,__func__);
6317 VOS_ASSERT(0);
6318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6319 vos_mem_free(pWdaParams);
6320 return ;
6321 }
6322
6323 /*need to free memory for the pointers used in the
6324 WDA Process.Set Max Tx Power Req function*/
6325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6326 vos_mem_free(pWdaParams);
6327
6328 /* send response to UMAC*/
6329 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6330 return;
6331}
6332
6333/*
6334 * FUNCTION: WDA_ProcessSetTxPowerReq
6335 * Request to WDI to send set Tx Power Request
6336 */
6337 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6338 tSirSetTxPowerReq *txPowerParams)
6339{
6340 WDI_Status status = WDI_STATUS_SUCCESS;
6341 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6342 tWDA_ReqParams *pWdaParams = NULL;
6343
6344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6345 "------> %s ", __func__);
6346
6347 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6348 sizeof(WDI_SetTxPowerParamsType));
6349 if(NULL == wdiSetTxPowerParams)
6350 {
6351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6352 "%s: VOS MEM Alloc Failure", __func__);
6353 VOS_ASSERT(0);
6354 return VOS_STATUS_E_NOMEM;
6355 }
6356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6357 if(NULL == pWdaParams)
6358 {
6359 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6360 "%s: VOS MEM Alloc Failure", __func__);
6361 vos_mem_free(wdiSetTxPowerParams);
6362 VOS_ASSERT(0);
6363 return VOS_STATUS_E_NOMEM;
6364 }
6365 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6366 txPowerParams->bssIdx;
6367 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6368 txPowerParams->mwPower;
6369 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6370 pWdaParams->pWdaContext = pWDA;
6371 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6372 /* store Params pass it to WDI */
6373 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6374 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6375 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6376 if(IS_WDI_STATUS_FAILURE(status))
6377 {
6378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6379 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6381 vos_mem_free(pWdaParams);
6382 /* send response to UMAC*/
6383 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6384 }
6385 return CONVERT_WDI2VOS_STATUS(status);
6386}
6387
Jeff Johnson295189b2012-06-20 16:38:30 -07006388/*
6389 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6390 * Free the memory. No need to send any response to PE in this case
6391 */
6392void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6393{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6395
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006397 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006398
6399 if(NULL == pWdaParams)
6400 {
6401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006402 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006403 VOS_ASSERT(0) ;
6404 return ;
6405 }
6406
6407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6408 vos_mem_free(pWdaParams->wdaMsgParam) ;
6409 vos_mem_free(pWdaParams);
6410
Jeff Johnson295189b2012-06-20 16:38:30 -07006411 /*
6412 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6413 * so just free the request param here
6414 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 return ;
6416}
6417
Jeff Johnson295189b2012-06-20 16:38:30 -07006418/*
6419 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6420 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6421 */
6422VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6423 tP2pPsParams *pP2pPsConfigParams)
6424{
6425 WDI_Status status = WDI_STATUS_SUCCESS ;
6426 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6427 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6428 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006429 tWDA_ReqParams *pWdaParams = NULL;
6430
Jeff Johnson295189b2012-06-20 16:38:30 -07006431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006432 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 if(NULL == wdiSetP2PGONOAReqParam)
6434 {
6435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006436 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 VOS_ASSERT(0);
6438 return VOS_STATUS_E_NOMEM;
6439 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006440
6441 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6442 if(NULL == pWdaParams)
6443 {
6444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006445 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006446 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006447 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006448 VOS_ASSERT(0);
6449 return VOS_STATUS_E_NOMEM;
6450 }
6451
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6453 pP2pPsConfigParams->opp_ps;
6454 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6455 pP2pPsConfigParams->ctWindow;
6456 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6457 pP2pPsConfigParams->count;
6458 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6459 pP2pPsConfigParams->duration;
6460 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6461 pP2pPsConfigParams->interval;
6462 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6463 pP2pPsConfigParams->single_noa_duration;
6464 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6465 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006466
Jeff Johnson295189b2012-06-20 16:38:30 -07006467 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6468 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006469 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6470
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006472 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6473 pWdaParams->pWdaContext = pWDA;
6474
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006476 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6477
Jeff Johnson295189b2012-06-20 16:38:30 -07006478 if(IS_WDI_STATUS_FAILURE(status))
6479 {
6480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6481 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6483 vos_mem_free(pWdaParams->wdaMsgParam);
6484 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 return CONVERT_WDI2VOS_STATUS(status);
6487
Jeff Johnson295189b2012-06-20 16:38:30 -07006488}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306489
6490#ifdef FEATURE_WLAN_TDLS
6491/*
6492 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6493 * Free the memory. No need to send any response to PE in this case
6494 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306495void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6496 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306497{
6498 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6499 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306500 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306501
6502
6503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6504 "<------ %s " ,__func__);
6505 if(NULL == pWdaParams)
6506 {
6507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6508 "%s: pWdaParams received NULL", __func__);
6509 VOS_ASSERT(0) ;
6510 return ;
6511 }
6512 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6513
6514 if(NULL == pWdaParams)
6515 {
6516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6517 "%s: pWdaParams received NULL", __func__);
6518 VOS_ASSERT(0) ;
6519 return ;
6520 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306521 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6522 if( NULL == pTdlsLinkEstablishParams )
6523 {
6524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6525 "%s: pTdlsLinkEstablishParams "
6526 "received NULL " ,__func__);
6527 VOS_ASSERT(0);
6528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6529 vos_mem_free(pWdaParams);
6530 return ;
6531 }
6532 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6533 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306535 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306536 /* send response to UMAC*/
6537 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6538
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306539 return ;
6540}
6541
6542VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6543 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6544{
6545 WDI_Status status = WDI_STATUS_SUCCESS ;
6546 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6547 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6548 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6549 tWDA_ReqParams *pWdaParams = NULL;
6550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6551 "------> %s " ,__func__);
6552 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6553 {
6554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6555 "%s: VOS MEM Alloc Failure", __func__);
6556 VOS_ASSERT(0);
6557 return VOS_STATUS_E_NOMEM;
6558 }
6559 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6560 if(NULL == pWdaParams)
6561 {
6562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6563 "%s: VOS MEM Alloc Failure", __func__);
6564 vos_mem_free(pTdlsLinkEstablishParams);
6565 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6566 VOS_ASSERT(0);
6567 return VOS_STATUS_E_NOMEM;
6568 }
6569 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306570 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306571 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306572 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306573 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306574 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306575 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306576 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306577 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306578 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306579
6580 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6581 /* Store msg pointer from PE, as this will be used for response */
6582 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6583 /* store Params pass it to WDI */
6584 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6585 pWdaParams->pWdaContext = pWDA;
6586
6587 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6588 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6589 WDA_SetTDLSLinkEstablishReqParamsCallback,
6590 pWdaParams);
6591 if(IS_WDI_STATUS_FAILURE(status))
6592 {
6593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6594 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6596 vos_mem_free(pWdaParams->wdaMsgParam);
6597 vos_mem_free(pWdaParams);
6598 }
6599 return CONVERT_WDI2VOS_STATUS(status);
6600}
6601#endif
6602
6603
Jeff Johnson295189b2012-06-20 16:38:30 -07006604#ifdef WLAN_FEATURE_VOWIFI_11R
6605/*
6606 * FUNCTION: WDA_AggrAddTSReqCallback
6607 * send ADD AGGREGATED TS RSP back to PE
6608 */
6609void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6610{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006611 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6612 tWDA_CbContext *pWDA;
6613 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006614 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006616 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006617 if(NULL == pWdaParams)
6618 {
6619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006620 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006621 VOS_ASSERT(0) ;
6622 return ;
6623 }
6624
6625 pWDA = pWdaParams->pWdaContext;
6626 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006627
6628 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6629 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006630 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006633
6634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6635 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 return ;
6637}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006638/*
6639 * FUNCTION: WDA_ProcessAddTSReq
6640 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6641 */
6642VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6643 tAggrAddTsParams *pAggrAddTsReqParams)
6644{
6645 WDI_Status status = WDI_STATUS_SUCCESS ;
6646 int i;
6647 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006648 tWDA_ReqParams *pWdaParams = NULL;
6649
6650
Jeff Johnson295189b2012-06-20 16:38:30 -07006651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006652 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006653 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6654 sizeof(WDI_AggrAddTSReqParamsType)) ;
6655 if(NULL == wdiAggrAddTSReqParam)
6656 {
6657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 VOS_ASSERT(0);
6660 return VOS_STATUS_E_NOMEM;
6661 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006662
6663
6664 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6665 if(NULL == pWdaParams)
6666 {
6667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006668 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006669 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006670 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006671 VOS_ASSERT(0);
6672 return VOS_STATUS_E_NOMEM;
6673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006674 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6675 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6676 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006677 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6678 {
6679 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6680 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6681 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6683 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6684 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6685 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6686 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6687 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6688 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6689 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6690 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6691 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6692 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6693 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6694 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6695 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6696 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6697 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6699 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006700 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6701 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6702 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6703 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6704 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6705 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6706 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6707 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6708 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6709 pAggrAddTsReqParams->tspec[i].inactInterval;
6710 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6711 pAggrAddTsReqParams->tspec[i].suspendInterval;
6712 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6713 pAggrAddTsReqParams->tspec[i].svcStartTime;
6714 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6715 pAggrAddTsReqParams->tspec[i].minDataRate;
6716 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6717 pAggrAddTsReqParams->tspec[i].meanDataRate;
6718 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6719 pAggrAddTsReqParams->tspec[i].peakDataRate;
6720 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6721 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6722 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6723 pAggrAddTsReqParams->tspec[i].delayBound;
6724 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6725 pAggrAddTsReqParams->tspec[i].minPhyRate;
6726 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6727 pAggrAddTsReqParams->tspec[i].surplusBw;
6728 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6729 pAggrAddTsReqParams->tspec[i].mediumTime;
6730 }
6731
6732 /* TODO: tAggrAddTsParams doesn't have the following fields */
6733#if 0
6734 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6735 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6736 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6737 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6738#endif
6739 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6740
6741 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006742 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006744 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6745
6746 pWdaParams->pWdaContext = pWDA;
6747
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006749 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6750
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 if(IS_WDI_STATUS_FAILURE(status))
6752 {
6753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6754 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6756 vos_mem_free(pWdaParams);
6757
6758 /* send the failure response back to PE*/
6759 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6760 {
6761 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6762 }
6763
6764 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6765 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006767 return CONVERT_WDI2VOS_STATUS(status) ;
6768}
6769#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006770/*
6771 * FUNCTION: WDA_EnterImpsReqCallback
6772 * send Enter IMPS RSP back to PE
6773 */
6774void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6775{
6776 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006778 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006779 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 return ;
6781}
Jeff Johnson295189b2012-06-20 16:38:30 -07006782/*
6783 * FUNCTION: WDA_ProcessEnterImpsReq
6784 * Request to WDI to Enter IMPS power state.
6785 */
6786VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6787{
6788 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006790 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 if(IS_WDI_STATUS_FAILURE(status))
6793 {
6794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6795 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006796 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 return CONVERT_WDI2VOS_STATUS(status) ;
6799}
Jeff Johnson295189b2012-06-20 16:38:30 -07006800/*
6801 * FUNCTION: WDA_ExitImpsReqCallback
6802 * send Exit IMPS RSP back to PE
6803 */
6804void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6805{
6806 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006808 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006809 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 return ;
6811}
Jeff Johnson295189b2012-06-20 16:38:30 -07006812/*
6813 * FUNCTION: WDA_ProcessExitImpsReq
6814 * Request to WDI to Exit IMPS power state.
6815 */
6816VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6817{
6818 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006820 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006822 if(IS_WDI_STATUS_FAILURE(status))
6823 {
6824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6825 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006826 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 return CONVERT_WDI2VOS_STATUS(status) ;
6829}
Jeff Johnson295189b2012-06-20 16:38:30 -07006830/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006831 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 * send Enter BMPS RSP back to PE
6833 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006834void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006835{
6836 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6837 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006838 tEnterBmpsParams *pEnterBmpsRspParams;
6839
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006841 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 if(NULL == pWdaParams)
6843 {
6844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006845 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006846 VOS_ASSERT(0) ;
6847 return ;
6848 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006849
6850 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6851 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6852
6853 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006854 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006855
6856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006858 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6859
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 return ;
6861}
Jeff Johnson295189b2012-06-20 16:38:30 -07006862/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006863 * FUNCTION: WDA_EnterBmpsReqCallback
6864 * Free memory and send Enter BMPS RSP back to PE.
6865 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
6866 */
6867void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6868{
6869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6870 tWDA_CbContext *pWDA;
6871 tEnterBmpsParams *pEnterBmpsRspParams;
6872
6873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6874 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6875
6876 if(NULL == pWdaParams)
6877 {
6878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6879 "%s: pWdaParams received NULL", __func__);
6880 VOS_ASSERT(0);
6881 return;
6882 }
6883
6884 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6885 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6886 pEnterBmpsRspParams->status = wdiStatus;
6887
6888 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6889 {
6890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6891 vos_mem_free(pWdaParams);
6892 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
6893 }
6894
6895 return;
6896}
6897/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 * FUNCTION: WDA_ProcessEnterBmpsReq
6899 * Request to WDI to Enter BMPS power state.
6900 */
6901VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6902 tEnterBmpsParams *pEnterBmpsReqParams)
6903{
6904 WDI_Status status = WDI_STATUS_SUCCESS;
6905 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6906 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006908 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006909 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6910 {
6911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006912 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 VOS_ASSERT(0);
6914 return VOS_STATUS_E_FAILURE;
6915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006916 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6917 if (NULL == wdiEnterBmpsReqParams)
6918 {
6919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006921 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006922 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6923 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 return VOS_STATUS_E_NOMEM;
6925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6927 if (NULL == pWdaParams)
6928 {
6929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 VOS_ASSERT(0);
6932 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006933 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6934 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 return VOS_STATUS_E_NOMEM;
6936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6938 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6939 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6940 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006941 // For CCX and 11R Roaming
6942 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6943 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6944 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07006945 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
6946 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006947
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 /* Store param pointer as passed in by caller */
6949 /* store Params pass it to WDI */
6950 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006951 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006953 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006954 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 if (IS_WDI_STATUS_FAILURE(status))
6956 {
6957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6958 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006960 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006962 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 return CONVERT_WDI2VOS_STATUS(status);
6965}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006966
6967
6968static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6969 WDI_Status wdiStatus,
6970 tExitBmpsParams *pExitBmpsReqParams)
6971{
6972 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6973
6974 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6975}
6976
6977
Jeff Johnson295189b2012-06-20 16:38:30 -07006978/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006979 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 * send Exit BMPS RSP back to PE
6981 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006982void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006983{
6984 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6985 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006986 tExitBmpsParams *pExitBmpsRspParams;
6987
Jeff Johnson295189b2012-06-20 16:38:30 -07006988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006989 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 if(NULL == pWdaParams)
6991 {
6992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006993 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 VOS_ASSERT(0) ;
6995 return ;
6996 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006997
6998 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6999 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7000
7001 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007002 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007003
Jeff Johnson295189b2012-06-20 16:38:30 -07007004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7005 vos_mem_free(pWdaParams) ;
7006
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007007 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 return ;
7009}
Jeff Johnson295189b2012-06-20 16:38:30 -07007010/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007011 * FUNCTION: WDA_ExitBmpsReqCallback
7012 * Free memory and send Exit BMPS RSP back to PE.
7013 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7014 */
7015void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7016{
7017 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7018 tWDA_CbContext *pWDA;
7019 tExitBmpsParams *pExitBmpsRspParams;
7020
7021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7022 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7023
7024 if(NULL == pWdaParams)
7025 {
7026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7027 "%s: pWdaParams received NULL", __func__);
7028 VOS_ASSERT(0);
7029 return;
7030 }
7031
7032 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7033 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7034 pExitBmpsRspParams->status = wdiStatus;
7035
7036 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7037 {
7038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7039 vos_mem_free(pWdaParams);
7040 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7041 }
7042
7043 return;
7044}
7045/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 * FUNCTION: WDA_ProcessExitBmpsReq
7047 * Request to WDI to Exit BMPS power state.
7048 */
7049VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7050 tExitBmpsParams *pExitBmpsReqParams)
7051{
7052 WDI_Status status = WDI_STATUS_SUCCESS ;
7053 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7054 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7055 sizeof(WDI_ExitBmpsReqParamsType)) ;
7056 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007058 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007059 if(NULL == wdiExitBmpsReqParams)
7060 {
7061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007064 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 return VOS_STATUS_E_NOMEM;
7066 }
7067 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7068 if(NULL == pWdaParams)
7069 {
7070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 VOS_ASSERT(0);
7073 vos_mem_free(wdiExitBmpsReqParams);
7074 return VOS_STATUS_E_NOMEM;
7075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007077
7078 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7079
Yue Ma7f44bbe2013-04-12 11:47:39 -07007080 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7081 wdiExitBmpsReqParams->pUserData = pWdaParams;
7082
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 /* Store param pointer as passed in by caller */
7084 /* store Params pass it to WDI */
7085 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7086 pWdaParams->pWdaContext = pWDA;
7087 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007089 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 if(IS_WDI_STATUS_FAILURE(status))
7091 {
7092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7093 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7095 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007096 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 return CONVERT_WDI2VOS_STATUS(status) ;
7099}
Jeff Johnson295189b2012-06-20 16:38:30 -07007100/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007101 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 * send Enter UAPSD RSP back to PE
7103 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007104void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007105{
7106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7107 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007108 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 if(NULL == pWdaParams)
7112 {
7113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 VOS_ASSERT(0) ;
7116 return ;
7117 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007118
7119 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7120 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7121
7122 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007123 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007124
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7126 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007127 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 return ;
7129}
Jeff Johnson295189b2012-06-20 16:38:30 -07007130/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007131 * FUNCTION: WDA_EnterUapsdReqCallback
7132 * Free memory and send Enter UAPSD RSP back to PE.
7133 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7134 */
7135void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7136{
7137 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7138 tWDA_CbContext *pWDA;
7139 tUapsdParams *pEnterUapsdRsqParams;
7140
7141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7142 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7143
7144 if(NULL == pWdaParams)
7145 {
7146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7147 "%s: pWdaParams received NULL", __func__);
7148 VOS_ASSERT(0);
7149 return;
7150 }
7151
7152 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7153 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7154 pEnterUapsdRsqParams->status = wdiStatus;
7155
7156 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7157 {
7158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7159 vos_mem_free(pWdaParams);
7160 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7161 }
7162
7163 return;
7164}
7165/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007166 * FUNCTION: WDA_ProcessEnterUapsdReq
7167 * Request to WDI to Enter UAPSD power state.
7168 */
7169VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7170 tUapsdParams *pEnterUapsdReqParams)
7171{
7172 WDI_Status status = WDI_STATUS_SUCCESS ;
7173 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7174 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7175 sizeof(WDI_EnterUapsdReqParamsType)) ;
7176 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007178 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 if(NULL == wdiEnterUapsdReqParams)
7180 {
7181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007182 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 VOS_ASSERT(0);
7184 return VOS_STATUS_E_NOMEM;
7185 }
7186 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7187 if(NULL == pWdaParams)
7188 {
7189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 VOS_ASSERT(0);
7192 vos_mem_free(wdiEnterUapsdReqParams);
7193 return VOS_STATUS_E_NOMEM;
7194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7196 pEnterUapsdReqParams->beDeliveryEnabled;
7197 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7198 pEnterUapsdReqParams->beTriggerEnabled;
7199 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7200 pEnterUapsdReqParams->bkDeliveryEnabled;
7201 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7202 pEnterUapsdReqParams->bkTriggerEnabled;
7203 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7204 pEnterUapsdReqParams->viDeliveryEnabled;
7205 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7206 pEnterUapsdReqParams->viTriggerEnabled;
7207 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7208 pEnterUapsdReqParams->voDeliveryEnabled;
7209 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7210 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007211 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007212
Yue Ma7f44bbe2013-04-12 11:47:39 -07007213 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7214 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007215
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 /* Store param pointer as passed in by caller */
7217 /* store Params pass it to WDI */
7218 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7219 pWdaParams->pWdaContext = pWDA;
7220 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007222 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 if(IS_WDI_STATUS_FAILURE(status))
7224 {
7225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7226 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7227 vos_mem_free(pWdaParams->wdaMsgParam) ;
7228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7229 vos_mem_free(pWdaParams) ;
7230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007231 return CONVERT_WDI2VOS_STATUS(status) ;
7232}
Jeff Johnson295189b2012-06-20 16:38:30 -07007233/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007234 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007235 * send Exit UAPSD RSP back to PE
7236 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007237void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007238{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007239
7240 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7241 tWDA_CbContext *pWDA;
7242 tExitUapsdParams *pExitUapsdRspParams;
7243
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007245 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007246 if(NULL == pWdaParams)
7247 {
7248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007249 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007250 VOS_ASSERT(0);
7251 return;
7252 }
7253
7254 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7255 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7256
7257 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007258 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007259
7260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7261 vos_mem_free(pWdaParams) ;
7262
7263 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007264 return ;
7265}
Jeff Johnson295189b2012-06-20 16:38:30 -07007266/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007267 * FUNCTION: WDA_ExitUapsdReqCallback
7268 * Free memory and send Exit UAPSD RSP back to PE.
7269 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7270 */
7271void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7272{
7273 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7274 tWDA_CbContext *pWDA;
7275 tExitUapsdParams *pExitUapsdRspParams;
7276
7277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7278 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7279
7280 if(NULL == pWdaParams)
7281 {
7282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7283 "%s: pWdaParams received NULL", __func__);
7284 VOS_ASSERT(0);
7285 return;
7286 }
7287
7288 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7289 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7290 pExitUapsdRspParams->status = wdiStatus;
7291
7292 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7293 {
7294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7295 vos_mem_free(pWdaParams);
7296 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7297 }
7298
7299 return;
7300}
7301/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007302 * FUNCTION: WDA_ProcessExitUapsdReq
7303 * Request to WDI to Exit UAPSD power state.
7304 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007305VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7306 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007307{
7308 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007309 tWDA_ReqParams *pWdaParams ;
7310 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7311 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7312 sizeof(WDI_ExitUapsdReqParamsType)) ;
7313
Jeff Johnson295189b2012-06-20 16:38:30 -07007314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007315 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007316
7317 if(NULL == wdiExitUapsdReqParams)
7318 {
7319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007320 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007321 VOS_ASSERT(0);
7322 return VOS_STATUS_E_NOMEM;
7323 }
7324 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7325 if(NULL == pWdaParams)
7326 {
7327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007328 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007329 VOS_ASSERT(0);
7330 vos_mem_free(wdiExitUapsdReqParams);
7331 return VOS_STATUS_E_NOMEM;
7332 }
7333
7334 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007335 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7336 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007337
7338 /* Store param pointer as passed in by caller */
7339 /* store Params pass it to WDI */
7340 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7341 pWdaParams->pWdaContext = pWDA;
7342 pWdaParams->wdaMsgParam = pExitUapsdParams;
7343
Yue Ma7f44bbe2013-04-12 11:47:39 -07007344 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 if(IS_WDI_STATUS_FAILURE(status))
7346 {
7347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7348 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007349 vos_mem_free(pWdaParams->wdaMsgParam) ;
7350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7351 vos_mem_free(pWdaParams) ;
7352
Jeff Johnson295189b2012-06-20 16:38:30 -07007353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007354 return CONVERT_WDI2VOS_STATUS(status) ;
7355}
7356
Jeff Johnson295189b2012-06-20 16:38:30 -07007357/*
7358 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7359 *
7360 */
7361void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7362{
7363 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007365 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 if(NULL == pWdaParams)
7367 {
7368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007369 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007370 VOS_ASSERT(0) ;
7371 return ;
7372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 if( pWdaParams != NULL )
7374 {
7375 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7376 {
7377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7378 }
7379 if( pWdaParams->wdaMsgParam != NULL )
7380 {
7381 vos_mem_free(pWdaParams->wdaMsgParam) ;
7382 }
7383 vos_mem_free(pWdaParams) ;
7384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 return ;
7386}
Jeff Johnson295189b2012-06-20 16:38:30 -07007387/*
7388 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7389 * Request to WDI to set the power save params at start.
7390 */
7391VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7392 tSirPowerSaveCfg *pPowerSaveCfg)
7393{
7394 WDI_Status status = WDI_STATUS_SUCCESS ;
7395 tHalCfg *tlvStruct = NULL ;
7396 tANI_U8 *tlvStructStart = NULL ;
7397 v_PVOID_t *configParam;
7398 tANI_U32 configParamSize;
7399 tANI_U32 *configDataValue;
7400 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7401 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007403 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7405 {
7406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007407 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007409 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 return VOS_STATUS_E_FAILURE;
7411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007412 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7413 if (NULL == wdiPowerSaveCfg)
7414 {
7415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007416 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007418 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007419 return VOS_STATUS_E_NOMEM;
7420 }
7421 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7422 if(NULL == pWdaParams)
7423 {
7424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007425 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 VOS_ASSERT(0);
7427 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007428 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 return VOS_STATUS_E_NOMEM;
7430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007431 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7432 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007433 if(NULL == configParam)
7434 {
7435 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007436 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007437 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 vos_mem_free(pWdaParams);
7439 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007440 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007441 return VOS_STATUS_E_NOMEM;
7442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 vos_mem_set(configParam, configParamSize, 0);
7444 wdiPowerSaveCfg->pConfigBuffer = configParam;
7445 tlvStruct = (tHalCfg *)configParam;
7446 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007447 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7448 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7449 tlvStruct->length = sizeof(tANI_U32);
7450 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7451 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007452 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7453 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007454 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7455 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7456 tlvStruct->length = sizeof(tANI_U32);
7457 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7458 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7460 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7462 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7463 tlvStruct->length = sizeof(tANI_U32);
7464 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7465 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7467 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007468 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7469 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7470 tlvStruct->length = sizeof(tANI_U32);
7471 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7472 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007473 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7474 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7476 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7477 tlvStruct->length = sizeof(tANI_U32);
7478 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7479 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007480 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7481 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7483 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7484 tlvStruct->length = sizeof(tANI_U32);
7485 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7486 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7488 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7490 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7491 tlvStruct->length = sizeof(tANI_U32);
7492 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7493 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007494 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7495 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7497 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7498 tlvStruct->length = sizeof(tANI_U32);
7499 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7500 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7501 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7502 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7504 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7505 tlvStruct->length = sizeof(tANI_U32);
7506 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7507 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7508 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7509 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7511 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7512 tlvStruct->length = sizeof(tANI_U32);
7513 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7514 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7516 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7518 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7519 tlvStruct->length = sizeof(tANI_U32);
7520 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7521 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007522 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7523 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 /* store Params pass it to WDI */
7527 pWdaParams->wdaMsgParam = configParam;
7528 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7529 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7531 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 if(IS_WDI_STATUS_FAILURE(status))
7533 {
7534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7535 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7536 vos_mem_free(pWdaParams->wdaMsgParam);
7537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7538 vos_mem_free(pWdaParams);
7539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007540 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 return CONVERT_WDI2VOS_STATUS(status);
7542}
Jeff Johnson295189b2012-06-20 16:38:30 -07007543/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007544 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007545 *
7546 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007547void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007548{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7550
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007552 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007553
7554 if(NULL == pWdaParams)
7555 {
7556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7557 "%s: pWdaParams received NULL", __func__);
7558 VOS_ASSERT(0);
7559 return ;
7560 }
7561
7562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 vos_mem_free(pWdaParams);
7564
Jeff Johnson295189b2012-06-20 16:38:30 -07007565 return ;
7566}
Jeff Johnson295189b2012-06-20 16:38:30 -07007567/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007568 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7569 * Free memory.
7570 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7571 */
7572void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7573{
7574 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7575
7576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7577 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7578
7579 if(NULL == pWdaParams)
7580 {
7581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7582 "%s: pWdaParams received NULL", __func__);
7583 VOS_ASSERT(0);
7584 return;
7585 }
7586
7587 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7588 {
7589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7590 vos_mem_free(pWdaParams);
7591 }
7592
7593 return;
7594}
7595/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007596 * FUNCTION: WDA_SetUapsdAcParamsReq
7597 * Request to WDI to set the UAPSD params for an ac (sta mode).
7598 */
7599VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7600 tUapsdInfo *pUapsdInfo)
7601{
7602 WDI_Status status = WDI_STATUS_SUCCESS;
7603 tWDA_CbContext *pWDA = NULL ;
7604 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7605 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7606 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7607 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007609 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 if(NULL == wdiUapsdParams)
7611 {
7612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007613 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007614 VOS_ASSERT(0);
7615 return VOS_STATUS_E_NOMEM;
7616 }
7617 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7618 if(NULL == pWdaParams)
7619 {
7620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 VOS_ASSERT(0);
7623 vos_mem_free(wdiUapsdParams);
7624 return VOS_STATUS_E_NOMEM;
7625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7627 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7628 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7629 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7630 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7631 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007632 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7633 wdiUapsdParams->pUserData = pWdaParams;
7634
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007636 pWdaParams->pWdaContext = pWDA;
7637 /* Store param pointer as passed in by caller */
7638 pWdaParams->wdaMsgParam = pUapsdInfo;
7639 /* store Params pass it to WDI */
7640 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007642 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007643 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007644 if(IS_WDI_STATUS_FAILURE(status))
7645 {
7646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7647 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7649 vos_mem_free(pWdaParams);
7650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007651 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7652 return VOS_STATUS_SUCCESS;
7653 else
7654 return VOS_STATUS_E_FAILURE;
7655
Jeff Johnson295189b2012-06-20 16:38:30 -07007656}
7657/*
7658 * FUNCTION: WDA_ClearUapsdAcParamsReq
7659 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7660 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7661 * and again enter the UPASD with the modified params. Hence the disable
7662 * function was kept empty.
7663 *
7664 */
7665VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7666{
7667 /* do nothing */
7668 return VOS_STATUS_SUCCESS;
7669}
Jeff Johnson295189b2012-06-20 16:38:30 -07007670/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007671 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 *
7673 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007674void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007675{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007676 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7677
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007679 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007680
7681 if(NULL == pWdaParams)
7682 {
7683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007684 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007685 VOS_ASSERT(0) ;
7686 return ;
7687 }
7688
7689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7690 vos_mem_free(pWdaParams->wdaMsgParam);
7691 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007692
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 //print a msg, nothing else to do
7694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007695 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007696 return ;
7697}
Jeff Johnson295189b2012-06-20 16:38:30 -07007698/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007699 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7700 * Free memory.
7701 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7702 */
7703void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7704{
7705 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7706
7707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7708 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7709
7710 if(NULL == pWdaParams)
7711 {
7712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7713 "%s: pWdaParams received NULL", __func__);
7714 VOS_ASSERT(0);
7715 return;
7716 }
7717
7718 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7719 {
7720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7721 vos_mem_free(pWdaParams->wdaMsgParam);
7722 vos_mem_free(pWdaParams);
7723 }
7724
7725 return;
7726}
7727/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 * FUNCTION: WDA_UpdateUapsdParamsReq
7729 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7730 */
7731VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7732 tUpdateUapsdParams* pUpdateUapsdInfo)
7733{
7734 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007735 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7737 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7738 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007739 tWDA_ReqParams *pWdaParams = NULL;
7740
Jeff Johnson295189b2012-06-20 16:38:30 -07007741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007742 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 if(NULL == wdiUpdateUapsdParams)
7744 {
7745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007746 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007747 VOS_ASSERT(0);
7748 return VOS_STATUS_E_NOMEM;
7749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7751 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7752 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007753 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7754 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007755
7756 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7757 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 {
7759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007761 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007762 vos_mem_free(pUpdateUapsdInfo);
7763 vos_mem_free(wdiUpdateUapsdParams);
7764 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007766 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007767 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007769 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7770 pWdaParams->pWdaContext = pWDA;
7771
Jeff Johnson43971f52012-07-17 12:26:56 -07007772 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007773 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007774 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007775
Jeff Johnson43971f52012-07-17 12:26:56 -07007776 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 {
7778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7779 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007780 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7782 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007783 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007784 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007785 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007786}
Jeff Johnson295189b2012-06-20 16:38:30 -07007787/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007788 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 *
7790 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007791void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007792{
7793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007795 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 if(WDI_STATUS_SUCCESS != wdiStatus)
7797 {
7798 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007799 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007800 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007801 if(NULL == pWdaParams)
7802 {
7803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007804 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 VOS_ASSERT(0) ;
7806 return ;
7807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7809 vos_mem_free(pWdaParams->wdaMsgParam);
7810 vos_mem_free(pWdaParams);
7811 return ;
7812}
Jeff Johnson295189b2012-06-20 16:38:30 -07007813/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007814 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7815 * Free memory.
7816 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7817 */
7818void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7819{
7820 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7821
7822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7823 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7824
7825 if(NULL == pWdaParams)
7826 {
7827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7828 "%s: pWdaParams received NULL", __func__);
7829 VOS_ASSERT(0);
7830 return;
7831 }
7832
7833 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7834 {
7835 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7836 vos_mem_free(pWdaParams->wdaMsgParam);
7837 vos_mem_free(pWdaParams);
7838 }
7839
7840 return;
7841}
7842/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7844 *
7845 */
7846VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7847 tSirWlanSetRxpFilters *pWlanSuspendParam)
7848{
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007850 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7852 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7853 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7854 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007856 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007857 if(NULL == wdiRxpFilterParams)
7858 {
7859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007860 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 VOS_ASSERT(0);
7862 vos_mem_free(pWlanSuspendParam);
7863 return VOS_STATUS_E_NOMEM;
7864 }
7865 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7866 if(NULL == pWdaParams)
7867 {
7868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 VOS_ASSERT(0);
7871 vos_mem_free(wdiRxpFilterParams);
7872 vos_mem_free(pWlanSuspendParam);
7873 return VOS_STATUS_E_NOMEM;
7874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7876 pWlanSuspendParam->setMcstBcstFilter;
7877 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7878 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7879
Yue Ma7f44bbe2013-04-12 11:47:39 -07007880 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
7881 wdiRxpFilterParams->pUserData = pWdaParams;
7882
Jeff Johnson295189b2012-06-20 16:38:30 -07007883 pWdaParams->pWdaContext = pWDA;
7884 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7885 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007886 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007887 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007889 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 {
7891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7892 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007893 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7895 vos_mem_free(pWdaParams->wdaMsgParam);
7896 vos_mem_free(pWdaParams);
7897 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007898 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007899}
Jeff Johnson295189b2012-06-20 16:38:30 -07007900/*
7901 * FUNCTION: WDA_WdiIndicationCallback
7902 *
7903 */
7904void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7905 void* pUserData)
7906{
7907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007908 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007909}
Jeff Johnson295189b2012-06-20 16:38:30 -07007910/*
7911 * FUNCTION: WDA_ProcessWlanSuspendInd
7912 *
7913 */
7914VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7915 tSirWlanSuspendParam *pWlanSuspendParam)
7916{
7917 WDI_Status wdiStatus;
7918 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007920 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007921 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7922 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7923 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7924 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7927 if(WDI_STATUS_PENDING == wdiStatus)
7928 {
7929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007930 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007931 }
7932 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7933 {
7934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007935 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007937 vos_mem_free(pWlanSuspendParam);
7938 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7939}
7940
Chet Lanctot186b5732013-03-18 10:26:30 -07007941#ifdef WLAN_FEATURE_11W
7942/*
7943 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7944 *
7945 */
7946VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7947 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7948{
7949 WDI_Status wdiStatus;
7950 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7952 "------> %s ", __func__);
7953
7954 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7955 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7956 sizeof(tSirMacAddr));
7957
7958 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7959 wdiExclUnencryptParams.pUserData = pWDA;
7960
7961 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7962 if(WDI_STATUS_PENDING == wdiStatus)
7963 {
7964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7965 "Pending received for %s:%d ", __func__, __LINE__ );
7966 }
7967 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7968 {
7969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7970 "Failure in %s:%d ", __func__, __LINE__ );
7971 }
7972 vos_mem_free(pExclUnencryptParam);
7973 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7974}
7975#endif
7976
Jeff Johnson295189b2012-06-20 16:38:30 -07007977/*
7978 * FUNCTION: WDA_ProcessWlanResumeCallback
7979 *
7980 */
7981void WDA_ProcessWlanResumeCallback(
7982 WDI_SuspendResumeRspParamsType *resumeRspParams,
7983 void* pUserData)
7984{
7985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007987 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 if(NULL == pWdaParams)
7989 {
7990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007991 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007992 VOS_ASSERT(0) ;
7993 return ;
7994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007995 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7996 {
7997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007998 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8001 vos_mem_free(pWdaParams->wdaMsgParam);
8002 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 return ;
8004}
Jeff Johnson295189b2012-06-20 16:38:30 -07008005/*
8006 * FUNCTION: WDA_ProcessWlanResumeReq
8007 *
8008 */
8009VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8010 tSirWlanResumeParam *pWlanResumeParam)
8011{
8012 WDI_Status wdiStatus;
8013 WDI_ResumeParamsType *wdiResumeParams =
8014 (WDI_ResumeParamsType *)vos_mem_malloc(
8015 sizeof(WDI_ResumeParamsType) ) ;
8016 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008018 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008019 if(NULL == wdiResumeParams)
8020 {
8021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 VOS_ASSERT(0);
8024 return VOS_STATUS_E_NOMEM;
8025 }
8026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8027 if(NULL == pWdaParams)
8028 {
8029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 VOS_ASSERT(0);
8032 vos_mem_free(wdiResumeParams);
8033 return VOS_STATUS_E_NOMEM;
8034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8036 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008038 wdiResumeParams->wdiReqStatusCB = NULL;
8039 pWdaParams->wdaMsgParam = pWlanResumeParam;
8040 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8041 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8043 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8044 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8046 {
8047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8048 "Failure in Host Resume REQ WDI API, free all the memory " );
8049 VOS_ASSERT(0);
8050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8051 vos_mem_free(pWdaParams->wdaMsgParam);
8052 vos_mem_free(pWdaParams);
8053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008054 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8055}
8056
Jeff Johnson295189b2012-06-20 16:38:30 -07008057/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008058 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 *
8060 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008061void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008062{
8063 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008066 if(NULL == pWdaParams)
8067 {
8068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008069 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 VOS_ASSERT(0) ;
8071 return ;
8072 }
8073
8074 vos_mem_free(pWdaParams->wdaMsgParam) ;
8075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8076 vos_mem_free(pWdaParams) ;
8077 /*
8078 * No respone required for SetBeaconFilter req so just free the request
8079 * param here
8080 */
8081
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 return ;
8083}
Jeff Johnson295189b2012-06-20 16:38:30 -07008084/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008085 * FUNCTION: WDA_SetBeaconFilterReqCallback
8086 * Free memory.
8087 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8088 */
8089void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8090{
8091 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8092
8093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8094 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8095
8096 if(NULL == pWdaParams)
8097 {
8098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8099 "%s: pWdaParams received NULL", __func__);
8100 VOS_ASSERT(0);
8101 return;
8102 }
8103
8104 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8105 {
8106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8107 vos_mem_free(pWdaParams->wdaMsgParam);
8108 vos_mem_free(pWdaParams);
8109 }
8110
8111 return;
8112}
8113/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 * FUNCTION: WDA_SetBeaconFilterReq
8115 * Request to WDI to send the beacon filtering related information.
8116 */
8117VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8118 tBeaconFilterMsg* pBeaconFilterInfo)
8119{
8120 WDI_Status status = WDI_STATUS_SUCCESS;
8121 tANI_U8 *dstPtr, *srcPtr;
8122 tANI_U8 filterLength;
8123 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8124 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8125 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8126 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008128 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008129 if(NULL == wdiBeaconFilterInfo)
8130 {
8131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008133 VOS_ASSERT(0);
8134 return VOS_STATUS_E_NOMEM;
8135 }
8136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8137 if(NULL == pWdaParams)
8138 {
8139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008141 VOS_ASSERT(0);
8142 vos_mem_free(wdiBeaconFilterInfo);
8143 return VOS_STATUS_E_NOMEM;
8144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8146 pBeaconFilterInfo->beaconInterval;
8147 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8148 pBeaconFilterInfo->capabilityInfo;
8149 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8150 pBeaconFilterInfo->capabilityMask;
8151 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008152
8153 //Fill the BssIdx
8154 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8155
Jeff Johnson295189b2012-06-20 16:38:30 -07008156 //Fill structure with info contained in the beaconFilterTable
8157 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8158 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8159 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8160 if(WDI_BEACON_FILTER_LEN < filterLength)
8161 {
8162 filterLength = WDI_BEACON_FILTER_LEN;
8163 }
8164 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008165 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8166 wdiBeaconFilterInfo->pUserData = pWdaParams;
8167
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 /* Store param pointer as passed in by caller */
8169 /* store Params pass it to WDI */
8170 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8171 pWdaParams->pWdaContext = pWDA;
8172 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8173
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008175 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 if(IS_WDI_STATUS_FAILURE(status))
8177 {
8178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8179 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8180 vos_mem_free(pWdaParams->wdaMsgParam) ;
8181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8182 vos_mem_free(pWdaParams) ;
8183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008184 return CONVERT_WDI2VOS_STATUS(status) ;
8185}
Jeff Johnson295189b2012-06-20 16:38:30 -07008186/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008187 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008188 *
8189 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008190void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008191{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008192 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8193
Jeff Johnson295189b2012-06-20 16:38:30 -07008194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008195 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008196
8197 if(NULL == pWdaParams)
8198 {
8199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008200 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008201 VOS_ASSERT(0) ;
8202 return ;
8203 }
8204
8205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8206 vos_mem_free(pWdaParams->wdaMsgParam);
8207 vos_mem_free(pWdaParams);
8208
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 //print a msg, nothing else to do
8210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008211 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008212 return ;
8213}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008214/*
8215 * FUNCTION: WDA_RemBeaconFilterReqCallback
8216 * Free memory.
8217 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8218 */
8219void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8220{
8221 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8222
8223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8224 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8225
8226 if(NULL == pWdaParams)
8227 {
8228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8229 "%s: pWdaParams received NULL", __func__);
8230 VOS_ASSERT(0);
8231 return;
8232 }
8233
8234 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8235 {
8236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8237 vos_mem_free(pWdaParams->wdaMsgParam);
8238 vos_mem_free(pWdaParams);
8239 }
8240
8241 return;
8242}
Jeff Johnson295189b2012-06-20 16:38:30 -07008243 // TODO: PE does not have this feature for now implemented,
8244 // but the support for removing beacon filter exists between
8245 // HAL and FW. This function can be called whenever PE defines
8246 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008247/*
8248 * FUNCTION: WDA_RemBeaconFilterReq
8249 * Request to WDI to send the removal of beacon filtering related information.
8250 */
8251VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8252 tRemBeaconFilterMsg* pBeaconFilterInfo)
8253{
8254 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008255 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8257 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8258 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008259 tWDA_ReqParams *pWdaParams ;
8260
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008262 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 if(NULL == wdiBeaconFilterInfo)
8264 {
8265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008267 VOS_ASSERT(0);
8268 return VOS_STATUS_E_NOMEM;
8269 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008270 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8271 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 {
8273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008274 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008276 vos_mem_free(wdiBeaconFilterInfo);
8277 vos_mem_free(pBeaconFilterInfo);
8278 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008280
8281 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8282 pBeaconFilterInfo->ucIeCount;
8283 //Fill structure with info contained in the ucRemIeId
8284 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8285 pBeaconFilterInfo->ucRemIeId,
8286 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8287 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8288 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008289
8290 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008291 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008293 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8294
8295 pWdaParams->pWdaContext = pWDA;
8296
Jeff Johnson43971f52012-07-17 12:26:56 -07008297 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008298 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008299 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 {
8301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8302 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008303 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8305 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008306 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008308 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008309}
Jeff Johnson295189b2012-06-20 16:38:30 -07008310/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008311 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 *
8313 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008314void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008315{
8316 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008318 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008319 if(NULL == pWdaParams)
8320 {
8321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008322 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 VOS_ASSERT(0) ;
8324 return ;
8325 }
8326
8327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8328 vos_mem_free(pWdaParams) ;
8329
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 return ;
8331}
Jeff Johnson295189b2012-06-20 16:38:30 -07008332/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008333 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8334 * Free memory.
8335 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8336 */
8337void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8338{
8339 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8340
8341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8342 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8343
8344 if(NULL == pWdaParams)
8345 {
8346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8347 "%s: pWdaParams received NULL", __func__);
8348 VOS_ASSERT(0);
8349 return;
8350 }
8351
8352 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8353 {
8354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8355 vos_mem_free(pWdaParams);
8356 }
8357
8358 return;
8359}
8360/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 * FUNCTION: WDA_SetRSSIThresholdsReq
8362 * Request to WDI to set the RSSI thresholds (sta mode).
8363 */
8364VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8365{
8366 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008367 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008368 tWDA_CbContext *pWDA = NULL ;
8369 v_PVOID_t pVosContext = NULL;
8370 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8371 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8372 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8373 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008375 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 if(NULL == wdiRSSIThresholdsInfo)
8377 {
8378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008379 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008380 VOS_ASSERT(0);
8381 return VOS_STATUS_E_NOMEM;
8382 }
8383 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8384 if(NULL == pWdaParams)
8385 {
8386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008387 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008388 VOS_ASSERT(0);
8389 vos_mem_free(wdiRSSIThresholdsInfo);
8390 return VOS_STATUS_E_NOMEM;
8391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008393 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8394 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8395 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8397 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8398 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8400 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8401 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008402 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8403 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8405 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8406
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 /* Store param pointer as passed in by caller */
8408 /* store Params pass it to WDI */
8409 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8410 pWdaParams->pWdaContext = pWDA;
8411 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008412 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008413 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008414 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 {
8416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8417 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008418 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8420 vos_mem_free(pWdaParams) ;
8421 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008422 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008423
8424}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008425/*
Yue Madb90ac12013-04-04 13:39:13 -07008426 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008427 *
8428 */
Yue Madb90ac12013-04-04 13:39:13 -07008429void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008430{
8431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8432
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008434 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 if(NULL == pWdaParams)
8436 {
8437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008438 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 VOS_ASSERT(0) ;
8440 return ;
8441 }
8442
8443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8444 vos_mem_free(pWdaParams->wdaMsgParam);
8445 vos_mem_free(pWdaParams) ;
8446
8447 //print a msg, nothing else to do
8448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008449 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008450 return ;
8451}
Jeff Johnson295189b2012-06-20 16:38:30 -07008452/*
Yue Madb90ac12013-04-04 13:39:13 -07008453 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008454 * Free memory.
8455 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008456 */
8457void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8458{
8459 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8460
8461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8462 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8463
8464 if(NULL == pWdaParams)
8465 {
8466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8467 "%s: Invalid pWdaParams pointer", __func__);
8468 VOS_ASSERT(0);
8469 return;
8470 }
8471
8472 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8473 {
8474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8475 vos_mem_free(pWdaParams->wdaMsgParam);
8476 vos_mem_free(pWdaParams);
8477 }
8478
8479 return;
8480}
8481/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 * FUNCTION: WDA_ProcessHostOffloadReq
8483 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8484 * to broadcast traffic (sta mode).
8485 */
8486VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8487 tSirHostOffloadReq *pHostOffloadParams)
8488{
8489 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008490 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8492 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8493 sizeof(WDI_HostOffloadReqParamsType)) ;
8494 tWDA_ReqParams *pWdaParams ;
8495
8496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008497 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008498
8499 if(NULL == wdiHostOffloadInfo)
8500 {
8501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008502 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008503 VOS_ASSERT(0);
8504 return VOS_STATUS_E_NOMEM;
8505 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8507 if(NULL == pWdaParams)
8508 {
8509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 VOS_ASSERT(0);
8512 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008513 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008514 return VOS_STATUS_E_NOMEM;
8515 }
8516
8517 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8518 pHostOffloadParams->offloadType;
8519 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8520 pHostOffloadParams->enableOrDisable;
8521
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008522 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8523 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8524
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8526 {
8527 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8528 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8529 pHostOffloadParams->params.hostIpv4Addr,
8530 4);
8531 break;
8532 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8533 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8534 pHostOffloadParams->params.hostIpv6Addr,
8535 16);
8536 break;
8537 case SIR_IPV6_NS_OFFLOAD:
8538 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8539 pHostOffloadParams->params.hostIpv6Addr,
8540 16);
8541
8542#ifdef WLAN_NS_OFFLOAD
8543 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8544 {
8545 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8546 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8547 16);
8548 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8549 }
8550 else
8551 {
8552 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8553 }
8554
8555 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8556 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8557 16);
8558 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8559 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8560 6);
8561
8562 //Only two are supported so let's go through them without a loop
8563 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8564 {
8565 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8566 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8567 16);
8568 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8569 }
8570 else
8571 {
8572 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8573 }
8574
8575 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8576 {
8577 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8578 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8579 16);
8580 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8581 }
8582 else
8583 {
8584 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8585 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308586 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8587 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 break;
8589#endif //WLAN_NS_OFFLOAD
8590 default:
8591 {
8592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8593 "No Handling for Offload Type %x in WDA "
8594 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8595 //WDA_VOS_ASSERT(0) ;
8596 }
8597 }
Yue Madb90ac12013-04-04 13:39:13 -07008598 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8599 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008600
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008602 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008603 /* store Params pass it to WDI */
8604 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8605 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008606
Jeff Johnson295189b2012-06-20 16:38:30 -07008607
Jeff Johnson43971f52012-07-17 12:26:56 -07008608 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008609 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008610
Jeff Johnson43971f52012-07-17 12:26:56 -07008611 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 {
8613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8614 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008615 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8617 vos_mem_free(pWdaParams->wdaMsgParam);
8618 vos_mem_free(pWdaParams) ;
8619 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008620 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008621
8622}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008623/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008624 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008625 *
8626 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008627void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008628{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008629 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8630
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008632 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008633
8634 if(NULL == pWdaParams)
8635 {
8636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008637 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008638 VOS_ASSERT(0) ;
8639 return ;
8640 }
8641
8642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8643 vos_mem_free(pWdaParams->wdaMsgParam);
8644 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008645
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 //print a msg, nothing else to do
8647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008648 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 return ;
8650}
Jeff Johnson295189b2012-06-20 16:38:30 -07008651/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008652 * FUNCTION: WDA_KeepAliveReqCallback
8653 * Free memory.
8654 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8655 */
8656void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8657{
8658 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8659
8660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8661 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8662
8663 if(NULL == pWdaParams)
8664 {
8665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8666 "%s: pWdaParams received NULL", __func__);
8667 VOS_ASSERT(0);
8668 return;
8669 }
8670
8671 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8672 {
8673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8674 vos_mem_free(pWdaParams->wdaMsgParam);
8675 vos_mem_free(pWdaParams);
8676 }
8677
8678 return;
8679}
8680/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008681 * FUNCTION: WDA_ProcessKeepAliveReq
8682 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8683 * wakeup due to broadcast traffic (sta mode).
8684 */
8685VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8686 tSirKeepAliveReq *pKeepAliveParams)
8687{
8688 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008689 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8691 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8692 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008693 tWDA_ReqParams *pWdaParams;
8694
Jeff Johnson295189b2012-06-20 16:38:30 -07008695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008696 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008697 if(NULL == wdiKeepAliveInfo)
8698 {
8699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008700 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008701 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008702 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 return VOS_STATUS_E_NOMEM;
8704 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008705
8706 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8707 if(NULL == pWdaParams)
8708 {
8709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008710 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008711 VOS_ASSERT(0);
8712 vos_mem_free(wdiKeepAliveInfo);
8713 vos_mem_free(pKeepAliveParams);
8714 return VOS_STATUS_E_NOMEM;
8715 }
8716
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8718 pKeepAliveParams->packetType;
8719 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8720 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008721
8722 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8723 pKeepAliveParams->bssId,
8724 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008725
8726 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8727 {
8728 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8729 pKeepAliveParams->hostIpv4Addr,
8730 SIR_IPV4_ADDR_LEN);
8731 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8732 pKeepAliveParams->destIpv4Addr,
8733 SIR_IPV4_ADDR_LEN);
8734 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8735 pKeepAliveParams->destMacAddr,
8736 SIR_MAC_ADDR_LEN);
8737 }
8738 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8739 {
8740 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8741 SIR_IPV4_ADDR_LEN,
8742 0);
8743 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8744 SIR_IPV4_ADDR_LEN,
8745 0);
8746 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8747 SIR_MAC_ADDR_LEN,
8748 0);
8749 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008750 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8751 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008752
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008754 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008756 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8757 pWdaParams->pWdaContext = pWDA;
8758
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8760 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8761 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8762 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8763 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8765 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8766 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8767 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8768 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8770 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8771 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8772 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8773 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8774 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8775 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8776 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8778 "TimePeriod %d PacketType %d",
8779 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8780 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008781 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008782 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008783
Jeff Johnson43971f52012-07-17 12:26:56 -07008784 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 {
8786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8787 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008788 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8790 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008791 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008793 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008794
8795}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008796/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008797 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 *
8799 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008800void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008801 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8802 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008803{
8804 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008806 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 if(NULL == pWdaParams)
8808 {
8809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008810 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008811 VOS_ASSERT(0) ;
8812 return ;
8813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8815 vos_mem_free(pWdaParams->wdaMsgParam);
8816 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008817 return ;
8818}
Jeff Johnson295189b2012-06-20 16:38:30 -07008819/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008820 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8821 * Free memory.
8822 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8823 */
8824void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8825{
8826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8827
8828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8829 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8830
8831 if(NULL == pWdaParams)
8832 {
8833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8834 "%s: pWdaParams received NULL", __func__);
8835 VOS_ASSERT(0);
8836 return;
8837 }
8838
8839 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8840 {
8841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8842 vos_mem_free(pWdaParams->wdaMsgParam);
8843 vos_mem_free(pWdaParams);
8844 }
8845
8846 return;
8847}
8848
8849/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8851 * Request to WDI to add WOWL Bcast pattern
8852 */
8853VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8854 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8855{
8856 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008857 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008858 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8859 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8860 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8861 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008863 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 if(NULL == wdiWowlAddBcPtrnInfo)
8865 {
8866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 VOS_ASSERT(0);
8869 return VOS_STATUS_E_NOMEM;
8870 }
8871 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8872 if(NULL == pWdaParams)
8873 {
8874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008875 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008876 VOS_ASSERT(0);
8877 vos_mem_free(wdiWowlAddBcPtrnInfo);
8878 return VOS_STATUS_E_NOMEM;
8879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008880 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8881 pWowlAddBcPtrnParams->ucPatternId;
8882 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8883 pWowlAddBcPtrnParams->ucPatternByteOffset;
8884 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8885 pWowlAddBcPtrnParams->ucPatternMaskSize;
8886 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8887 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008888 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8889 {
8890 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8891 pWowlAddBcPtrnParams->ucPattern,
8892 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8893 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8894 pWowlAddBcPtrnParams->ucPatternMask,
8895 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8896 }
8897 else
8898 {
8899 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8900 pWowlAddBcPtrnParams->ucPattern,
8901 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8902 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8903 pWowlAddBcPtrnParams->ucPatternMask,
8904 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8905
8906 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8907 pWowlAddBcPtrnParams->ucPatternExt,
8908 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8909 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8910 pWowlAddBcPtrnParams->ucPatternMaskExt,
8911 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8912 }
8913
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008914 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8915 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8916
Yue Ma7f44bbe2013-04-12 11:47:39 -07008917 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
8918 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 /* Store param pointer as passed in by caller */
8920 /* store Params pass it to WDI */
8921 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8922 pWdaParams->pWdaContext = pWDA;
8923 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008924 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008925 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008926 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008927 {
8928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8929 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008930 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008931 vos_mem_free(pWdaParams->wdaMsgParam) ;
8932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8933 vos_mem_free(pWdaParams) ;
8934 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008935 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008936
8937}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008938/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008939 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 *
8941 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008942void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008943 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8944 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008945{
8946 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008948 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008949 if(NULL == pWdaParams)
8950 {
8951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008952 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 VOS_ASSERT(0) ;
8954 return ;
8955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8957 vos_mem_free(pWdaParams->wdaMsgParam);
8958 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 return ;
8960}
Jeff Johnson295189b2012-06-20 16:38:30 -07008961/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008962 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8963 * Free memory.
8964 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
8965 */
8966void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8967{
8968 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8969
8970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8971 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8972
8973 if(NULL == pWdaParams)
8974 {
8975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8976 "%s: pWdaParams received NULL", __func__);
8977 VOS_ASSERT(0);
8978 return;
8979 }
8980
8981 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8982 {
8983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8984 vos_mem_free(pWdaParams->wdaMsgParam);
8985 vos_mem_free(pWdaParams);
8986 }
8987
8988 return;
8989}
8990/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008991 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8992 * Request to WDI to delete WOWL Bcast pattern
8993 */
8994VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8995 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8996{
8997 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008998 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008999 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9000 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9001 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9002 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009004 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009005 if(NULL == wdiWowlDelBcPtrnInfo)
9006 {
9007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009008 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 VOS_ASSERT(0);
9010 return VOS_STATUS_E_NOMEM;
9011 }
9012 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9013 if(NULL == pWdaParams)
9014 {
9015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009017 VOS_ASSERT(0);
9018 vos_mem_free(wdiWowlDelBcPtrnInfo);
9019 return VOS_STATUS_E_NOMEM;
9020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009021 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9022 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009023
9024 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9025 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9026
Yue Ma7f44bbe2013-04-12 11:47:39 -07009027 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9028 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009029 /* Store param pointer as passed in by caller */
9030 /* store Params pass it to WDI */
9031 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9032 pWdaParams->pWdaContext = pWDA;
9033 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009034 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009035 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009036 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 {
9038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9039 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009040 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009041 vos_mem_free(pWdaParams->wdaMsgParam) ;
9042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9043 vos_mem_free(pWdaParams) ;
9044 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009045 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009046
9047}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009048/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009049 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009050 *
9051 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009052void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009053{
9054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9055 tWDA_CbContext *pWDA;
9056 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009058 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 if(NULL == pWdaParams)
9060 {
9061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009062 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009063 VOS_ASSERT(0) ;
9064 return ;
9065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009066 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9067 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9068
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009069 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9070
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9072 vos_mem_free(pWdaParams) ;
9073
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009074 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009075 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009077 return ;
9078}
Jeff Johnson295189b2012-06-20 16:38:30 -07009079/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009080 * FUNCTION: WDA_WowlEnterReqCallback
9081 * Free memory and send WOWL Enter RSP back to PE.
9082 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9083 */
9084void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9085{
9086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9087 tWDA_CbContext *pWDA;
9088 tSirHalWowlEnterParams *pWowlEnterParams;
9089
9090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9091 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9092
9093 if(NULL == pWdaParams)
9094 {
9095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9096 "%s: pWdaParams received NULL", __func__);
9097 VOS_ASSERT(0);
9098 return;
9099 }
9100
9101 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9102 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9103 pWowlEnterParams->status = wdiStatus;
9104
9105 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9106 {
9107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9108 vos_mem_free(pWdaParams);
9109 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9110 }
9111
9112 return;
9113}
9114/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009115 * FUNCTION: WDA_ProcessWowlEnterReq
9116 * Request to WDI to enter WOWL
9117 */
9118VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9119 tSirHalWowlEnterParams *pWowlEnterParams)
9120{
9121 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009122 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9124 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9125 sizeof(WDI_WowlEnterReqParamsType)) ;
9126 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009128 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009129 if(NULL == wdiWowlEnterInfo)
9130 {
9131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009133 VOS_ASSERT(0);
9134 return VOS_STATUS_E_NOMEM;
9135 }
9136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9137 if(NULL == pWdaParams)
9138 {
9139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009141 VOS_ASSERT(0);
9142 vos_mem_free(wdiWowlEnterInfo);
9143 return VOS_STATUS_E_NOMEM;
9144 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009145
9146 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9147
Jeff Johnson295189b2012-06-20 16:38:30 -07009148 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9149 pWowlEnterParams->magicPtrn,
9150 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009151 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9152 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009153 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9154 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9156 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9158 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009159 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9160 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9162 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9164 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9166 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009167#ifdef WLAN_WAKEUP_EVENTS
9168 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9169 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9170
9171 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9172 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9173
9174 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9175 pWowlEnterParams->ucWowNetScanOffloadMatch;
9176
9177 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9178 pWowlEnterParams->ucWowGTKRekeyError;
9179
9180 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9181 pWowlEnterParams->ucWoWBSSConnLoss;
9182#endif // WLAN_WAKEUP_EVENTS
9183
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009184 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9185 pWowlEnterParams->bssIdx;
9186
Yue Ma7f44bbe2013-04-12 11:47:39 -07009187 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9188 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009189 /* Store param pointer as passed in by caller */
9190 /* store Params pass it to WDI */
9191 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9192 pWdaParams->pWdaContext = pWDA;
9193 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009194 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009195 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009196 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009197 {
9198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9199 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009200 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 vos_mem_free(pWdaParams->wdaMsgParam) ;
9202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9203 vos_mem_free(pWdaParams) ;
9204 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009205 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009206
9207}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009208/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009209 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 *
9211 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009212void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009213{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9215 tWDA_CbContext *pWDA;
9216 tSirHalWowlExitParams *pWowlExitParams;
9217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009218 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009219 if(NULL == pWdaParams)
9220 {
9221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009222 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009223 VOS_ASSERT(0) ;
9224 return ;
9225 }
9226 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9227 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9228
9229 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009230 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009231
9232 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9233 vos_mem_free(pWdaParams) ;
9234
Jeff Johnson295189b2012-06-20 16:38:30 -07009235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009236 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009237 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009238 return ;
9239}
Jeff Johnson295189b2012-06-20 16:38:30 -07009240/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009241 * FUNCTION: WDA_WowlExitReqCallback
9242 * Free memory and send WOWL Exit RSP back to PE.
9243 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9244 */
9245void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9246{
9247 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9248 tWDA_CbContext *pWDA;
9249 tSirHalWowlExitParams *pWowlExitParams;
9250
9251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9252 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9253
9254 if(NULL == pWdaParams)
9255 {
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9257 "%s: pWdaParams received NULL", __func__);
9258 VOS_ASSERT(0);
9259 return;
9260 }
9261
9262 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9263 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9264 pWowlExitParams->status = wdiStatus;
9265
9266 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9267 {
9268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9269 vos_mem_free(pWdaParams);
9270 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9271 }
9272
9273 return;
9274}
9275/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 * FUNCTION: WDA_ProcessWowlExitReq
9277 * Request to WDI to add WOWL Bcast pattern
9278 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009279VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9280 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009281{
9282 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009283 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009284 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9285 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9286 sizeof(WDI_WowlExitReqParamsType)) ;
9287 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009289 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009290 if(NULL == wdiWowlExitInfo)
9291 {
9292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009293 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009294 VOS_ASSERT(0);
9295 return VOS_STATUS_E_NOMEM;
9296 }
9297 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9298 if(NULL == pWdaParams)
9299 {
9300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009301 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009302 VOS_ASSERT(0);
9303 vos_mem_free(wdiWowlExitInfo);
9304 return VOS_STATUS_E_NOMEM;
9305 }
9306
9307 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9308 pWowlExitParams->bssIdx;
9309
Yue Ma7f44bbe2013-04-12 11:47:39 -07009310 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9311 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009312
9313 /* Store param pointer as passed in by caller */
9314 /* store Params pass it to WDI */
9315 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9316 pWdaParams->pWdaContext = pWDA;
9317 pWdaParams->wdaMsgParam = pWowlExitParams;
9318
9319 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009320 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009321
Jeff Johnson43971f52012-07-17 12:26:56 -07009322 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 {
9324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9325 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009326 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9328 vos_mem_free(pWdaParams->wdaMsgParam);
9329 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009331 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009332}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009333/*
9334 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9335 * Request to WDI to determine whether a given station is capable of
9336 * using HW-based frame translation
9337 */
9338v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9339 tANI_U8 staIdx)
9340{
9341 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9342}
Jeff Johnson295189b2012-06-20 16:38:30 -07009343/*
9344 * FUNCTION: WDA_NvDownloadReqCallback
9345 * send NV Download RSP back to PE
9346 */
9347void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9348 void* pUserData)
9349{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009350
9351 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9352 tWDA_CbContext *pWDA;
9353
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009355 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009356
9357 if(NULL == pWdaParams)
9358 {
9359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009360 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009361 VOS_ASSERT(0) ;
9362 return ;
9363 }
9364
9365 pWDA = pWdaParams->pWdaContext;
9366
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9369 vos_mem_free(pWdaParams);
9370
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 return ;
9373}
Jeff Johnson295189b2012-06-20 16:38:30 -07009374/*
9375 * FUNCTION: WDA_ProcessNvDownloadReq
9376 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9377 */
9378VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9379{
9380 /* Initialize the local Variables*/
9381 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9382 v_VOID_t *pNvBuffer=NULL;
9383 v_SIZE_t bufferSize = 0;
9384 WDI_Status status = WDI_STATUS_E_FAILURE;
9385 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009386 tWDA_ReqParams *pWdaParams ;
9387
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009389 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 if(NULL == pWDA)
9391 {
9392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009393 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009394 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009395 return VOS_STATUS_E_FAILURE;
9396 }
9397
9398 /* Get the NV structure base address and size from VOS */
9399 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009400 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9401 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 if(NULL == wdiNvDownloadReqParam)
9403 {
9404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009406 VOS_ASSERT(0);
9407 return VOS_STATUS_E_NOMEM;
9408 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 /* Copy Params to wdiNvDownloadReqParam*/
9410 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9411 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009412
9413 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9414 if(NULL == pWdaParams)
9415 {
9416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009417 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009418 VOS_ASSERT(0);
9419 vos_mem_free(wdiNvDownloadReqParam);
9420 return VOS_STATUS_E_NOMEM;
9421 }
9422
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009424 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9425 pWdaParams->wdaMsgParam = NULL;
9426 pWdaParams->pWdaContext = pWDA;
9427
9428
Jeff Johnson295189b2012-06-20 16:38:30 -07009429 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009430
Jeff Johnson295189b2012-06-20 16:38:30 -07009431 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009432 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9433
Jeff Johnson295189b2012-06-20 16:38:30 -07009434 if(IS_WDI_STATUS_FAILURE(status))
9435 {
9436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9437 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9439 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009442}
9443/*
9444 * FUNCTION: WDA_FlushAcReqCallback
9445 * send Flush AC RSP back to TL
9446 */
9447void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9448{
9449 vos_msg_t wdaMsg = {0} ;
9450 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9451 tFlushACReq *pFlushACReqParams;
9452 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009454 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009455 if(NULL == pWdaParams)
9456 {
9457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009458 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009459 VOS_ASSERT(0) ;
9460 return ;
9461 }
9462
9463 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9464 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9465 if(NULL == pFlushACRspParams)
9466 {
9467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009469 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009470 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009471 return ;
9472 }
9473 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9474 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9475 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9476 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9477 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009478 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009479 vos_mem_free(pWdaParams->wdaMsgParam) ;
9480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9481 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9483 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9484 // POST message to TL
9485 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9486
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 return ;
9488}
Jeff Johnson295189b2012-06-20 16:38:30 -07009489/*
9490 * FUNCTION: WDA_ProcessFlushAcReq
9491 * Request to WDI to Update the DELBA REQ params.
9492 */
9493VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9494 tFlushACReq *pFlushAcReqParams)
9495{
9496 WDI_Status status = WDI_STATUS_SUCCESS ;
9497 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9498 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9499 sizeof(WDI_FlushAcReqParamsType)) ;
9500 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009501 if(NULL == wdiFlushAcReqParam)
9502 {
9503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009504 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 VOS_ASSERT(0);
9506 return VOS_STATUS_E_NOMEM;
9507 }
9508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9509 if(NULL == pWdaParams)
9510 {
9511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009513 VOS_ASSERT(0);
9514 vos_mem_free(wdiFlushAcReqParam);
9515 return VOS_STATUS_E_NOMEM;
9516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009518 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009519 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9520 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9521 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9522 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009523 /* Store Flush AC pointer, as this will be used for response */
9524 /* store Params pass it to WDI */
9525 pWdaParams->pWdaContext = pWDA;
9526 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9527 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9529 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009530 if(IS_WDI_STATUS_FAILURE(status))
9531 {
9532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9533 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9534 vos_mem_free(pWdaParams->wdaMsgParam) ;
9535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9536 vos_mem_free(pWdaParams) ;
9537 //TODO: respond to TL with failure
9538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009539 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009540}
Jeff Johnson295189b2012-06-20 16:38:30 -07009541/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009542 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 *
9544 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009545void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009546{
9547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9548 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009549 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009550
9551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009553 if(NULL == pWdaParams)
9554 {
9555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 VOS_ASSERT(0) ;
9558 return ;
9559 }
9560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9561 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9562 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9563 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9564 {
9565 pWDA->wdaAmpSessionOn = VOS_FALSE;
9566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009567 vos_mem_free(pWdaParams->wdaMsgParam) ;
9568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9569 vos_mem_free(pWdaParams) ;
9570 /*
9571 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9572 * param here
9573 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009574 return ;
9575}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009576/*
9577 * FUNCTION: WDA_BtAmpEventReqCallback
9578 * Free memory.
9579 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9580 */
9581void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9582{
9583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9584 tWDA_CbContext *pWDA;
9585 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009586
Yue Ma7f44bbe2013-04-12 11:47:39 -07009587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9588 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9589
9590 if(NULL == pWdaParams)
9591 {
9592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9593 "%s: pWdaParams received NULL", __func__);
9594 VOS_ASSERT(0);
9595 return;
9596 }
9597
9598 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9599 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9600
9601 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9602 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9603 {
9604 pWDA->wdaAmpSessionOn = VOS_FALSE;
9605 }
9606
9607 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9608 {
9609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9610 vos_mem_free(pWdaParams->wdaMsgParam);
9611 vos_mem_free(pWdaParams);
9612 }
9613
9614 return;
9615}
Jeff Johnson295189b2012-06-20 16:38:30 -07009616/*
9617 * FUNCTION: WDA_ProcessBtAmpEventReq
9618 * Request to WDI to Update with BT AMP events.
9619 */
9620VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9621 tSmeBtAmpEvent *pBtAmpEventParams)
9622{
9623 WDI_Status status = WDI_STATUS_SUCCESS ;
9624 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9625 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9626 sizeof(WDI_BtAmpEventParamsType)) ;
9627 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009629 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 if(NULL == wdiBtAmpEventParam)
9631 {
9632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 VOS_ASSERT(0);
9635 return VOS_STATUS_E_NOMEM;
9636 }
9637 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9638 if(NULL == pWdaParams)
9639 {
9640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009641 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009642 VOS_ASSERT(0);
9643 vos_mem_free(wdiBtAmpEventParam);
9644 return VOS_STATUS_E_NOMEM;
9645 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009646 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9647 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009648 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9649 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 /* Store BT AMP event pointer, as this will be used for response */
9651 /* store Params pass it to WDI */
9652 pWdaParams->pWdaContext = pWDA;
9653 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9654 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009655 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009656 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 if(IS_WDI_STATUS_FAILURE(status))
9658 {
9659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9660 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9661 vos_mem_free(pWdaParams->wdaMsgParam) ;
9662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9663 vos_mem_free(pWdaParams) ;
9664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009665 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9666 {
9667 pWDA->wdaAmpSessionOn = VOS_TRUE;
9668 }
9669 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009670}
9671
Jeff Johnson295189b2012-06-20 16:38:30 -07009672/*
9673 * FUNCTION: WDA_FTMCommandReqCallback
9674 * Handle FTM CMD response came from HAL
9675 * Route responce to HDD FTM
9676 */
9677void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9678 void *usrData)
9679{
9680 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009681 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9682 {
9683 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309684 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009685 return;
9686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 /* Release Current FTM Command Request */
9688 vos_mem_free(pWDA->wdaFTMCmdReq);
9689 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009690 /* Post FTM Responce to HDD FTM */
9691 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 return;
9693}
Jeff Johnson295189b2012-06-20 16:38:30 -07009694/*
9695 * FUNCTION: WDA_ProcessFTMCommand
9696 * Send FTM command to WDI
9697 */
9698VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9699 tPttMsgbuffer *pPTTFtmCmd)
9700{
9701 WDI_Status status = WDI_STATUS_SUCCESS;
9702 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009703 ftmCMDReq = (WDI_FTMCommandReqType *)
9704 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9705 if(NULL == ftmCMDReq)
9706 {
9707 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9708 "WDA FTM Command buffer alloc fail");
9709 return VOS_STATUS_E_NOMEM;
9710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009711 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9712 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009714 /* Send command to WDI */
9715 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009716 return status;
9717}
Jeff Johnsone7245742012-09-05 17:12:55 -07009718#ifdef FEATURE_OEM_DATA_SUPPORT
9719/*
9720 * FUNCTION: WDA_StartOemDataReqCallback
9721 *
9722 */
9723void WDA_StartOemDataReqCallback(
9724 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9725 void* pUserData)
9726{
9727 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9729 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009730 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009731
Jeff Johnsone7245742012-09-05 17:12:55 -07009732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009733 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009734
9735 if(NULL == pWdaParams)
9736 {
9737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009738 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009739 VOS_ASSERT(0) ;
9740 return ;
9741 }
9742 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9743
Jeff Johnsone7245742012-09-05 17:12:55 -07009744 if(NULL == pWDA)
9745 {
9746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009747 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009748 VOS_ASSERT(0);
9749 return ;
9750 }
9751
9752 /*
9753 * Allocate memory for response params sent to PE
9754 */
9755 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9756
9757 // Check if memory is allocated for OemdataMeasRsp Params.
9758 if(NULL == pOemDataRspParams)
9759 {
9760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9761 "OEM DATA WDA callback alloc fail");
9762 VOS_ASSERT(0) ;
9763 return;
9764 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009765
Jeff Johnsone7245742012-09-05 17:12:55 -07009766 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9768 vos_mem_free(pWdaParams->wdaMsgParam);
9769 vos_mem_free(pWdaParams) ;
9770
Jeff Johnsone7245742012-09-05 17:12:55 -07009771 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009772 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009773 * Also, here success always means that we have atleast one BSSID.
9774 */
9775 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9776
9777 //enable Tx
9778 status = WDA_ResumeDataTx(pWDA);
9779 if(status != VOS_STATUS_SUCCESS)
9780 {
9781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9782 }
9783 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9784 return ;
9785}
9786/*
9787 * FUNCTION: WDA_ProcessStartOemDataReq
9788 * Send Start Oem Data Req to WDI
9789 */
9790VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9791 tStartOemDataReq *pOemDataReqParams)
9792{
9793 WDI_Status status = WDI_STATUS_SUCCESS;
9794 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009795 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009796
9797 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9798
9799 if(NULL == wdiOemDataReqParams)
9800 {
9801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009803 VOS_ASSERT(0);
9804 return VOS_STATUS_E_NOMEM;
9805 }
9806
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009807 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9808 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9809 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9810 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009811
9812 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9813
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009814 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9815 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009816 {
9817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009818 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009819 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009820 vos_mem_free(pOemDataReqParams);
9821 VOS_ASSERT(0);
9822 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009823 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009824
Bernald44a1ae2013-01-09 08:30:39 -08009825 pWdaParams->pWdaContext = (void*)pWDA;
9826 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9827 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009828
9829 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9830 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009831
9832 if(IS_WDI_STATUS_FAILURE(status))
9833 {
9834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9835 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9837 vos_mem_free(pWdaParams->wdaMsgParam);
9838 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009839 }
9840 return CONVERT_WDI2VOS_STATUS(status) ;
9841}
9842#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009843/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009844 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 *
9846 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009847void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009848{
9849 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009851 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 if(NULL == pWdaParams)
9853 {
9854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009855 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009856 VOS_ASSERT(0) ;
9857 return ;
9858 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009859
9860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9861 vos_mem_free(pWdaParams->wdaMsgParam);
9862 vos_mem_free(pWdaParams);
9863
9864 return ;
9865}
9866/*
9867 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9868 * Free memory.
9869 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
9870 */
9871void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
9872{
9873 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9874
9875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9876 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9877
9878 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 {
Yue Ma7f44bbe2013-04-12 11:47:39 -07009880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9881 "%s: pWdaParams received NULL", __func__);
9882 VOS_ASSERT(0);
9883 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009884 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009885
9886 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 {
9888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009889 vos_mem_free(pWdaParams->wdaMsgParam);
9890 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009891 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009892
9893 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009894}
Jeff Johnson295189b2012-06-20 16:38:30 -07009895#ifdef WLAN_FEATURE_GTK_OFFLOAD
9896/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009897 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009898 *
9899 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009900void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009901 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009902{
9903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9904
9905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009906 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009907
9908 VOS_ASSERT(NULL != pWdaParams);
9909
9910 vos_mem_free(pWdaParams->wdaMsgParam) ;
9911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9912 vos_mem_free(pWdaParams) ;
9913
9914 //print a msg, nothing else to do
9915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009916 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009917
9918 return ;
9919}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009920/*
9921 * FUNCTION: WDA_GTKOffloadReqCallback
9922 * Free memory.
9923 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
9924 */
9925void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9926{
9927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009928
Yue Ma7f44bbe2013-04-12 11:47:39 -07009929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9930 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9931
9932 if(NULL == pWdaParams)
9933 {
9934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9935 "%s: pWdaParams received NULL", __func__);
9936 VOS_ASSERT(0);
9937 return;
9938 }
9939
9940 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9941 {
9942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9943 vos_mem_free(pWdaParams->wdaMsgParam);
9944 vos_mem_free(pWdaParams);
9945 }
9946
9947 return;
9948}
Jeff Johnson295189b2012-06-20 16:38:30 -07009949/*
9950 * FUNCTION: WDA_ProcessGTKOffloadReq
9951 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9952 * to broadcast traffic (sta mode).
9953 */
9954VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9955 tpSirGtkOffloadParams pGtkOffloadParams)
9956{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309957 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009958 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9959 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9960 sizeof(WDI_GtkOffloadReqMsg)) ;
9961 tWDA_ReqParams *pWdaParams ;
9962
9963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009964 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009965
9966 if(NULL == wdiGtkOffloadReqMsg)
9967 {
9968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009969 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009970 VOS_ASSERT(0);
9971 return VOS_STATUS_E_NOMEM;
9972 }
9973
9974 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9975 if(NULL == pWdaParams)
9976 {
9977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009979 VOS_ASSERT(0);
9980 vos_mem_free(wdiGtkOffloadReqMsg);
9981 return VOS_STATUS_E_NOMEM;
9982 }
9983
9984 //
9985 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9986 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009987
9988 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309989 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009990
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9992 // Copy KCK
9993 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9994 // Copy KEK
9995 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9996 // Copy KeyReplayCounter
9997 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9998 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9999
Yue Ma7f44bbe2013-04-12 11:47:39 -070010000 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10001 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010002
Jeff Johnson295189b2012-06-20 16:38:30 -070010003
10004 /* Store Params pass it to WDI */
10005 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10006 pWdaParams->pWdaContext = pWDA;
10007 /* Store param pointer as passed in by caller */
10008 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10009
Yue Ma7f44bbe2013-04-12 11:47:39 -070010010 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010011
10012 if(IS_WDI_STATUS_FAILURE(status))
10013 {
10014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10015 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10016 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10017 vos_mem_free(pWdaParams->wdaMsgParam);
10018 vos_mem_free(pWdaParams);
10019 }
10020
10021 return CONVERT_WDI2VOS_STATUS(status) ;
10022}
10023
10024/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010025 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 *
10027 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010028void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010029 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010030{
10031 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10032 tWDA_CbContext *pWDA;
10033 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010034 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 vos_msg_t vosMsg;
10036
10037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010038 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010039
10040 VOS_ASSERT(NULL != pWdaParams);
10041
10042 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10043 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10044
10045 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10046 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10047
10048 /* Message Header */
10049 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010050 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010051
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010052 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10053 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10054 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10055 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10056 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010057
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010058 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10059 pwdiGtkOffloadGetInfoRsparams->bssId,
10060 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010061 /* VOS message wrapper */
10062 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10063 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10064 vosMsg.bodyval = 0;
10065
10066 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10067 {
10068 /* free the mem and return */
10069 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10070 }
10071
10072 vos_mem_free(pWdaParams->wdaMsgParam) ;
10073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10074 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010075
10076 return;
10077}
10078/*
10079 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10080 * Free memory and send RSP back to SME.
10081 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10082 */
10083void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10084{
10085 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10086 vos_msg_t vosMsg;
10087
10088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10089 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10090
10091 if(NULL == pWdaParams)
10092 {
10093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10094 "%s: pWdaParams received NULL", __func__);
10095 VOS_ASSERT(0);
10096 return;
10097 }
10098
10099 /* VOS message wrapper */
10100 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10101 vosMsg.bodyptr = NULL;
10102 vosMsg.bodyval = 0;
10103
10104 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10105 {
10106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10107 vos_mem_free(pWdaParams->wdaMsgParam);
10108 vos_mem_free(pWdaParams);
10109 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10110 }
10111
10112 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010113}
10114#endif
10115
10116/*
10117 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10118 * Request to WDI to set Tx Per Tracking configurations
10119 */
10120VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10121{
10122 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010123 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010124 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10125 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10126 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10127 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010129 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010130 if(NULL == pwdiSetTxPerTrackingReqParams)
10131 {
10132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010133 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010134 vos_mem_free(pTxPerTrackingParams);
10135 VOS_ASSERT(0);
10136 return VOS_STATUS_E_NOMEM;
10137 }
10138 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10139 if(NULL == pWdaParams)
10140 {
10141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010142 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10144 vos_mem_free(pTxPerTrackingParams);
10145 VOS_ASSERT(0);
10146 return VOS_STATUS_E_NOMEM;
10147 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010148 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10149 pTxPerTrackingParams->ucTxPerTrackingEnable;
10150 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10151 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10152 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10153 pTxPerTrackingParams->ucTxPerTrackingRatio;
10154 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10155 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010156 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10157 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010158 /* Store param pointer as passed in by caller */
10159 /* store Params pass it to WDI
10160 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10161 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10162 pWdaParams->pWdaContext = pWDA;
10163 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010164 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010165 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010166 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010167 {
10168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10169 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010170 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010171 vos_mem_free(pWdaParams->wdaMsgParam) ;
10172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10173 vos_mem_free(pWdaParams) ;
10174 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010175 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010176
10177}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010178/*
10179 * FUNCTION: WDA_HALDumpCmdCallback
10180 * Send the VOS complete .
10181 */
10182void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10183 void* pUserData)
10184{
10185 tANI_U8 *buffer = NULL;
10186 tWDA_CbContext *pWDA = NULL;
10187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010188 if(NULL == pWdaParams)
10189 {
10190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010191 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 VOS_ASSERT(0) ;
10193 return ;
10194 }
10195
10196 pWDA = pWdaParams->pWdaContext;
10197 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010198 if(wdiRspParams->usBufferLen > 0)
10199 {
10200 /*Copy the Resp data to UMAC supplied buffer*/
10201 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10202 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10204 vos_mem_free(pWdaParams);
10205
10206 /* Indicate VOSS about the start complete */
10207 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 return ;
10209}
10210
Jeff Johnson295189b2012-06-20 16:38:30 -070010211/*
10212 * FUNCTION: WDA_ProcessHALDumpCmdReq
10213 * Send Dump command to WDI
10214 */
10215VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10216 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10217 tANI_U32 arg4, tANI_U8 *pBuffer)
10218{
10219 WDI_Status status = WDI_STATUS_SUCCESS;
10220 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10221 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10222 tWDA_ReqParams *pWdaParams ;
10223 pVosContextType pVosContext = NULL;
10224 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010225 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10226 (void *)pMac);
10227
10228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10229 if(NULL == pWdaParams)
10230 {
10231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 return VOS_STATUS_E_NOMEM;
10234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 /* Allocate memory WDI request structure*/
10236 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10237 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10238 if(NULL == wdiHALDumpCmdReqParam)
10239 {
10240 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10241 "WDA HAL DUMP Command buffer alloc fail");
10242 vos_mem_free(pWdaParams);
10243 return WDI_STATUS_E_FAILURE;
10244 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 /* Extract the arguments */
10247 wdiHalDumpCmdInfo->command = cmd;
10248 wdiHalDumpCmdInfo->argument1 = arg1;
10249 wdiHalDumpCmdInfo->argument2 = arg2;
10250 wdiHalDumpCmdInfo->argument3 = arg3;
10251 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10254
10255 /* Response message will be passed through the buffer */
10256 pWdaParams->wdaMsgParam = (void *)pBuffer;
10257
10258 /* store Params pass it to WDI */
10259 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010260 /* Send command to WDI */
10261 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010262 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010263 if ( vStatus != VOS_STATUS_SUCCESS )
10264 {
10265 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10266 {
10267 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010268 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 }
10270 else
10271 {
10272 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010273 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 }
10275 VOS_ASSERT(0);
10276 }
10277 return status;
10278}
Jeff Johnson295189b2012-06-20 16:38:30 -070010279#ifdef WLAN_FEATURE_GTK_OFFLOAD
10280/*
10281 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10282 * Request to WDI to get GTK Offload Information
10283 */
10284VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10285 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10286{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010287 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10289 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10290 tWDA_ReqParams *pWdaParams ;
10291
10292 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10293 {
10294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 VOS_ASSERT(0);
10297 return VOS_STATUS_E_NOMEM;
10298 }
10299
10300 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10301 if(NULL == pWdaParams)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010304 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 VOS_ASSERT(0);
10306 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10307 return VOS_STATUS_E_NOMEM;
10308 }
10309
Yue Ma7f44bbe2013-04-12 11:47:39 -070010310 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10311 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010312
Jeff Johnson295189b2012-06-20 16:38:30 -070010313 /* Store Params pass it to WDI */
10314 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10315 pWdaParams->pWdaContext = pWDA;
10316 /* Store param pointer as passed in by caller */
10317 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10318
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010319 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010320 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010321
Yue Ma7f44bbe2013-04-12 11:47:39 -070010322 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010323
10324 if(IS_WDI_STATUS_FAILURE(status))
10325 {
10326 /* failure returned by WDI API */
10327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10328 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10330 vos_mem_free(pWdaParams) ;
10331 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10332 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10333 }
10334
10335 return CONVERT_WDI2VOS_STATUS(status) ;
10336}
10337#endif // WLAN_FEATURE_GTK_OFFLOAD
10338
10339/*
10340 * -------------------------------------------------------------------------
10341 * DATA interface with WDI for Mgmt Frames
10342 * -------------------------------------------------------------------------
10343 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010344/*
10345 * FUNCTION: WDA_TxComplete
10346 * Callback function for the WDA_TxPacket
10347 */
10348VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10349 VOS_STATUS status )
10350{
10351
10352 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10353 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010354 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010355
10356 if(NULL == wdaContext)
10357 {
10358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10359 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010360 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 VOS_ASSERT(0);
10362 return VOS_STATUS_E_FAILURE;
10363 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010364
10365 /*Check if frame was timed out or not*/
10366 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10367 (v_PVOID_t)&uUserData);
10368
10369 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10370 {
10371 /*Discard frame - no further processing is needed*/
10372 vos_pkt_return_packet(pData);
10373 return VOS_STATUS_SUCCESS;
10374 }
10375
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10377 if( NULL!=wdaContext->pTxCbFunc)
10378 {
10379 /*check if packet is freed already*/
10380 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10381 {
10382 wdaContext->pTxCbFunc(pMac, pData);
10383 }
10384 else
10385 {
10386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010387 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010388 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010389 //Return from here since we reaching here because the packet already timeout
10390 return status;
10391 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010392 }
10393
10394 /*
10395 * Trigger the event to bring the HAL TL Tx complete function to come
10396 * out of wait
10397 * Let the coe above to complete the packet first. When this event is set,
10398 * the thread waiting for the event may run and set Vospacket_freed causing the original
10399 * packet not being freed.
10400 */
10401 status = vos_event_set(&wdaContext->txFrameEvent);
10402 if(!VOS_IS_STATUS_SUCCESS(status))
10403 {
10404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10405 "NEW VOS Event Set failed - status = %d \n", status);
10406 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010407 return status;
10408}
Jeff Johnson295189b2012-06-20 16:38:30 -070010409/*
10410 * FUNCTION: WDA_TxPacket
10411 * Forward TX management frame to WDI
10412 */
10413VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10414 void *pFrmBuf,
10415 tANI_U16 frmLen,
10416 eFrameType frmType,
10417 eFrameTxDir txDir,
10418 tANI_U8 tid,
10419 pWDATxRxCompFunc pCompFunc,
10420 void *pData,
10421 pWDAAckFnTxComp pAckTxComp,
10422 tANI_U8 txFlag)
10423{
10424 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10425 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10426 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10427 tANI_U8 eventIdx = 0;
10428 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10429 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010430 if((NULL == pWDA)||(NULL == pFrmBuf))
10431 {
10432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010433 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010434 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010435 VOS_ASSERT(0);
10436 return VOS_STATUS_E_FAILURE;
10437 }
10438
10439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010440 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010441 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10442 if(NULL == pMac)
10443 {
10444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010445 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010446 VOS_ASSERT(0);
10447 return VOS_STATUS_E_FAILURE;
10448 }
10449
10450
10451
10452 /* store the call back function in WDA context */
10453 pWDA->pTxCbFunc = pCompFunc;
10454 /* store the call back for the function of ackTxComplete */
10455 if( pAckTxComp )
10456 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010457 if( NULL != pWDA->pAckTxCbFunc )
10458 {
10459 /* Already TxComp is active no need to active again */
10460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10461 "There is already one request pending for tx complete\n");
10462 pWDA->pAckTxCbFunc( pMac, 0);
10463 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010464
Jeff Johnsone7245742012-09-05 17:12:55 -070010465 if( VOS_STATUS_SUCCESS !=
10466 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10467 {
10468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10469 "Tx Complete timeout Timer Stop Failed ");
10470 }
10471 else
10472 {
10473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010474 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010475 }
10476 }
10477
10478 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
10479 pWDA->pAckTxCbFunc = pAckTxComp;
10480 if( VOS_STATUS_SUCCESS !=
10481 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
10482 {
10483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10484 "Tx Complete Timer Start Failed ");
10485 pWDA->pAckTxCbFunc = NULL;
10486 return eHAL_STATUS_FAILURE;
10487 }
10488 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010489 /* Reset the event to be not signalled */
10490 status = vos_event_reset(&pWDA->txFrameEvent);
10491 if(!VOS_IS_STATUS_SUCCESS(status))
10492 {
10493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10494 "VOS Event reset failed - status = %d\n",status);
10495 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
10496 if( pAckTxComp )
10497 {
10498 pWDA->pAckTxCbFunc = NULL;
10499 if( VOS_STATUS_SUCCESS !=
10500 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10501 {
10502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10503 "Tx Complete timeout Timer Stop Failed ");
10504 }
10505 }
10506 return VOS_STATUS_E_FAILURE;
10507 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010508
10509 /* If Peer Sta mask is set don't overwrite to self sta */
10510 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070010511 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010512 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070010513 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010514 else
10515 {
Ganesh K08bce952012-12-13 15:04:41 -080010516 /* Get system role, use the self station if in unknown role or STA role */
10517 systemRole = wdaGetGlobalSystemRole(pMac);
10518 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
10519 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080010520#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080010521 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010522#endif
Ganesh K08bce952012-12-13 15:04:41 -080010523 ))
10524 {
10525 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
10526 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080010527 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010528
Jeff Johnsone7245742012-09-05 17:12:55 -070010529 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
10530 disassoc frame reaches the HW, HAL has already deleted the peer station */
10531 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070010532 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080010533 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070010534 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010535 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010536 /*Send Probe request frames on self sta idx*/
10537 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070010538 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 /* Since we donot want probe responses to be retried, send probe responses
10540 through the NO_ACK queues */
10541 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
10542 {
10543 //probe response is sent out using self station and no retries options.
10544 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
10545 }
10546 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
10547 {
10548 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
10549 }
10550 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
10552
10553 /*Set frame tag to 0
10554 We will use the WDA user data in order to tag a frame as expired*/
10555 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10556 (v_PVOID_t)0);
10557
10558
10559 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
10560 frmLen, ucTypeSubType, tid,
10561 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
10562 {
10563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10564 "Sending Mgmt Frame failed - status = %d\n", status);
10565 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
10566 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
10567 if( pAckTxComp )
10568 {
10569 pWDA->pAckTxCbFunc = NULL;
10570 if( VOS_STATUS_SUCCESS !=
10571 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10572 {
10573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10574 "Tx Complete timeout Timer Stop Failed ");
10575 }
10576 }
10577 return VOS_STATUS_E_FAILURE;
10578 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010579 /*
10580 * Wait for the event to be set by the TL, to get the response of TX
10581 * complete, this event should be set by the Callback function called by TL
10582 */
10583 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
10584 &eventIdx);
10585 if(!VOS_IS_STATUS_SUCCESS(status))
10586 {
10587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10588 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010589 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010590 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
10591 after the packet gets completed(packet freed once)*/
10592
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010593 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070010594 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010595
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010596 /*Tag Frame as timed out for later deletion*/
10597 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10598 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
10599
Jeff Johnson295189b2012-06-20 16:38:30 -070010600 /* check whether the packet was freed already,so need not free again when
10601 * TL calls the WDA_Txcomplete routine
10602 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010603 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
10604 /*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 -070010605 {
10606 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010607 } */
10608
Jeff Johnson295189b2012-06-20 16:38:30 -070010609 if( pAckTxComp )
10610 {
10611 pWDA->pAckTxCbFunc = NULL;
10612 if( VOS_STATUS_SUCCESS !=
10613 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10614 {
10615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10616 "Tx Complete timeout Timer Stop Failed ");
10617 }
10618 }
10619 status = VOS_STATUS_E_FAILURE;
10620 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053010621#ifdef WLAN_DUMP_MGMTFRAMES
10622 if (VOS_IS_STATUS_SUCCESS(status))
10623 {
10624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10625 "%s() TX packet : SubType %d", __func__,pFc->subType);
10626 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10627 pData, frmLen);
10628 }
10629#endif
10630
Jeff Johnson295189b2012-06-20 16:38:30 -070010631 return status;
10632}
Jeff Johnson295189b2012-06-20 16:38:30 -070010633/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053010634 * FUNCTION: WDA_ProcessDHCPStartInd
10635 * Forward DHCP Start to WDI
10636 */
10637static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
10638 tAniDHCPInd *dhcpStartInd)
10639{
10640 WDI_Status status;
10641 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10642 if (NULL == wdiDHCPInd)
10643 {
10644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10645 "%s: VOS MEM Alloc Failure", __func__);
10646 VOS_ASSERT(0);
10647 vos_mem_free(dhcpStartInd);
10648 return VOS_STATUS_E_NOMEM;
10649 }
10650
10651 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
10652 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
10653 sizeof(tSirMacAddr));
10654
10655 status = WDI_dhcpStartInd(wdiDHCPInd);
10656
10657 if (IS_WDI_STATUS_FAILURE(status))
10658 {
10659 vos_mem_free(wdiDHCPInd);
10660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10661 "DHCP Start Indication failed");
10662 }
10663 vos_mem_free(dhcpStartInd);
10664 return CONVERT_WDI2VOS_STATUS(status) ;
10665}
10666
10667 /*
10668 * FUNCTION: WDA_ProcessDHCPStopInd
10669 * Forward DHCP Stop to WDI
10670 */
10671 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
10672 tAniDHCPInd *dhcpStopInd)
10673 {
10674 WDI_Status status;
10675 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10676 if (NULL == wdiDHCPInd)
10677 {
10678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10679 "%s: VOS MEM Alloc Failure", __func__);
10680 VOS_ASSERT(0);
10681 vos_mem_free(dhcpStopInd);
10682 return VOS_STATUS_E_NOMEM;
10683 }
10684 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
10685 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
10686 status = WDI_dhcpStopInd(wdiDHCPInd);
10687 if (IS_WDI_STATUS_FAILURE(status))
10688 {
10689 vos_mem_free(wdiDHCPInd);
10690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10691 "DHCP Start Indication failed");
10692 }
10693 vos_mem_free(dhcpStopInd);
10694 return CONVERT_WDI2VOS_STATUS(status) ;
10695 }
10696
10697/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010698 * FUNCTION: WDA_McProcessMsg
10699 * Trigger DAL-AL to start CFG download
10700 */
10701VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10702{
10703 VOS_STATUS status = VOS_STATUS_SUCCESS;
10704 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010705 if(NULL == pMsg)
10706 {
10707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010708 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010709 VOS_ASSERT(0);
10710 return VOS_STATUS_E_FAILURE;
10711 }
10712
10713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010714 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010715
10716 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10717 if(NULL == pWDA )
10718 {
10719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010720 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010721 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010722 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010723 return VOS_STATUS_E_FAILURE;
10724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 /* Process all the WDA messages.. */
10726 switch( pMsg->type )
10727 {
10728 case WNI_CFG_DNLD_REQ:
10729 {
10730 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 /* call WDA complete event if config download success */
10732 if( VOS_IS_STATUS_SUCCESS(status) )
10733 {
10734 vos_WDAComplete_cback(pVosContext);
10735 }
10736 else
10737 {
10738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10739 "WDA Config Download failure" );
10740 }
10741 break ;
10742 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 /*
10744 * Init SCAN request from PE, convert it into DAL format
10745 * and send it to DAL
10746 */
10747 case WDA_INIT_SCAN_REQ:
10748 {
10749 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10750 break ;
10751 }
10752 /* start SCAN request from PE */
10753 case WDA_START_SCAN_REQ:
10754 {
10755 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10756 break ;
10757 }
10758 /* end SCAN request from PE */
10759 case WDA_END_SCAN_REQ:
10760 {
10761 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10762 break ;
10763 }
10764 /* end SCAN request from PE */
10765 case WDA_FINISH_SCAN_REQ:
10766 {
10767 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10768 break ;
10769 }
10770 /* join request from PE */
10771 case WDA_CHNL_SWITCH_REQ:
10772 {
10773 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10774 {
10775 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10776 }
10777 else
10778 {
10779 WDA_ProcessChannelSwitchReq(pWDA,
10780 (tSwitchChannelParams*)pMsg->bodyptr) ;
10781 }
10782 break ;
10783 }
10784 /* ADD BSS request from PE */
10785 case WDA_ADD_BSS_REQ:
10786 {
10787 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10788 break ;
10789 }
10790 case WDA_ADD_STA_REQ:
10791 {
10792 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10793 break ;
10794 }
10795 case WDA_DELETE_BSS_REQ:
10796 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010797 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10798 break ;
10799 }
10800 case WDA_DELETE_STA_REQ:
10801 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010802 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10803 break ;
10804 }
10805 case WDA_CONFIG_PARAM_UPDATE_REQ:
10806 {
10807 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10808 break ;
10809 }
10810 case WDA_SET_BSSKEY_REQ:
10811 {
10812 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10813 break ;
10814 }
10815 case WDA_SET_STAKEY_REQ:
10816 {
10817 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10818 break ;
10819 }
10820 case WDA_SET_STA_BCASTKEY_REQ:
10821 {
10822 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10823 break ;
10824 }
10825 case WDA_REMOVE_BSSKEY_REQ:
10826 {
10827 WDA_ProcessRemoveBssKeyReq(pWDA,
10828 (tRemoveBssKeyParams *)pMsg->bodyptr);
10829 break ;
10830 }
10831 case WDA_REMOVE_STAKEY_REQ:
10832 {
10833 WDA_ProcessRemoveStaKeyReq(pWDA,
10834 (tRemoveStaKeyParams *)pMsg->bodyptr);
10835 break ;
10836 }
10837 case WDA_REMOVE_STA_BCASTKEY_REQ:
10838 {
10839 /* TODO: currently UMAC is not sending this request, Add the code for
10840 handling this request when UMAC supports */
10841 break;
10842 }
10843#ifdef FEATURE_WLAN_CCX
10844 case WDA_TSM_STATS_REQ:
10845 {
10846 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10847 break;
10848 }
10849#endif
10850 case WDA_UPDATE_EDCA_PROFILE_IND:
10851 {
10852 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10853 break;
10854 }
10855 case WDA_ADD_TS_REQ:
10856 {
10857 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10858 break;
10859 }
10860 case WDA_DEL_TS_REQ:
10861 {
10862 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
10863 break;
10864 }
10865 case WDA_ADDBA_REQ:
10866 {
10867 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
10868 break;
10869 }
10870 case WDA_DELBA_IND:
10871 {
10872 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
10873 break;
10874 }
10875 case WDA_SET_LINK_STATE:
10876 {
10877 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
10878 break;
10879 }
10880 case WDA_GET_STATISTICS_REQ:
10881 {
10882 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
10883 break;
10884 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080010885#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
10886 case WDA_GET_ROAM_RSSI_REQ:
10887 {
10888 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
10889 break;
10890 }
10891#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010892 case WDA_PWR_SAVE_CFG:
10893 {
10894 if(pWDA->wdaState == WDA_READY_STATE)
10895 {
10896 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
10897 }
10898 else
10899 {
10900 if(NULL != pMsg->bodyptr)
10901 {
10902 vos_mem_free(pMsg->bodyptr);
10903 }
10904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10905 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
10906 }
10907 break;
10908 }
10909 case WDA_ENTER_IMPS_REQ:
10910 {
10911 if(pWDA->wdaState == WDA_READY_STATE)
10912 {
10913 WDA_ProcessEnterImpsReq(pWDA);
10914 }
10915 else
10916 {
10917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10918 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10919 }
10920 break;
10921 }
10922 case WDA_EXIT_IMPS_REQ:
10923 {
10924 if(pWDA->wdaState == WDA_READY_STATE)
10925 {
10926 WDA_ProcessExitImpsReq(pWDA);
10927 }
10928 else
10929 {
10930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10931 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10932 }
10933 break;
10934 }
10935 case WDA_ENTER_BMPS_REQ:
10936 {
10937 if(pWDA->wdaState == WDA_READY_STATE)
10938 {
10939 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
10940 }
10941 else
10942 {
10943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10944 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10945 }
10946 break;
10947 }
10948 case WDA_EXIT_BMPS_REQ:
10949 {
10950 if(pWDA->wdaState == WDA_READY_STATE)
10951 {
10952 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
10953 }
10954 else
10955 {
10956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10957 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10958 }
10959 break;
10960 }
10961 case WDA_ENTER_UAPSD_REQ:
10962 {
10963 if(pWDA->wdaState == WDA_READY_STATE)
10964 {
10965 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
10966 }
10967 else
10968 {
10969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10970 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10971 }
10972 break;
10973 }
10974 case WDA_EXIT_UAPSD_REQ:
10975 {
10976 if(pWDA->wdaState == WDA_READY_STATE)
10977 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010978 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 }
10980 else
10981 {
10982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10983 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10984 }
10985 break;
10986 }
10987 case WDA_UPDATE_UAPSD_IND:
10988 {
10989 if(pWDA->wdaState == WDA_READY_STATE)
10990 {
10991 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
10992 }
10993 else
10994 {
10995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10996 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
10997 }
10998 break;
10999 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011000 case WDA_REGISTER_PE_CALLBACK :
11001 {
11002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11003 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11004 /*TODO: store the PE callback */
11005 /* Do Nothing? MSG Body should be freed at here */
11006 if(NULL != pMsg->bodyptr)
11007 {
11008 vos_mem_free(pMsg->bodyptr);
11009 }
11010 break;
11011 }
11012 case WDA_SYS_READY_IND :
11013 {
11014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11015 "Handling msg type WDA_SYS_READY_IND " );
11016 pWDA->wdaState = WDA_READY_STATE;
11017 if(NULL != pMsg->bodyptr)
11018 {
11019 vos_mem_free(pMsg->bodyptr);
11020 }
11021 break;
11022 }
11023 case WDA_BEACON_FILTER_IND :
11024 {
11025 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11026 break;
11027 }
11028 case WDA_BTC_SET_CFG:
11029 {
11030 /*TODO: handle this while dealing with BTC */
11031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11032 "Handling msg type WDA_BTC_SET_CFG " );
11033 /* Do Nothing? MSG Body should be freed at here */
11034 if(NULL != pMsg->bodyptr)
11035 {
11036 vos_mem_free(pMsg->bodyptr);
11037 }
11038 break;
11039 }
11040 case WDA_SIGNAL_BT_EVENT:
11041 {
11042 /*TODO: handle this while dealing with BTC */
11043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11044 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11045 /* Do Nothing? MSG Body should be freed at here */
11046 if(NULL != pMsg->bodyptr)
11047 {
11048 vos_mem_free(pMsg->bodyptr);
11049 }
11050 break;
11051 }
11052 case WDA_CFG_RXP_FILTER_REQ:
11053 {
11054 WDA_ProcessConfigureRxpFilterReq(pWDA,
11055 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11056 break;
11057 }
11058 case WDA_SET_HOST_OFFLOAD:
11059 {
11060 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11061 break;
11062 }
11063 case WDA_SET_KEEP_ALIVE:
11064 {
11065 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11066 break;
11067 }
11068#ifdef WLAN_NS_OFFLOAD
11069 case WDA_SET_NS_OFFLOAD:
11070 {
11071 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11072 break;
11073 }
11074#endif //WLAN_NS_OFFLOAD
11075 case WDA_ADD_STA_SELF_REQ:
11076 {
11077 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11078 break;
11079 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011080 case WDA_DEL_STA_SELF_REQ:
11081 {
11082 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11083 break;
11084 }
11085 case WDA_WOWL_ADD_BCAST_PTRN:
11086 {
11087 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11088 break;
11089 }
11090 case WDA_WOWL_DEL_BCAST_PTRN:
11091 {
11092 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11093 break;
11094 }
11095 case WDA_WOWL_ENTER_REQ:
11096 {
11097 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11098 break;
11099 }
11100 case WDA_WOWL_EXIT_REQ:
11101 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011102 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 break;
11104 }
11105 case WDA_TL_FLUSH_AC_REQ:
11106 {
11107 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11108 break;
11109 }
11110 case WDA_SIGNAL_BTAMP_EVENT:
11111 {
11112 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11113 break;
11114 }
11115#ifdef WDA_UT
11116 case WDA_WDI_EVENT_MSG:
11117 {
11118 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11119 break ;
11120 }
11121#endif
11122 case WDA_UPDATE_BEACON_IND:
11123 {
11124 WDA_ProcessUpdateBeaconParams(pWDA,
11125 (tUpdateBeaconParams *)pMsg->bodyptr);
11126 break;
11127 }
11128 case WDA_SEND_BEACON_REQ:
11129 {
11130 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11131 break;
11132 }
11133 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11134 {
11135 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11136 (tSendProbeRespParams *)pMsg->bodyptr);
11137 break;
11138 }
11139#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11140 case WDA_SET_MAX_TX_POWER_REQ:
11141 {
11142 WDA_ProcessSetMaxTxPowerReq(pWDA,
11143 (tMaxTxPowerParams *)pMsg->bodyptr);
11144 break;
11145 }
11146#endif
schang86c22c42013-03-13 18:41:24 -070011147 case WDA_SET_TX_POWER_REQ:
11148 {
11149 WDA_ProcessSetTxPowerReq(pWDA,
11150 (tSirSetTxPowerReq *)pMsg->bodyptr);
11151 break;
11152 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 case WDA_SET_P2P_GO_NOA_REQ:
11154 {
11155 WDA_ProcessSetP2PGONOAReq(pWDA,
11156 (tP2pPsParams *)pMsg->bodyptr);
11157 break;
11158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011159 /* timer related messages */
11160 case WDA_TIMER_BA_ACTIVITY_REQ:
11161 {
11162 WDA_BaCheckActivity(pWDA) ;
11163 break ;
11164 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011165
11166 /* timer related messages */
11167 case WDA_TIMER_TRAFFIC_STATS_IND:
11168 {
11169 WDA_TimerTrafficStatsInd(pWDA);
11170 break;
11171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011172#ifdef WLAN_FEATURE_VOWIFI_11R
11173 case WDA_AGGR_QOS_REQ:
11174 {
11175 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11176 break;
11177 }
11178#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011179 case WDA_FTM_CMD_REQ:
11180 {
11181 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11182 break ;
11183 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011184#ifdef FEATURE_OEM_DATA_SUPPORT
11185 case WDA_START_OEM_DATA_REQ:
11186 {
11187 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11188 break;
11189 }
11190#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 /* Tx Complete Time out Indication */
11192 case WDA_TX_COMPLETE_TIMEOUT_IND:
11193 {
11194 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11195 break;
11196 }
11197 case WDA_WLAN_SUSPEND_IND:
11198 {
11199 WDA_ProcessWlanSuspendInd(pWDA,
11200 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11201 break;
11202 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 case WDA_WLAN_RESUME_REQ:
11204 {
11205 WDA_ProcessWlanResumeReq(pWDA,
11206 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11207 break;
11208 }
11209
11210 case WDA_UPDATE_CF_IND:
11211 {
11212 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11213 pMsg->bodyptr = NULL;
11214 break;
11215 }
11216#ifdef FEATURE_WLAN_SCAN_PNO
11217 case WDA_SET_PNO_REQ:
11218 {
11219 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11220 break;
11221 }
11222 case WDA_UPDATE_SCAN_PARAMS_REQ:
11223 {
11224 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11225 break;
11226 }
11227 case WDA_SET_RSSI_FILTER_REQ:
11228 {
11229 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11230 break;
11231 }
11232#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011233#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011234 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011235 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011236 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011237 break;
11238 }
11239#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011240 case WDA_SET_TX_PER_TRACKING_REQ:
11241 {
11242 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11243 break;
11244 }
11245
11246#ifdef WLAN_FEATURE_PACKET_FILTERING
11247 case WDA_8023_MULTICAST_LIST_REQ:
11248 {
11249 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11250 break;
11251 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11253 {
11254 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11255 break;
11256 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011257 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11258 {
11259 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11260 break;
11261 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011262 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11263 {
11264 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11265 break;
11266 }
11267#endif // WLAN_FEATURE_PACKET_FILTERING
11268
11269
11270 case WDA_TRANSMISSION_CONTROL_IND:
11271 {
11272 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11273 break;
11274 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011275 case WDA_SET_POWER_PARAMS_REQ:
11276 {
11277 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11278 break;
11279 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011280#ifdef WLAN_FEATURE_GTK_OFFLOAD
11281 case WDA_GTK_OFFLOAD_REQ:
11282 {
11283 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11284 break;
11285 }
11286
11287 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11288 {
11289 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11290 break;
11291 }
11292#endif //WLAN_FEATURE_GTK_OFFLOAD
11293
11294 case WDA_SET_TM_LEVEL_REQ:
11295 {
11296 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11297 break;
11298 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011299#ifdef WLAN_FEATURE_11AC
11300 case WDA_UPDATE_OP_MODE:
11301 {
11302 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11303 {
11304 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11305 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11306 else
11307 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11308 " VHT OpMode Feature is Not Supported \n");
11309 }
11310 else
11311 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11312 " 11AC Feature is Not Supported \n");
11313 break;
11314 }
11315#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011316#ifdef WLAN_FEATURE_11W
11317 case WDA_EXCLUDE_UNENCRYPTED_IND:
11318 {
11319 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11320 break;
11321 }
11322#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011323#ifdef FEATURE_WLAN_TDLS
11324 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11325 {
11326 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11327 break;
11328 }
11329#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011330 case WDA_DHCP_START_IND:
11331 {
11332 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11333 break;
11334 }
11335 case WDA_DHCP_STOP_IND:
11336 {
11337 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11338 break;
11339 }
Leo Chang9056f462013-08-01 19:21:11 -070011340#ifdef FEATURE_WLAN_LPHB
11341 case WDA_LPHB_CONF_REQ:
11342 {
11343 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
11344 break;
11345 }
11346#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011347 default:
11348 {
11349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11350 "No Handling for msg type %x in WDA "
11351 ,pMsg->type);
11352 /* Do Nothing? MSG Body should be freed at here */
11353 if(NULL != pMsg->bodyptr)
11354 {
11355 vos_mem_free(pMsg->bodyptr);
11356 }
11357 //WDA_VOS_ASSERT(0) ;
11358 }
11359 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011360 return status ;
11361}
11362
Jeff Johnson295189b2012-06-20 16:38:30 -070011363/*
11364 * FUNCTION: WDA_LowLevelIndCallback
11365 * IND API callback from WDI, send Ind to PE
11366 */
11367void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11368 void* pUserData )
11369{
11370 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11371#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11372 tSirRSSINotification rssiNotification;
11373#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 if(NULL == pWDA)
11375 {
11376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011377 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011378 VOS_ASSERT(0);
11379 return ;
11380 }
11381
11382 switch(wdiLowLevelInd->wdiIndicationType)
11383 {
11384 case WDI_RSSI_NOTIFICATION_IND:
11385 {
11386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11387 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011388#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11389 rssiNotification.bReserved =
11390 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11391 rssiNotification.bRssiThres1NegCross =
11392 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11393 rssiNotification.bRssiThres1PosCross =
11394 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11395 rssiNotification.bRssiThres2NegCross =
11396 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11397 rssiNotification.bRssiThres2PosCross =
11398 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11399 rssiNotification.bRssiThres3NegCross =
11400 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11401 rssiNotification.bRssiThres3PosCross =
11402 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011403 rssiNotification.avgRssi = (v_S7_t)
11404 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011405 WLANTL_BMPSRSSIRegionChangedNotification(
11406 pWDA->pVosContext,
11407 &rssiNotification);
11408#endif
11409 break ;
11410 }
11411 case WDI_MISSED_BEACON_IND:
11412 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011413 tpSirSmeMissedBeaconInd pMissBeacInd =
11414 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11416 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011417 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011418 if(NULL == pMissBeacInd)
11419 {
11420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11421 "%s: VOS MEM Alloc Failure", __func__);
11422 break;
11423 }
11424 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11425 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11426 pMissBeacInd->bssIdx =
11427 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11428 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011429 break ;
11430 }
11431 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11432 {
11433 /* TODO: Decode Ind and send Ind to PE */
11434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11435 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11436 break ;
11437 }
11438
11439 case WDI_MIC_FAILURE_IND:
11440 {
11441 tpSirSmeMicFailureInd pMicInd =
11442 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11443
11444 if(NULL == pMicInd)
11445 {
11446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011448 break;
11449 }
11450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11451 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011452 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11453 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11454 vos_mem_copy(pMicInd->bssId,
11455 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11456 sizeof(tSirMacAddr));
11457 vos_mem_copy(pMicInd->info.srcMacAddr,
11458 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11459 sizeof(tSirMacAddr));
11460 vos_mem_copy(pMicInd->info.taMacAddr,
11461 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11462 sizeof(tSirMacAddr));
11463 vos_mem_copy(pMicInd->info.dstMacAddr,
11464 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11465 sizeof(tSirMacAddr));
11466 vos_mem_copy(pMicInd->info.rxMacAddr,
11467 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11468 sizeof(tSirMacAddr));
11469 pMicInd->info.multicast =
11470 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11471 pMicInd->info.keyId=
11472 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11473 pMicInd->info.IV1=
11474 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11475 vos_mem_copy(pMicInd->info.TSC,
11476 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011477 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11478 (void *)pMicInd , 0) ;
11479 break ;
11480 }
11481 case WDI_FATAL_ERROR_IND:
11482 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011483 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011484 /* TODO: Decode Ind and send Ind to PE */
11485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11486 "Received WDI_FATAL_ERROR_IND from WDI ");
11487 break ;
11488 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011489 case WDI_DEL_STA_IND:
11490 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 tpDeleteStaContext pDelSTACtx =
11492 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11493
11494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11495 "Received WDI_DEL_STA_IND from WDI ");
11496 if(NULL == pDelSTACtx)
11497 {
11498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011500 break;
11501 }
11502 vos_mem_copy(pDelSTACtx->addr2,
11503 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11504 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011505 vos_mem_copy(pDelSTACtx->bssId,
11506 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11507 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011508 pDelSTACtx->assocId =
11509 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11510 pDelSTACtx->reasonCode =
11511 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11512 pDelSTACtx->staId =
11513 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011514 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11515 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011516 break ;
11517 }
11518 case WDI_COEX_IND:
11519 {
11520 tANI_U32 index;
11521 vos_msg_t vosMsg;
11522 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11523 if(NULL == pSmeCoexInd)
11524 {
11525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011526 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011527 break;
11528 }
11529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11530 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011531 /* Message Header */
11532 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11533 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011534 /* Info from WDI Indication */
11535 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11536 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11537 {
11538 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11539 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011540 /* VOS message wrapper */
11541 vosMsg.type = eWNI_SME_COEX_IND;
11542 vosMsg.bodyptr = (void *)pSmeCoexInd;
11543 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011544 /* Send message to SME */
11545 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11546 {
11547 /* free the mem and return */
11548 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11549 }
11550 else
11551 {
11552 /* DEBUG */
11553 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11554 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11555 pSmeCoexInd->coexIndType,
11556 pSmeCoexInd->coexIndData[0],
11557 pSmeCoexInd->coexIndData[1],
11558 pSmeCoexInd->coexIndData[2],
11559 pSmeCoexInd->coexIndData[3]);
11560 }
11561 break;
11562 }
11563 case WDI_TX_COMPLETE_IND:
11564 {
11565 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11566 /* Calling TxCompleteAck Indication from wda context*/
11567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11568 "Complete Indication received from HAL");
11569 if( pWDA->pAckTxCbFunc )
11570 {
11571 if( VOS_STATUS_SUCCESS !=
11572 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11573 {
11574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11575 "Tx Complete timeout Timer Stop Failed ");
11576 }
11577 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11578 pWDA->pAckTxCbFunc = NULL;
11579 }
11580 else
11581 {
11582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11583 "Tx Complete Indication is received after timeout ");
11584 }
11585 break;
11586 }
Viral Modid86bde22012-12-10 13:09:21 -080011587 case WDI_P2P_NOA_START_IND :
11588 {
11589 tSirP2PNoaStart *pP2pNoaStart =
11590 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11591
11592 if (NULL == pP2pNoaStart)
11593 {
11594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11595 "Memory allocation failure, "
11596 "WDI_P2P_NOA_START_IND not forwarded");
11597 break;
11598 }
11599 pP2pNoaStart->status =
11600 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11601 pP2pNoaStart->bssIdx =
11602 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11603 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11604 (void *)pP2pNoaStart , 0) ;
11605 break;
11606 }
11607
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011608#ifdef FEATURE_WLAN_TDLS
11609 case WDI_TDLS_IND :
11610 {
11611 tSirTdlsInd *pTdlsInd =
11612 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
11613
11614 if (NULL == pTdlsInd)
11615 {
11616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11617 "Memory allocation failure, "
11618 "WDI_TDLS_IND not forwarded");
11619 break;
11620 }
11621 pTdlsInd->status =
11622 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
11623 pTdlsInd->assocId =
11624 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
11625 pTdlsInd->staIdx =
11626 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
11627 pTdlsInd->reasonCode =
11628 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
11629 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
11630 (void *)pTdlsInd , 0) ;
11631 break;
11632 }
11633#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011634 case WDI_P2P_NOA_ATTR_IND :
11635 {
11636 tSirP2PNoaAttr *pP2pNoaAttr =
11637 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11639 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 if (NULL == pP2pNoaAttr)
11641 {
11642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11643 "Memory allocation failure, "
11644 "WDI_P2P_NOA_ATTR_IND not forwarded");
11645 break;
11646 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011647 pP2pNoaAttr->index =
11648 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11649 pP2pNoaAttr->oppPsFlag =
11650 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11651 pP2pNoaAttr->ctWin =
11652 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11653
11654 pP2pNoaAttr->uNoa1IntervalCnt =
11655 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11656 pP2pNoaAttr->uNoa1Duration =
11657 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11658 pP2pNoaAttr->uNoa1Interval =
11659 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11660 pP2pNoaAttr->uNoa1StartTime =
11661 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011662 pP2pNoaAttr->uNoa2IntervalCnt =
11663 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11664 pP2pNoaAttr->uNoa2Duration =
11665 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11666 pP2pNoaAttr->uNoa2Interval =
11667 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11668 pP2pNoaAttr->uNoa2StartTime =
11669 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011670 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11671 (void *)pP2pNoaAttr , 0) ;
11672 break;
11673 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011674#ifdef FEATURE_WLAN_SCAN_PNO
11675 case WDI_PREF_NETWORK_FOUND_IND:
11676 {
11677 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011678 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11679 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11680 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11681 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11682
Jeff Johnson295189b2012-06-20 16:38:30 -070011683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11684 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011685 if (NULL == pPrefNetworkFoundInd)
11686 {
11687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11688 "Memory allocation failure, "
11689 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11690 break;
11691 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011692 /* Message Header */
11693 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011694 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011695
11696 /* Info from WDI Indication */
11697 pPrefNetworkFoundInd->ssId.length =
11698 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011699 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011700 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11701 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11702 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011703 if (NULL !=
11704 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11705 {
11706 pPrefNetworkFoundInd->frameLength =
11707 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11708 vos_mem_copy( pPrefNetworkFoundInd->data,
11709 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11710 pPrefNetworkFoundInd->frameLength);
11711 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11712 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11713 }
11714 else
11715 {
11716 pPrefNetworkFoundInd->frameLength = 0;
11717 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011718 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011719 /* VOS message wrapper */
11720 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11721 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11722 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011723 /* Send message to SME */
11724 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11725 {
11726 /* free the mem and return */
11727 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11728 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011729 break;
11730 }
11731#endif // FEATURE_WLAN_SCAN_PNO
11732
11733#ifdef WLAN_WAKEUP_EVENTS
11734 case WDI_WAKE_REASON_IND:
11735 {
11736 vos_msg_t vosMsg;
11737 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11738 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11739 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11740
11741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11742 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11743 wdiLowLevelInd->wdiIndicationType,
11744 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11745 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11746 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11747
11748 if (NULL == pWakeReasonInd)
11749 {
11750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11751 "Memory allocation failure, "
11752 "WDI_WAKE_REASON_IND not forwarded");
11753 break;
11754 }
11755
11756 vos_mem_zero(pWakeReasonInd, allocSize);
11757
11758 /* Message Header */
11759 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11760 pWakeReasonInd->mesgLen = allocSize;
11761
11762 /* Info from WDI Indication */
11763 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11764 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11765 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11766 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11767 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11768 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11769 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11770 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11771
11772 /* VOS message wrapper */
11773 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11774 vosMsg.bodyptr = (void *) pWakeReasonInd;
11775 vosMsg.bodyval = 0;
11776
11777 /* Send message to SME */
11778 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11779 {
11780 /* free the mem and return */
11781 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11782 }
11783
11784 break;
11785 }
11786#endif // WLAN_WAKEUP_EVENTS
11787
11788 case WDI_TX_PER_HIT_IND:
11789 {
11790 vos_msg_t vosMsg;
11791 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11792 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11793 /* VOS message wrapper */
11794 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11795 vosMsg.bodyptr = NULL;
11796 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011797 /* Send message to SME */
11798 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11799 {
11800 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11801 }
11802 break;
11803 }
11804
Leo Chang9056f462013-08-01 19:21:11 -070011805#ifdef FEATURE_WLAN_LPHB
11806 case WDI_LPHB_WAIT_TIMEOUT_IND:
11807 {
11808 vos_msg_t vosMsg;
11809 tSirLPHBTimeoutInd *lphbTimeoutInd;
11810
11811 lphbTimeoutInd =
11812 (tSirLPHBTimeoutInd *)vos_mem_malloc(sizeof(tSirLPHBTimeoutInd));
11813 if (NULL == lphbTimeoutInd)
11814 {
11815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11816 "%s: LPHB IND buffer alloc Fail", __func__);
11817 return ;
11818 }
11819
11820 lphbTimeoutInd->sessionIdx =
11821 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
11822 lphbTimeoutInd->protocolType =
11823 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
11824 lphbTimeoutInd->eventReason =
11825 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
11826
11827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11828 "Get WDI_LPHB_WAIT_TIMEOUT_IND bssIdx %d",
11829 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
11830
11831 vosMsg.type = eWNI_SME_LPHB_WAIT_TIMEOUT_IND;
11832 vosMsg.bodyptr = lphbTimeoutInd;
11833 vosMsg.bodyval = 0;
11834 /* Send message to SME */
11835 if (VOS_STATUS_SUCCESS !=
11836 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11837 {
11838 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11839 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
11840 vos_mem_free(lphbTimeoutInd);
11841 }
11842 break;
11843 }
11844#endif /* FEATURE_WLAN_LPHB */
11845
Ravi Joshid2ca7c42013-07-23 08:37:49 -070011846 case WDI_IBSS_PEER_INACTIVITY_IND:
11847 {
11848 tSirIbssPeerInactivityInd *pIbssInd =
11849 (tSirIbssPeerInactivityInd *)
11850 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
11851
11852 if (NULL == pIbssInd)
11853 {
11854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11855 "Memory allocation failure, "
11856 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
11857 break;
11858 }
11859
11860 pIbssInd->bssIdx =
11861 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
11862 pIbssInd->staIdx =
11863 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
11864 vos_mem_copy(pIbssInd->peerAddr,
11865 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
11866 sizeof(tSirMacAddr));
11867 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
11868 break;
11869 }
11870
Jeff Johnson295189b2012-06-20 16:38:30 -070011871 default:
11872 {
11873 /* TODO error */
11874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11875 "Received UNKNOWN Indication from WDI ");
11876 }
11877 }
11878 return ;
11879}
11880
Jeff Johnson295189b2012-06-20 16:38:30 -070011881/*
11882 * BA related processing in WDA.
11883 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011884void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
11885 void* pUserData)
11886{
11887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11888 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011889 if(NULL == pWdaParams)
11890 {
11891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011892 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011893 VOS_ASSERT(0) ;
11894 return ;
11895 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011896 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070011897 vos_mem_free(pWdaParams->wdaMsgParam) ;
11898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11899 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011901 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011902 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
11903 {
11904 tANI_U8 i = 0 ;
11905 tBaActivityInd *baActivityInd = NULL ;
11906 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
11907 tANI_U8 allocSize = sizeof(tBaActivityInd)
11908 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
11909 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
11910 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011911 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011912 if(NULL == baActivityInd)
11913 {
11914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011915 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011916 VOS_ASSERT(0) ;
11917 return;
11918 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
11920 sizeof(tSirMacAddr)) ;
11921 baActivityInd->baCandidateCnt = baCandidateCount ;
11922
11923 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
11924 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
11925
11926 for(i = 0 ; i < baCandidateCount ; i++)
11927 {
11928 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011929 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
11930 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011931 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
11932 {
11933 baCandidate->baInfo[tid].fBaEnable =
11934 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
11935 baCandidate->baInfo[tid].startingSeqNum =
11936 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
11937 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011938 wdiBaCandidate++ ;
11939 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011940 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011941 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
11942 }
11943 else
11944 {
11945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11946 "BA Trigger RSP with Failure received ");
11947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011948 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011949}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011950
11951
11952/*
11953 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
11954 * during MCC
11955 */
11956void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
11957{
11958 wpt_uint32 enabled;
11959 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
11960 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
11961 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
11962
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011963 if (NULL == pMac )
11964 {
11965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11966 "%s: Invoked with invalid MAC context ", __func__ );
11967 VOS_ASSERT(0);
11968 return;
11969 }
11970
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011971 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11972 != eSIR_SUCCESS)
11973 {
11974 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11975 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11976 return;
11977 }
11978
11979 if(!enabled)
11980 {
11981 return;
11982 }
11983
11984 if(NULL == pWDA)
11985 {
11986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11987 "%s:WDA context is NULL", __func__);
11988 VOS_ASSERT(0);
11989 return;
11990 }
11991
11992 if(activate)
11993 {
11994 if( VOS_STATUS_SUCCESS !=
11995 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11996 {
11997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11998 "Traffic Stats Timer Start Failed ");
11999 return;
12000 }
12001 WDI_DS_ActivateTrafficStats();
12002 }
12003 else
12004 {
12005 WDI_DS_DeactivateTrafficStats();
12006 WDI_DS_ClearTrafficStats();
12007
12008 if( VOS_STATUS_SUCCESS !=
12009 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12010 {
12011 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12012 "Traffic Stats Timer Stop Failed ");
12013 return;
12014 }
12015 }
12016}
12017
12018/*
12019 * Traffic Stats Timer handler
12020 */
12021void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12022{
12023 WDI_Status wdiStatus;
12024 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12025 WDI_TrafficStatsIndType trafficStatsIndParams;
12026 wpt_uint32 length, enabled;
12027 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12028
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012029 if (NULL == pMac )
12030 {
12031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12032 "%s: Invoked with invalid MAC context ", __func__ );
12033 VOS_ASSERT(0);
12034 return;
12035 }
12036
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012037 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12038 != eSIR_SUCCESS)
12039 {
12040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12041 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12042 return;
12043 }
12044
12045 if(!enabled)
12046 {
12047 WDI_DS_DeactivateTrafficStats();
12048 return;
12049 }
12050
12051 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12052
12053 if(pWdiTrafficStats != NULL)
12054 {
12055 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12056 trafficStatsIndParams.length = length;
12057 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012058 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012059 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12060 trafficStatsIndParams.pUserData = pWDA;
12061
12062 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12063
12064 if(WDI_STATUS_PENDING == wdiStatus)
12065 {
12066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12067 "Pending received for %s:%d ",__func__,__LINE__ );
12068 }
12069 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12070 {
12071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12072 "Failure in %s:%d ",__func__,__LINE__ );
12073 }
12074
12075 WDI_DS_ClearTrafficStats();
12076 }
12077 else
12078 {
12079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12080 "pWdiTrafficStats is Null");
12081 }
12082
12083 if( VOS_STATUS_SUCCESS !=
12084 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12085 {
12086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12087 "Traffic Stats Timer Start Failed ");
12088 return;
12089 }
12090}
12091
Jeff Johnson295189b2012-06-20 16:38:30 -070012092/*
12093 * BA Activity check timer handler
12094 */
12095void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
12096{
12097 tANI_U8 curSta = 0 ;
12098 tANI_U8 tid = 0 ;
12099 tANI_U8 size = 0 ;
12100 tANI_U8 baCandidateCount = 0 ;
12101 tANI_U8 newBaCandidate = 0 ;
12102 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
12103
12104 if(NULL == pWDA)
12105 {
12106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012107 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012108 VOS_ASSERT(0);
12109 return ;
12110 }
12111 if(WDA_MAX_STA < pWDA->wdaMaxSta)
12112 {
12113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12114 "Inconsistent STA entries in WDA");
12115 VOS_ASSERT(0) ;
12116 }
12117 /* walk through all STA entries and find out TX packet count */
12118 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
12119 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080012120#ifdef WLAN_SOFTAP_VSTA_FEATURE
12121 // We can only do BA on "hard" STAs.
12122 if (!(IS_HWSTA_IDX(curSta)))
12123 {
12124 continue;
12125 }
12126#endif //WLAN_SOFTAP_VSTA_FEATURE
12127 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
12128 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012129 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012130 tANI_U32 txPktCount = 0 ;
12131 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012132 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012133 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
12134 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070012135 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
12136 curSta, tid, &txPktCount)))
12137 {
12138#if 0
12139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12140 "************* %d:%d, %d ",curSta, txPktCount,
12141 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
12142#endif
12143 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012144 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070012145 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
12146 curSta, tid)))
12147 {
12148 /* get prepare for sending message to HAL */
12149 //baCandidate[baCandidateCount].staIdx = curSta ;
12150 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
12151 newBaCandidate = WDA_ENABLE_BA ;
12152 }
12153 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
12154 }
12155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012156 /* fill the entry for all the sta with given TID's */
12157 if(WDA_ENABLE_BA == newBaCandidate)
12158 {
12159 /* move to next BA candidate */
12160 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
12161 size += sizeof(WDI_TriggerBAReqCandidateType) ;
12162 baCandidateCount++ ;
12163 newBaCandidate = WDA_DISABLE_BA ;
12164 }
12165 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012166 /* prepare and send message to hal */
12167 if( 0 < baCandidateCount)
12168 {
12169 WDI_Status status = WDI_STATUS_SUCCESS ;
12170 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
12171 tWDA_ReqParams *pWdaParams =
12172 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012173 if(NULL == pWdaParams)
12174 {
12175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012177 VOS_ASSERT(0) ;
12178 return;
12179 }
12180 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
12181 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
12182 if(NULL == wdiTriggerBaReq)
12183 {
12184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012186 VOS_ASSERT(0) ;
12187 vos_mem_free(pWdaParams);
12188 return;
12189 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012190 do
12191 {
12192 WDI_TriggerBAReqinfoType *triggerBaInfo =
12193 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
12194 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
12195 /* TEMP_FIX: Need to see if WDI need check for assoc session for
12196 * for each request */
12197 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
12198 triggerBaInfo->ucBASessionID = 0;
12199 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
12200 } while(0) ;
12201 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
12202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012203 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012204 pWdaParams->pWdaContext = pWDA;
12205 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
12206 pWdaParams->wdaMsgParam = NULL;
12207 status = WDI_TriggerBAReq(wdiTriggerBaReq,
12208 WDA_TriggerBaReqCallback, pWdaParams) ;
12209 if(IS_WDI_STATUS_FAILURE(status))
12210 {
12211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12212 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
12213 vos_mem_free(pWdaParams->wdaMsgParam) ;
12214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12215 vos_mem_free(pWdaParams) ;
12216 }
12217 }
12218 else
12219 {
12220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12221 "There is no TID for initiating BA");
12222 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012223 if( VOS_STATUS_SUCCESS !=
12224 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12225 {
12226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12227 "BA Activity Timer Stop Failed ");
12228 return ;
12229 }
12230 if( VOS_STATUS_SUCCESS !=
12231 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12232 {
12233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12234 "BA Activity Timer Start Failed ");
12235 return;
12236 }
12237 return ;
12238}
Jeff Johnson295189b2012-06-20 16:38:30 -070012239/*
12240 * WDA common routine to create timer used by WDA.
12241 */
12242static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12243{
Jeff Johnson295189b2012-06-20 16:38:30 -070012244 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12245 tANI_U32 val = 0 ;
12246 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12247
12248 if(NULL == pMac)
12249 {
12250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012251 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012252 VOS_ASSERT(0);
12253 return VOS_STATUS_E_FAILURE;
12254 }
12255 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12256 != eSIR_SUCCESS)
12257 {
12258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12259 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12260 return VOS_STATUS_E_FAILURE;
12261 }
12262 val = SYS_MS_TO_TICKS(val) ;
12263
12264 /* BA activity check timer */
12265 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12266 "BA Activity Check timer", WDA_TimerHandler,
12267 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12268 if(status != TX_SUCCESS)
12269 {
12270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12271 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012272 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012273 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012274 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012275 /* Tx Complete Timeout timer */
12276 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12277 "Tx Complete Check timer", WDA_TimerHandler,
12278 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012279 if(status != TX_SUCCESS)
12280 {
12281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12282 "Unable to create Tx Complete Timeout timer");
12283 /* Destroy timer of BA activity check timer */
12284 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12285 if(status != TX_SUCCESS)
12286 {
12287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12288 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012289 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012291 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012292 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012293
12294 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12295
12296 /* Traffic Stats timer */
12297 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12298 "Traffic Stats timer", WDA_TimerHandler,
12299 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12300 if(status != TX_SUCCESS)
12301 {
12302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12303 "Unable to create traffic stats timer");
12304 /* Destroy timer of BA activity check timer */
12305 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12306 if(status != TX_SUCCESS)
12307 {
12308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12309 "Unable to Destroy BA activity timer");
12310 }
12311 /* Destroy timer of tx complete timer */
12312 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12313 if(status != TX_SUCCESS)
12314 {
12315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12316 "Unable to Tx complete timer");
12317 }
12318 return VOS_STATUS_E_FAILURE ;
12319 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012320 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012321}
Jeff Johnson295189b2012-06-20 16:38:30 -070012322/*
12323 * WDA common routine to destroy timer used by WDA.
12324 */
12325static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12326{
12327 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012328 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12329 if(status != TX_SUCCESS)
12330 {
12331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12332 "Unable to Destroy Tx Complete Timeout timer");
12333 return eSIR_FAILURE ;
12334 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012335 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12336 if(status != TX_SUCCESS)
12337 {
12338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12339 "Unable to Destroy BA activity timer");
12340 return eSIR_FAILURE ;
12341 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012342 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12343 if(status != TX_SUCCESS)
12344 {
12345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12346 "Unable to Destroy traffic stats timer");
12347 return eSIR_FAILURE ;
12348 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012349 return eSIR_SUCCESS ;
12350}
Jeff Johnson295189b2012-06-20 16:38:30 -070012351/*
12352 * WDA timer handler.
12353 */
12354void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12355{
12356 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12357 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012358 /*
12359 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12360 */
12361 wdaMsg.type = timerInfo ;
12362 wdaMsg.bodyptr = NULL;
12363 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012364 /* post the message.. */
12365 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
12366 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
12367 {
12368 vosStatus = VOS_STATUS_E_BADMSG;
12369 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012370}
Jeff Johnson295189b2012-06-20 16:38:30 -070012371/*
12372 * WDA Tx Complete timeout Indication.
12373 */
12374void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
12375{
12376 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012377 if( pWDA->pAckTxCbFunc )
12378 {
12379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12380 "TxComplete timer expired\n");
12381 pWDA->pAckTxCbFunc( pMac, 0);
12382 pWDA->pAckTxCbFunc = NULL;
12383 }
12384 else
12385 {
12386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12387 "There is no request pending for TxComplete and wait timer expired\n");
12388 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012389}
Jeff Johnson295189b2012-06-20 16:38:30 -070012390/*
12391 * WDA Set REG Domain to VOS NV
12392 */
12393eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
12394{
12395 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
12396 {
12397 return eHAL_STATUS_INVALID_PARAMETER;
12398 }
12399 return eHAL_STATUS_SUCCESS;
12400}
Jeff Johnson295189b2012-06-20 16:38:30 -070012401
Jeff Johnson295189b2012-06-20 16:38:30 -070012402#ifdef FEATURE_WLAN_SCAN_PNO
12403/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012404 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012405 *
12406 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012407void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012408{
12409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012411 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012412 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012413 {
12414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012415 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012416 VOS_ASSERT(0) ;
12417 return ;
12418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012419
Yue Ma7f44bbe2013-04-12 11:47:39 -070012420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12421 vos_mem_free(pWdaParams->wdaMsgParam);
12422 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012423
12424 return ;
12425}
Jeff Johnson295189b2012-06-20 16:38:30 -070012426/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012427 * FUNCTION: WDA_PNOScanReqCallback
12428 * Free memory.
12429 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
12430 */
12431void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012432{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12434
12435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12436 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12437
12438 if(NULL == pWdaParams)
12439 {
12440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12441 "%s: pWdaParams received NULL", __func__);
12442 VOS_ASSERT(0);
12443 return;
12444 }
12445
12446 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12447 {
12448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12449 vos_mem_free(pWdaParams->wdaMsgParam);
12450 vos_mem_free(pWdaParams);
12451 }
12452
12453 return;
12454}
12455/*
12456 * FUNCTION: WDA_UpdateScanParamsRespCallback
12457 *
12458 */
12459void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12460{
12461 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012463 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012464 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012465 {
12466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012467 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012468 VOS_ASSERT(0) ;
12469 return ;
12470 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012471
12472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12473 vos_mem_free(pWdaParams->wdaMsgParam);
12474 vos_mem_free(pWdaParams);
12475
Jeff Johnson295189b2012-06-20 16:38:30 -070012476 return ;
12477}
Jeff Johnson295189b2012-06-20 16:38:30 -070012478/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012479 * FUNCTION: WDA_UpdateScanParamsReqCallback
12480 * Free memory.
12481 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12482 */
12483void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12484{
12485 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12486
12487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12488 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12489
12490 if(NULL == pWdaParams)
12491 {
12492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12493 "%s: pWdaParams received NULL", __func__);
12494 VOS_ASSERT(0);
12495 return;
12496 }
12497
12498 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12499 {
12500 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12501 vos_mem_free(pWdaParams->wdaMsgParam);
12502 vos_mem_free(pWdaParams);
12503 }
12504
12505 return;
12506}
12507/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012508 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12509 * Request to WDI to set Preferred Network List.Offload
12510 */
12511VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12512 tSirPNOScanReq *pPNOScanReqParams)
12513{
Jeff Johnson43971f52012-07-17 12:26:56 -070012514 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012515 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12516 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12517 tWDA_ReqParams *pWdaParams ;
12518 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012520 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012521 if(NULL == pwdiPNOScanReqInfo)
12522 {
12523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012525 VOS_ASSERT(0);
12526 return VOS_STATUS_E_NOMEM;
12527 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012528 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12529 if(NULL == pWdaParams)
12530 {
12531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012533 VOS_ASSERT(0);
12534 vos_mem_free(pwdiPNOScanReqInfo);
12535 return VOS_STATUS_E_NOMEM;
12536 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012537 //
12538 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12539 //
12540 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12541 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012542 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12543 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12544 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012545 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12546 {
12547 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12548 &pPNOScanReqParams->aNetworks[i],
12549 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12550 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012551 /*Scan timer intervals*/
12552 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12553 &pPNOScanReqParams->scanTimers,
12554 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012555 /*Probe template for 2.4GHz band*/
12556 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12557 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12558 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012559 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12560 pPNOScanReqParams->p24GProbeTemplate,
12561 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 /*Probe template for 5GHz band*/
12563 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12564 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12565 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012566 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12567 pPNOScanReqParams->p5GProbeTemplate,
12568 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012569 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12570 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012571
Jeff Johnson295189b2012-06-20 16:38:30 -070012572 /* Store Params pass it to WDI */
12573 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12574 pWdaParams->pWdaContext = pWDA;
12575 /* Store param pointer as passed in by caller */
12576 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012577 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012578 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012579 if(IS_WDI_STATUS_FAILURE(status))
12580 {
12581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12582 "Failure in Set PNO REQ WDI API, free all the memory " );
12583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12584 vos_mem_free(pWdaParams->wdaMsgParam);
12585 pWdaParams->wdaWdiApiMsgParam = NULL;
12586 pWdaParams->wdaMsgParam = NULL;
12587 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012588 return CONVERT_WDI2VOS_STATUS(status) ;
12589}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012590
12591#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12592
12593void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12594{
12595 /*Convert the CSR Auth types to WDI Auth types */
12596 switch (csrAuthType)
12597 {
12598 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12599 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12600 break;
12601#ifdef FEATURE_WLAN_CCX
12602 case eCSR_AUTH_TYPE_CCKM_WPA:
12603 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12604 break;
12605#endif
12606 case eCSR_AUTH_TYPE_WPA:
12607 *AuthType = eWDA_AUTH_TYPE_WPA;
12608 break;
12609 case eCSR_AUTH_TYPE_WPA_PSK:
12610 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12611 break;
12612#ifdef FEATURE_WLAN_CCX
12613 case eCSR_AUTH_TYPE_CCKM_RSN:
12614 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12615 break;
12616#endif
12617 case eCSR_AUTH_TYPE_RSN:
12618 *AuthType = eWDA_AUTH_TYPE_RSN;
12619 break;
12620 case eCSR_AUTH_TYPE_RSN_PSK:
12621 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12622 break;
12623#if defined WLAN_FEATURE_VOWIFI_11R
12624 case eCSR_AUTH_TYPE_FT_RSN:
12625 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12626 break;
12627 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12628 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12629 break;
12630#endif
12631#ifdef FEATURE_WLAN_WAPI
12632 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12633 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12634 break;
12635 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12636 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12637 break;
12638#endif /* FEATURE_WLAN_WAPI */
12639 case eCSR_AUTH_TYPE_SHARED_KEY:
12640 case eCSR_AUTH_TYPE_AUTOSWITCH:
12641 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12642 break;
12643#if 0
12644 case eCSR_AUTH_TYPE_SHARED_KEY:
12645 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12646 break;
12647 case eCSR_AUTH_TYPE_AUTOSWITCH:
12648 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12649#endif
12650 default:
12651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12652 "%s: Unknown Auth Type", __func__);
12653 break;
12654 }
12655}
12656void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12657{
12658 switch (csrEncrType)
12659 {
12660 case eCSR_ENCRYPT_TYPE_NONE:
12661 *EncrType = WDI_ED_NONE;
12662 break;
12663 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12664 case eCSR_ENCRYPT_TYPE_WEP40:
12665 *EncrType = WDI_ED_WEP40;
12666 break;
12667 case eCSR_ENCRYPT_TYPE_WEP104:
12668 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12669 *EncrType = WDI_ED_WEP104;
12670 break;
12671 case eCSR_ENCRYPT_TYPE_TKIP:
12672 *EncrType = WDI_ED_TKIP;
12673 break;
12674 case eCSR_ENCRYPT_TYPE_AES:
12675 *EncrType = WDI_ED_CCMP;
12676 break;
12677#ifdef WLAN_FEATURE_11W
12678 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12679 *EncrType = WDI_ED_AES_128_CMAC;
12680 break;
12681#endif
12682#ifdef FEATURE_WLAN_WAPI
12683 case eCSR_ENCRYPT_TYPE_WPI:
12684 *EncrType = WDI_ED_WPI;
12685 break;
12686#endif
12687 case eCSR_ENCRYPT_TYPE_ANY:
12688 *EncrType = WDI_ED_ANY;
12689 break;
12690
12691 default:
12692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12693 "%s: Unknown Encryption Type", __func__);
12694 break;
12695 }
12696}
12697
12698/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012699 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012700 * Request to WDI to set Roam Offload Scan
12701 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012702VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012703 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12704{
12705 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012706 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
12707 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012708 tWDA_ReqParams *pWdaParams ;
12709 v_U8_t csrAuthType;
12710 WDI_RoamNetworkType *pwdiRoamNetworkType;
12711 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12713 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012714 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012715 {
12716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12717 "%s: VOS MEM Alloc Failure", __func__);
12718 VOS_ASSERT(0);
12719 return VOS_STATUS_E_NOMEM;
12720 }
12721 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12722 if (NULL == pWdaParams)
12723 {
12724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12725 "%s: VOS MEM Alloc Failure", __func__);
12726 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012727 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012728 return VOS_STATUS_E_NOMEM;
12729 }
12730
12731 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012732 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012733 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012734 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
12735 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012736 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12737 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12738 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12739 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12740 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12741 sizeof(pwdiRoamNetworkType->currAPbssid));
12742 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12743 csrAuthType);
12744 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12745 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12746 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12747 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12748 pwdiRoamOffloadScanInfo->LookupThreshold =
12749 pRoamOffloadScanReqParams->LookupThreshold ;
12750 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12751 pRoamOffloadScanReqParams->RoamRssiDiff ;
12752 pwdiRoamOffloadScanInfo->Command =
12753 pRoamOffloadScanReqParams->Command ;
12754 pwdiRoamOffloadScanInfo->StartScanReason =
12755 pRoamOffloadScanReqParams->StartScanReason ;
12756 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12757 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12758 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12759 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12760 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12761 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12762 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12763 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12764 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12765 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12766 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12767 pRoamOffloadScanReqParams->IsCCXEnabled ;
12768 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12769 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12770 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12771 pwdiRoamNetworkType->ssId.ucLength =
12772 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12773 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12774 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12775 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12776 pwdiRoamNetworkType->ChannelCount =
12777 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12778 pwdiRoamOffloadScanInfo->ChannelCacheType =
12779 pRoamOffloadScanReqParams->ChannelCacheType;
12780 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12781 pRoamOffloadScanReqParams->ValidChannelList,
12782 pRoamOffloadScanReqParams->ValidChannelCount);
12783 pwdiRoamOffloadScanInfo->ValidChannelCount =
12784 pRoamOffloadScanReqParams->ValidChannelCount;
12785 pwdiRoamOffloadScanInfo->us24GProbeSize =
12786 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12787 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12788 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12789 pRoamOffloadScanReqParams->p24GProbeTemplate,
12790 pwdiRoamOffloadScanInfo->us24GProbeSize);
12791 pwdiRoamOffloadScanInfo->us5GProbeSize =
12792 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12793 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12794 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12795 pRoamOffloadScanReqParams->p5GProbeTemplate,
12796 pwdiRoamOffloadScanInfo->us5GProbeSize);
12797 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12798 pRoamOffloadScanReqParams->MDID.mdiePresent;
12799 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12800 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012801 pwdiRoamOffloadScanInfo->nProbes =
12802 pRoamOffloadScanReqParams->nProbes;
12803 pwdiRoamOffloadScanInfo->HomeAwayTime =
12804 pRoamOffloadScanReqParams->HomeAwayTime;
12805 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012806 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012807 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012808 pWdaParams->pWdaContext = pWDA;
12809 /* Store param pointer as passed in by caller */
12810 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012811 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012812 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12813 if(IS_WDI_STATUS_FAILURE(status))
12814 {
12815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12816 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12818 vos_mem_free(pWdaParams->wdaMsgParam);
12819 pWdaParams->wdaWdiApiMsgParam = NULL;
12820 pWdaParams->wdaMsgParam = NULL;
12821 }
12822 return CONVERT_WDI2VOS_STATUS(status) ;
12823}
12824#endif
12825
Jeff Johnson295189b2012-06-20 16:38:30 -070012826/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012827 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012828 *
12829 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012830void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012831{
12832 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12833
12834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012835 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012836
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012837 if(NULL == pWdaParams)
12838 {
12839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012840 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012841 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012842 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012843 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012844
Jeff Johnson295189b2012-06-20 16:38:30 -070012845 vos_mem_free(pWdaParams->wdaMsgParam) ;
12846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12847 vos_mem_free(pWdaParams) ;
12848
12849 return ;
12850}
12851/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012852 * FUNCTION: WDA_RssiFilterReqCallback
12853 * Free memory.
12854 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
12855 */
12856void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
12857{
12858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12859
12860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12861 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12862
12863 if(NULL == pWdaParams)
12864 {
12865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12866 "%s: pWdaParams received NULL", __func__);
12867 VOS_ASSERT(0);
12868 return;
12869 }
12870
12871 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12872 {
12873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12874 vos_mem_free(pWdaParams->wdaMsgParam);
12875 vos_mem_free(pWdaParams);
12876 }
12877
12878 return;
12879}
12880/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012881 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12882 * Request to WDI to set Preferred Network List.Offload
12883 */
12884VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
12885 tSirSetRSSIFilterReq* pRssiFilterParams)
12886{
Jeff Johnson43971f52012-07-17 12:26:56 -070012887 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012888 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
12889 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
12890 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012892 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012893 if(NULL == pwdiSetRssiFilterReqInfo)
12894 {
12895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012897 VOS_ASSERT(0);
12898 return VOS_STATUS_E_NOMEM;
12899 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012900 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12901 if(NULL == pWdaParams)
12902 {
12903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012905 VOS_ASSERT(0);
12906 vos_mem_free(pwdiSetRssiFilterReqInfo);
12907 return VOS_STATUS_E_NOMEM;
12908 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012909 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012910 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
12911 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012912
Jeff Johnson295189b2012-06-20 16:38:30 -070012913 /* Store Params pass it to WDI */
12914 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
12915 pWdaParams->pWdaContext = pWDA;
12916 /* Store param pointer as passed in by caller */
12917 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012918 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012919 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012920 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012921 if(IS_WDI_STATUS_FAILURE(status))
12922 {
12923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12924 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
12925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12926 vos_mem_free(pWdaParams->wdaMsgParam);
12927 pWdaParams->wdaWdiApiMsgParam = NULL;
12928 pWdaParams->wdaMsgParam = NULL;
12929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012930 return CONVERT_WDI2VOS_STATUS(status) ;
12931}
12932
Jeff Johnson295189b2012-06-20 16:38:30 -070012933/*
12934 * FUNCTION: WDA_ProcessUpdateScanParams
12935 * Request to WDI to update Scan Parameters
12936 */
12937VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
12938 tSirUpdateScanParams *pUpdateScanParams)
12939{
Jeff Johnson43971f52012-07-17 12:26:56 -070012940 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012941 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
12942 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
12943 sizeof(WDI_UpdateScanParamsInfoType)) ;
12944 tWDA_ReqParams *pWdaParams ;
12945 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012947 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012948 if(NULL == wdiUpdateScanParamsInfoType)
12949 {
12950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012952 VOS_ASSERT(0);
12953 return VOS_STATUS_E_NOMEM;
12954 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012955 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12956 if ( NULL == pWdaParams )
12957 {
12958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012960 VOS_ASSERT(0);
12961 vos_mem_free(wdiUpdateScanParamsInfoType);
12962 return VOS_STATUS_E_NOMEM;
12963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012964 //
12965 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
12966 //
Jeff Johnson295189b2012-06-20 16:38:30 -070012967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12968 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
12969 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
12970 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
12971 "sir struct %d wdi struct %d",
12972 pUpdateScanParams->b11dEnabled,
12973 pUpdateScanParams->b11dResolved,
12974 pUpdateScanParams->ucChannelCount,
12975 pUpdateScanParams->usPassiveMinChTime,
12976 pUpdateScanParams->usPassiveMaxChTime,
12977 pUpdateScanParams->usActiveMinChTime,
12978 pUpdateScanParams->usActiveMaxChTime,
12979 sizeof(tSirUpdateScanParams),
12980 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
12981
Jeff Johnson295189b2012-06-20 16:38:30 -070012982 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
12983 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070012984 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
12985 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070012986 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
12987 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070012988 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
12989 pUpdateScanParams->usActiveMaxChTime;
12990 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
12991 pUpdateScanParams->usActiveMinChTime;
12992 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
12993 pUpdateScanParams->usPassiveMaxChTime;
12994 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
12995 pUpdateScanParams->usPassiveMinChTime;
12996
Jeff Johnson295189b2012-06-20 16:38:30 -070012997 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053012998 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
12999 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070013000
Jeff Johnson295189b2012-06-20 16:38:30 -070013001 for ( i = 0; i <
13002 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
13003 i++)
13004 {
13005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13006 "Update Scan Parameters channel: %d",
13007 pUpdateScanParams->aChannels[i]);
13008
13009 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13010 pUpdateScanParams->aChannels[i];
13011 }
13012
Yue Ma7f44bbe2013-04-12 11:47:39 -070013013 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13014 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013015
Jeff Johnson295189b2012-06-20 16:38:30 -070013016 /* Store Params pass it to WDI */
13017 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13018 pWdaParams->pWdaContext = pWDA;
13019 /* Store param pointer as passed in by caller */
13020 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013021
Jeff Johnson295189b2012-06-20 16:38:30 -070013022
13023
13024 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013025 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013026 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013027 if(IS_WDI_STATUS_FAILURE(status))
13028 {
13029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13030 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13032 vos_mem_free(pWdaParams->wdaMsgParam);
13033 vos_mem_free(pWdaParams);
13034 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013035 return CONVERT_WDI2VOS_STATUS(status) ;
13036}
13037#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013038
13039#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13040/*
13041 * FUNCTION: WDA_RoamOffloadScanReqCallback
13042 *
13043 */
13044void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13045{
13046 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013047 vos_msg_t vosMsg;
13048 wpt_uint8 reason = 0;
13049
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013051 "<------ %s " ,__func__);
13052 if (NULL == pWdaParams)
13053 {
13054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13055 "%s: pWdaParams received NULL", __func__);
13056 VOS_ASSERT(0) ;
13057 return ;
13058 }
13059 if ( pWdaParams != NULL )
13060 {
13061 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13062 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013063 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13065 }
13066 if ( pWdaParams->wdaMsgParam != NULL)
13067 {
13068 vos_mem_free(pWdaParams->wdaMsgParam);
13069 }
13070
13071 vos_mem_free(pWdaParams) ;
13072 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013073 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
13074 vosMsg.bodyptr = NULL;
13075 if (WDI_STATUS_SUCCESS != status)
13076 {
13077 reason = 0;
13078 }
13079 vosMsg.bodyval = reason;
13080 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13081 {
13082 /* free the mem and return */
13083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13084 "Failed to post the rsp to UMAC" ,__func__);
13085 }
13086
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013087 return ;
13088}
13089#endif
13090
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013091/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013092 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013093 *
13094 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013095void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013096{
13097 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13098
13099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13100 "<------ %s " ,__func__);
13101
13102 if(NULL == pWdaParams)
13103 {
13104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13105 "%s: pWdaParams received NULL", __func__);
13106 VOS_ASSERT(0);
13107 return;
13108 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013109
13110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13111 vos_mem_free(pWdaParams->wdaMsgParam);
13112 vos_mem_free(pWdaParams);
13113
13114 return;
13115}
13116/*
13117 * FUNCTION: WDA_SetPowerParamsReqCallback
13118 * Free memory.
13119 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
13120 */
13121void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13122{
13123 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13124
13125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13126 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13127
13128 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013129 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13131 "%s: pWdaParams received NULL", __func__);
13132 VOS_ASSERT(0);
13133 return;
13134 }
13135
13136 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13137 {
13138 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13139 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013140 vos_mem_free(pWdaParams);
13141 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013142
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013143 return;
13144}
13145
Jeff Johnson295189b2012-06-20 16:38:30 -070013146#ifdef WLAN_FEATURE_PACKET_FILTERING
13147/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013148 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013149 *
13150 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013151void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013152 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
13153 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013154{
13155 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013157 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013158 if(NULL == pWdaParams)
13159 {
13160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013161 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013162 VOS_ASSERT(0) ;
13163 return ;
13164 }
13165
13166 vos_mem_free(pWdaParams->wdaMsgParam) ;
13167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13168 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 //print a msg, nothing else to do
13170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013171 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013172 return ;
13173}
Jeff Johnson295189b2012-06-20 16:38:30 -070013174/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013175 * FUNCTION: WDA_8023MulticastListReqCallback
13176 * Free memory.
13177 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
13178 */
13179void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, 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", __func__, wdiStatus);
13185
13186 if(NULL == pWdaParams)
13187 {
13188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13189 "%s: pWdaParams received NULL", __func__);
13190 VOS_ASSERT(0);
13191 return;
13192 }
13193
13194 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13195 {
13196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13197 vos_mem_free(pWdaParams->wdaMsgParam);
13198 vos_mem_free(pWdaParams);
13199 }
13200
13201 return;
13202}
13203/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 * FUNCTION: WDA_Process8023MulticastListReq
13205 * Request to WDI to add 8023 Multicast List
13206 */
13207VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
13208 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
13209{
Jeff Johnson43971f52012-07-17 12:26:56 -070013210 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013211 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
13212 tWDA_ReqParams *pWdaParams ;
13213 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013215 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013216 pwdiFltPktSetMcListReqParamsType =
13217 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
13218 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
13219 ) ;
13220 if(NULL == pwdiFltPktSetMcListReqParamsType)
13221 {
13222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013224 return VOS_STATUS_E_NOMEM;
13225 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013226 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13227 if(NULL == pWdaParams)
13228 {
13229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013231 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
13232 return VOS_STATUS_E_NOMEM;
13233 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013234
Jeff Johnson295189b2012-06-20 16:38:30 -070013235 //
13236 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
13237 //
13238 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070013239 pRcvFltMcAddrList->ulMulticastAddrCnt;
13240
13241 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13242 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13243 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13244 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13245
Jeff Johnson295189b2012-06-20 16:38:30 -070013246 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13247 {
13248 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13249 &(pRcvFltMcAddrList->multicastAddr[i]),
13250 sizeof(tSirMacAddr));
13251 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013252 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13253 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013254
Jeff Johnson295189b2012-06-20 16:38:30 -070013255 /* Store Params pass it to WDI */
13256 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13257 pWdaParams->pWdaContext = pWDA;
13258 /* Store param pointer as passed in by caller */
13259 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013260 status = WDI_8023MulticastListReq(
13261 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013262 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013263 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013264 if(IS_WDI_STATUS_FAILURE(status))
13265 {
13266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13267 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13269 vos_mem_free(pWdaParams->wdaMsgParam);
13270 vos_mem_free(pWdaParams);
13271 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013272 return CONVERT_WDI2VOS_STATUS(status) ;
13273}
Jeff Johnson295189b2012-06-20 16:38:30 -070013274/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013275 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013276 *
13277 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013278void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013279 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13280 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013281{
13282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013284 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013285 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013286 if(NULL == pWdaParams)
13287 {
13288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013289 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013290 VOS_ASSERT(0) ;
13291 return ;
13292 }
13293
13294 vos_mem_free(pWdaParams->wdaMsgParam) ;
13295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13296 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013297 //print a msg, nothing else to do
13298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013299 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013300 return ;
13301}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013302
13303/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013304 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13305 * Free memory.
13306 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013307 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013308void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013309 void* pUserData)
13310{
13311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13312
13313 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13314 "<------ %s, wdiStatus: %d",
13315 __func__, wdiStatus);
13316
13317 if (NULL == pWdaParams)
13318 {
13319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13320 "%s: Invalid pWdaParams pointer", __func__);
13321 VOS_ASSERT(0);
13322 return;
13323 }
13324
13325 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13326 {
13327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13328 vos_mem_free(pWdaParams->wdaMsgParam);
13329 vos_mem_free(pWdaParams);
13330 }
13331
13332 return;
13333}
13334
Jeff Johnson295189b2012-06-20 16:38:30 -070013335/*
13336 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13337 * Request to WDI to set Receive Filters
13338 */
13339VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13340 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13341{
Jeff Johnson43971f52012-07-17 12:26:56 -070013342 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013343 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13344 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13345 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13346 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13347 tWDA_ReqParams *pWdaParams ;
13348 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013350 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013351 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13352 {
13353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013354 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013355 VOS_ASSERT(0);
13356 return VOS_STATUS_E_NOMEM;
13357 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013358 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13359 if(NULL == pWdaParams)
13360 {
13361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013362 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013363 VOS_ASSERT(0);
13364 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
13365 return VOS_STATUS_E_NOMEM;
13366 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013367 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
13368 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
13369 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
13370 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013371 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
13372 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
13373
13374 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
13375 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013376
13377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13378 "FID %d FT %d NParams %d CT %d",
13379 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
13380 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
13381 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
13382 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070013383 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
13384 {
13385 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
13386 &pRcvPktFilterCfg->paramsData[i],
13387 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070013388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13389 "Proto %d Comp Flag %d \n",
13390 pwdiSetRcvPktFilterReqParamsType->
13391 wdiPktFilterCfg.paramsData[i].protocolLayer,
13392 pwdiSetRcvPktFilterReqParamsType->
13393 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070013394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13395 "Data Offset %d Data Len %d\n",
13396 pwdiSetRcvPktFilterReqParamsType->
13397 wdiPktFilterCfg.paramsData[i].dataOffset,
13398 pwdiSetRcvPktFilterReqParamsType->
13399 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070013400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13401 "CData: %d:%d:%d:%d:%d:%d\n",
13402 pwdiSetRcvPktFilterReqParamsType->
13403 wdiPktFilterCfg.paramsData[i].compareData[0],
13404 pwdiSetRcvPktFilterReqParamsType->
13405 wdiPktFilterCfg.paramsData[i].compareData[1],
13406 pwdiSetRcvPktFilterReqParamsType->
13407 wdiPktFilterCfg.paramsData[i].compareData[2],
13408 pwdiSetRcvPktFilterReqParamsType->
13409 wdiPktFilterCfg.paramsData[i].compareData[3],
13410 pwdiSetRcvPktFilterReqParamsType->
13411 wdiPktFilterCfg.paramsData[i].compareData[4],
13412 pwdiSetRcvPktFilterReqParamsType->
13413 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13415 "MData: %d:%d:%d:%d:%d:%d\n",
13416 pwdiSetRcvPktFilterReqParamsType->
13417 wdiPktFilterCfg.paramsData[i].dataMask[0],
13418 pwdiSetRcvPktFilterReqParamsType->
13419 wdiPktFilterCfg.paramsData[i].dataMask[1],
13420 pwdiSetRcvPktFilterReqParamsType->
13421 wdiPktFilterCfg.paramsData[i].dataMask[2],
13422 pwdiSetRcvPktFilterReqParamsType->
13423 wdiPktFilterCfg.paramsData[i].dataMask[3],
13424 pwdiSetRcvPktFilterReqParamsType->
13425 wdiPktFilterCfg.paramsData[i].dataMask[4],
13426 pwdiSetRcvPktFilterReqParamsType->
13427 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013428 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013429 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013430 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013431 /* Store Params pass it to WDI */
13432 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
13433 pWdaParams->pWdaContext = pWDA;
13434 /* Store param pointer as passed in by caller */
13435 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013436 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013437 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013438 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013439 if(IS_WDI_STATUS_FAILURE(status))
13440 {
13441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13442 "Failure in SetFilter(),free all the memory,status %d ",status);
13443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13444 vos_mem_free(pWdaParams->wdaMsgParam);
13445 vos_mem_free(pWdaParams);
13446 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013447 return CONVERT_WDI2VOS_STATUS(status) ;
13448}
Jeff Johnson295189b2012-06-20 16:38:30 -070013449/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013450 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013451 *
13452 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013453void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013454 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13455 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013456{
13457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13458 tWDA_CbContext *pWDA;
13459 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13460 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13461 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13462 tANI_U8 i;
13463 vos_msg_t vosMsg;
13464
13465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013466 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013467 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13468
Jeff Johnsone7245742012-09-05 17:12:55 -070013469 if(NULL == pRcvFltPktMatchCntRsp)
13470 {
13471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013472 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013473 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013474 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013475 return ;
13476 }
13477
Jeff Johnson295189b2012-06-20 16:38:30 -070013478 if(NULL == pWdaParams)
13479 {
13480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013481 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013482 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013483 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013484 return ;
13485 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013486 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13487 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013488 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13489 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13490
13491 /* Message Header */
13492 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13493 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13494
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013495 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013496
13497 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13498 {
13499 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13500 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13501 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013502 /* VOS message wrapper */
13503 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13504 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13505 vosMsg.bodyval = 0;
13506 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13507 {
13508 /* free the mem and return */
13509 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13510 }
13511
13512 vos_mem_free(pWdaParams->wdaMsgParam) ;
13513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13514 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013515
13516 return;
13517}
13518/*
13519 * FUNCTION: WDA_FilterMatchCountReqCallback
13520 * Free memory and send RSP back to SME.
13521 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13522 */
13523void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13524{
13525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13526 vos_msg_t vosMsg;
13527
13528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13529 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13530
13531 if(NULL == pWdaParams)
13532 {
13533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13534 "%s: pWdaParams received NULL", __func__);
13535 VOS_ASSERT(0);
13536 return;
13537 }
13538
13539 /* VOS message wrapper */
13540 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13541 vosMsg.bodyptr = NULL;
13542 vosMsg.bodyval = 0;
13543
13544 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13545 {
13546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13547 vos_mem_free(pWdaParams->wdaMsgParam);
13548 vos_mem_free(pWdaParams);
13549 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13550 }
13551
13552 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013553}
Jeff Johnson295189b2012-06-20 16:38:30 -070013554/*
13555 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13556 * Request to WDI to get PC Filter Match Count
13557 */
13558VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13559{
Jeff Johnson43971f52012-07-17 12:26:56 -070013560 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013561 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13562 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13563 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013565 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013566 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13567 {
13568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013569 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013570 VOS_ASSERT(0);
13571 return VOS_STATUS_E_NOMEM;
13572 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013573 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13574 if(NULL == pWdaParams)
13575 {
13576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013578 VOS_ASSERT(0);
13579 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13580 return VOS_STATUS_E_NOMEM;
13581 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013582
Yue Ma7f44bbe2013-04-12 11:47:39 -070013583 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13584 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013585
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013586 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13587 pRcvFltPktMatchRsp->bssId,
13588 sizeof(wpt_macAddr));
13589
Jeff Johnson295189b2012-06-20 16:38:30 -070013590 /* Store Params pass it to WDI */
13591 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13592 pWdaParams->pWdaContext = pWDA;
13593 /* Store param pointer as passed in by caller */
13594 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013595 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013596 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013597 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013598 if(IS_WDI_STATUS_FAILURE(status))
13599 {
13600 /* failure returned by WDI API */
13601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13602 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13603 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13604 vos_mem_free(pWdaParams) ;
13605 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13606 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13607 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013608 return CONVERT_WDI2VOS_STATUS(status) ;
13609}
Jeff Johnson295189b2012-06-20 16:38:30 -070013610/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013611 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013612 *
13613 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013614void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013615 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13616 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013617{
13618 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013620 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013621/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13622 if(NULL == pWdaParams)
13623 {
13624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013625 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013626 VOS_ASSERT(0) ;
13627 return ;
13628 }
13629
13630 vos_mem_free(pWdaParams->wdaMsgParam) ;
13631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13632 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013633 //print a msg, nothing else to do
13634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013635 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013636 return ;
13637}
Jeff Johnson295189b2012-06-20 16:38:30 -070013638/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013639 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13640 * Free memory.
13641 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13642 */
13643void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13644{
13645 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13646
13647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13648 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13649
13650 if(NULL == pWdaParams)
13651 {
13652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13653 "%s: Invalid pWdaParams pointer", __func__);
13654 VOS_ASSERT(0);
13655 return;
13656 }
13657
13658 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13659 {
13660 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13661 vos_mem_free(pWdaParams->wdaMsgParam);
13662 vos_mem_free(pWdaParams);
13663 }
13664
13665 return;
13666}
13667/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013668 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13669 * Request to WDI to clear Receive Filters
13670 */
13671VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13672 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13673{
Jeff Johnson43971f52012-07-17 12:26:56 -070013674 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013675 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13676 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13677 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013679 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013680 if(NULL == pwdiRcvFltPktClearReqParamsType)
13681 {
13682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013684 VOS_ASSERT(0);
13685 return VOS_STATUS_E_NOMEM;
13686 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013687 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13688 if(NULL == pWdaParams)
13689 {
13690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013691 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013692 VOS_ASSERT(0);
13693 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13694 return VOS_STATUS_E_NOMEM;
13695 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013696 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13697 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013698 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13699 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13700 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13701 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013702
Yue Ma7f44bbe2013-04-12 11:47:39 -070013703 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013704 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013705 /* Store Params pass it to WDI */
13706 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13707 pWdaParams->pWdaContext = pWDA;
13708 /* Store param pointer as passed in by caller */
13709 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013710 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013711 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013712 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013713 if(IS_WDI_STATUS_FAILURE(status))
13714 {
13715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13716 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013718 vos_mem_free(pWdaParams->wdaMsgParam);
13719 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013720 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013721 return CONVERT_WDI2VOS_STATUS(status) ;
13722}
13723#endif // WLAN_FEATURE_PACKET_FILTERING
13724
Jeff Johnson295189b2012-06-20 16:38:30 -070013725/*
13726 * FUNCTION: WDA_ProcessSetPowerParamsReq
13727 * Request to WDI to set power params
13728 */
13729VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13730 tSirSetPowerParamsReq *pPowerParams)
13731{
Jeff Johnson43971f52012-07-17 12:26:56 -070013732 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013733 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13734 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013735 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013737 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013738 if(NULL == pwdiSetPowerParamsReqInfo)
13739 {
13740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013741 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013742 VOS_ASSERT(0);
13743 return VOS_STATUS_E_NOMEM;
13744 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013745 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13746 if(NULL == pWdaParams)
13747 {
13748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013750 VOS_ASSERT(0);
13751 vos_mem_free(pwdiSetPowerParamsReqInfo);
13752 return VOS_STATUS_E_NOMEM;
13753 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013754
Jeff Johnson295189b2012-06-20 16:38:30 -070013755
13756 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13757 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013758 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13759 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013760 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13761 pPowerParams->uListenInterval;
13762 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13763 pPowerParams->uBcastMcastFilter;
13764 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13765 pPowerParams->uEnableBET;
13766 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13767 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070013768 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
13769 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013770 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13771 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013772
Jeff Johnson295189b2012-06-20 16:38:30 -070013773 /* Store Params pass it to WDI */
13774 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13775 pWdaParams->pWdaContext = pWDA;
13776 /* Store param pointer as passed in by caller */
13777 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013778 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013779 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013780 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013781 if(IS_WDI_STATUS_FAILURE(status))
13782 {
13783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13784 "Failure in Set power params REQ WDI API, free all the memory " );
13785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13786 vos_mem_free(pWdaParams->wdaMsgParam);
13787 pWdaParams->wdaWdiApiMsgParam = NULL;
13788 pWdaParams->wdaMsgParam = NULL;
13789 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013790 return CONVERT_WDI2VOS_STATUS(status) ;
13791}
13792
13793/*
13794 * FUNCTION: WDA_SetTmLevelRspCallback
13795 * Set TM Level response
13796 */
13797void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13798{
13799 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13800
13801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013802 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013803
13804 if(NULL == pWdaParams)
13805 {
13806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013807 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013808 VOS_ASSERT(0) ;
13809 return ;
13810 }
13811
13812 /* Dose not need to send notification to upper layer
13813 * Just free allocated resources */
13814 if( pWdaParams != NULL )
13815 {
13816 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13817 {
13818 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13819 }
13820 vos_mem_free(pWdaParams->wdaMsgParam) ;
13821 vos_mem_free(pWdaParams) ;
13822 }
13823}
13824
13825/*
13826 * FUNCTION: WDA_ProcessSetTmLevelReq
13827 * Set TM Level request
13828 */
13829VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13830 tAniSetTmLevelReq *setTmLevelReq)
13831{
13832 WDI_Status status = WDI_STATUS_SUCCESS ;
13833 tWDA_ReqParams *pWdaParams ;
13834 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13835 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13836 sizeof(WDI_SetTmLevelReqType)) ;
13837 if(NULL == wdiSetTmLevelReq)
13838 {
13839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013840 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013841 VOS_ASSERT(0);
13842 return VOS_STATUS_E_NOMEM;
13843 }
13844
13845 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13846 if(NULL == pWdaParams)
13847 {
13848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013849 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013850 VOS_ASSERT(0);
13851 vos_mem_free(wdiSetTmLevelReq);
13852 return VOS_STATUS_E_NOMEM;
13853 }
13854
13855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013856 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013857
13858 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
13859 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
13860
13861 pWdaParams->pWdaContext = pWDA;
13862 pWdaParams->wdaMsgParam = setTmLevelReq;
13863 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
13864
13865 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
13866 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
13867
13868 if(IS_WDI_STATUS_FAILURE(status))
13869 {
13870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080013871 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070013872 vos_mem_free(pWdaParams->wdaMsgParam) ;
13873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13874 vos_mem_free(pWdaParams) ;
13875 }
13876
13877 return CONVERT_WDI2VOS_STATUS(status) ;
13878}
13879
13880VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
13881 tpTxControlParams pTxCtrlParam)
13882{
13883 VOS_STATUS wdaStatus;
13884
13885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013887 if( pTxCtrlParam == NULL )
13888 {
13889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013890 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013891 return VOS_STATUS_E_FAILURE;
13892 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013893 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
13894 {
13895 wdaStatus = WDA_SuspendDataTx(pWDA);
13896 }
13897 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
13898 {
13899 wdaStatus = WDA_ResumeDataTx(pWDA);
13900 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013901 return wdaStatus;
13902}
13903
13904 /* FUNCTION WDA_featureCapsExchange
13905 * WDA API to invoke capability exchange between host and FW.
13906 */
13907void WDA_featureCapsExchange(v_PVOID_t pVosContext)
13908{
13909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013910 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013911 WDI_featureCapsExchangeReq( NULL, pVosContext);
13912}
13913
Yathish9f22e662012-12-10 14:21:35 -080013914/* FUNCTION WDA_disableCapablityFeature
13915 * WDA API to diable Active mode offload in host.
13916 */
13917void WDA_disableCapablityFeature(tANI_U8 feature_index)
13918{
13919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13920 "%s:enter", __func__ );
13921 WDI_disableCapablityFeature(feature_index);
13922}
13923
Jeff Johnson295189b2012-06-20 16:38:30 -070013924 /* FUNCTION WDA_getHostWlanFeatCaps
13925 * Wrapper for WDI API, that will return if the feature (enum value).passed
13926 * to this API is supported or not in Host
13927 * return value
13928 * 0 - implies feature is NOT Supported
13929 * any non zero value - implies feature is SUPPORTED
13930 */
13931tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
13932{
13933 return WDI_getHostWlanFeatCaps(featEnumValue);
13934}
13935
13936 /* FUNCTION WDA_getFwWlanFeatCaps
13937 * Wrapper for WDI API, that will return if the feature (enum value).passed
13938 * to this API is supported or not in FW
13939 * return value
13940 * 0 - implies feature is NOT Supported
13941 * any non zero value - implies feature is SUPPORTED
13942 */
13943tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
13944{
13945 return WDI_getFwWlanFeatCaps(featEnumValue);
13946}
13947
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013948
Jeff Johnson295189b2012-06-20 16:38:30 -070013949/*
13950 * FUNCTION: WDA_shutdown
13951 * Shutdown WDA/WDI without handshaking with Riva.
13952 * Synchronous function.
13953 */
13954VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
13955{
13956 WDI_Status wdiStatus;
13957 //tANI_U8 eventIdx = 0;
13958 VOS_STATUS status = VOS_STATUS_SUCCESS;
13959 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013960 if (NULL == pWDA)
13961 {
13962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013963 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013964 VOS_ASSERT(0);
13965 return VOS_STATUS_E_FAILURE;
13966 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013967 /* FTM mode stay START_STATE */
13968 if( (WDA_READY_STATE != pWDA->wdaState) &&
13969 (WDA_INIT_STATE != pWDA->wdaState) &&
13970 (WDA_START_STATE != pWDA->wdaState) )
13971 {
13972 VOS_ASSERT(0);
13973 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013974
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013975 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
13976 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070013977 {
13978 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013979 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013980 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013981
Jeff Johnson295189b2012-06-20 16:38:30 -070013982 /* call WDI shutdown */
13983 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070013984 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
13985 {
13986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13987 "error in WDA Stop" );
13988 status = VOS_STATUS_E_FAILURE;
13989 }
13990 /* WDI stop is synchrnous, shutdown is complete when it returns */
13991 pWDA->wdaState = WDA_STOP_STATE;
13992
Jeff Johnson295189b2012-06-20 16:38:30 -070013993 /* shutdown should perform the stop & close actions. */
13994 /* Destroy the event */
13995 status = vos_event_destroy(&pWDA->txFrameEvent);
13996 if(!VOS_IS_STATUS_SUCCESS(status))
13997 {
13998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13999 "VOS Event destroy failed - status = %d\n", status);
14000 status = VOS_STATUS_E_FAILURE;
14001 }
14002 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
14003 if(!VOS_IS_STATUS_SUCCESS(status))
14004 {
14005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14006 "VOS Event destroy failed - status = %d\n", status);
14007 status = VOS_STATUS_E_FAILURE;
14008 }
14009 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14010 if(!VOS_IS_STATUS_SUCCESS(status))
14011 {
14012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14013 "VOS Event destroy failed - status = %d\n", status);
14014 status = VOS_STATUS_E_FAILURE;
14015 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014016 /* free WDA context */
14017 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14018 if ( !VOS_IS_STATUS_SUCCESS(status) )
14019 {
14020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14021 "error in WDA close " );
14022 status = VOS_STATUS_E_FAILURE;
14023 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014024 return status;
14025}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014026
Jeff Johnsone7245742012-09-05 17:12:55 -070014027/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014028 * FUNCTION: WDA_setNeedShutdown
14029 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014030 */
14031
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014032void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014033{
14034 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014035 if(pWDA == NULL)
14036 {
14037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14038 "Could not get the WDA Context pointer" );
14039 return;
14040 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014041 pWDA->needShutdown = TRUE;
14042}
14043/*
14044 * FUNCTION: WDA_needShutdown
14045 * WDA needs a shutdown
14046 */
14047
14048v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
14049{
14050 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014051 if(pWDA == NULL)
14052 {
14053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14054 "Could not get the WDA Context pointer" );
14055 return 0;
14056 }
14057 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014058}
14059
Mohit Khanna4a70d262012-09-11 16:30:12 -070014060#ifdef WLAN_FEATURE_11AC
14061/*
14062 * FUNCTION: WDA_SetBeaconFilterReqCallback
14063 *
14064 */
14065void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
14066{
14067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014069 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014070 if(NULL == pWdaParams)
14071 {
14072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014073 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014074 VOS_ASSERT(0) ;
14075 return ;
14076 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014077
Mohit Khanna4a70d262012-09-11 16:30:12 -070014078 vos_mem_free(pWdaParams->wdaMsgParam) ;
14079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14080 vos_mem_free(pWdaParams) ;
14081 /*
14082 * No respone required for SetBeaconFilter req so just free the request
14083 * param here
14084 */
14085
14086 return ;
14087}
14088
14089VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
14090 tUpdateVHTOpMode *pData)
14091{
14092 WDI_Status status = WDI_STATUS_SUCCESS ;
14093 tWDA_ReqParams *pWdaParams ;
14094 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
14095 sizeof(WDI_UpdateVHTOpMode)) ;
14096 if(NULL == wdiTemp)
14097 {
14098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014099 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014100 VOS_ASSERT(0);
14101 return VOS_STATUS_E_NOMEM;
14102 }
14103 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14104 if(NULL == pWdaParams)
14105 {
14106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014107 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014108 VOS_ASSERT(0);
14109 vos_mem_free(wdiTemp);
14110 return VOS_STATUS_E_NOMEM;
14111 }
14112
14113 wdiTemp->opMode = pData->opMode;
14114 wdiTemp->staId = pData->staId;
14115
14116 pWdaParams->pWdaContext = pWDA;
14117 /* Store Req pointer, as this will be used for response */
14118 pWdaParams->wdaMsgParam = (void *)pData;
14119 /* store Params pass it to WDI */
14120 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
14121
14122 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
14123
14124 if(IS_WDI_STATUS_FAILURE(status))
14125 {
14126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14127 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
14128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14129 vos_mem_free(pWdaParams->wdaMsgParam);
14130 vos_mem_free(pWdaParams);
14131 }
14132 return CONVERT_WDI2VOS_STATUS(status) ;
14133}
14134#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014135
14136/*==========================================================================
14137 FUNCTION WDA_TransportChannelDebug
14138
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070014139 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014140 Display Transport Channel debugging information
14141 User may request to display DXE channel snapshot
14142 Or if host driver detects any abnormal stcuk may display
14143
14144 PARAMETERS
schang6295e542013-03-12 15:31:23 -070014145 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080014146 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014147 enableStallDetect : Enable stall detect feature
14148 This feature will take effect to data performance
14149 Not integrate till fully verification
14150
14151 RETURN VALUE
14152 NONE
14153
14154===========================================================================*/
14155void WDA_TransportChannelDebug
14156(
schang6295e542013-03-12 15:31:23 -070014157 tpAniSirGlobal pMac,
14158 v_BOOL_t displaySnapshot,
14159 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014160)
14161{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070014162 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014163 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014164}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070014165
14166/*==========================================================================
14167 FUNCTION WDA_SetEnableSSR
14168
14169 DESCRIPTION
14170 API to enable/disable SSR on WDI timeout
14171
14172 PARAMETERS
14173 enableSSR : enable/disable SSR
14174
14175 RETURN VALUE
14176 NONE
14177
14178===========================================================================*/
14179void WDA_SetEnableSSR(v_BOOL_t enableSSR)
14180{
14181 WDI_SetEnableSSR(enableSSR);
14182}
Leo Chang9056f462013-08-01 19:21:11 -070014183
14184#ifdef FEATURE_WLAN_LPHB
14185/*
14186 * FUNCTION: WDA_LPHBconfRspCallback
14187 *
14188 */
14189void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
14190{
14191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14192
14193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14194 "<------ %s " ,__func__);
14195 if (NULL == pWdaParams)
14196 {
14197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14198 "%s: pWdaParams received NULL", __func__);
14199 VOS_ASSERT(0) ;
14200 return ;
14201 }
14202
14203 /* Do not need to send notification to upper layer
14204 * Just free allocated resources */
14205 if (pWdaParams != NULL)
14206 {
14207 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14208 {
14209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14210 }
14211 vos_mem_free(pWdaParams->wdaMsgParam) ;
14212 vos_mem_free(pWdaParams) ;
14213 }
14214
14215 return;
14216}
14217
14218/*
14219 * FUNCTION: WDA_ProcessLPHBConfReq
14220 *
14221 */
14222VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
14223 tSirLPHBReq *pData)
14224{
14225 WDI_Status wdiStatus;
14226 tWDA_ReqParams *pWdaParams ;
14227
14228 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14229 "------> %s " , __func__);
14230
14231 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14232 if (NULL == pWdaParams)
14233 {
14234 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14235 "%s: VOS MEM Alloc Failure", __func__);
14236 VOS_ASSERT(0);
14237 vos_mem_free(pData);
14238 return VOS_STATUS_E_NOMEM;
14239 }
14240
14241 pWdaParams->pWdaContext = pWDA;
14242 pWdaParams->wdaMsgParam = (void *)pData;
14243 pWdaParams->wdaWdiApiMsgParam = NULL;
14244
14245 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
14246 if (WDI_STATUS_PENDING == wdiStatus)
14247 {
14248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14249 "Pending received for %s:%d ", __func__, __LINE__);
14250 }
14251 else if (WDI_STATUS_SUCCESS != wdiStatus)
14252 {
14253 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14254 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
14255 vos_mem_free(pWdaParams->wdaMsgParam);
14256 vos_mem_free(pWdaParams);
14257 }
14258
14259 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14260}
14261#endif /* FEATURE_WLAN_LPHB */
14262