blob: b0ff216e807d7d342f2e9b06a59b9a9bf193c131 [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 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010621 return status;
10622}
Jeff Johnson295189b2012-06-20 16:38:30 -070010623/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053010624 * FUNCTION: WDA_ProcessDHCPStartInd
10625 * Forward DHCP Start to WDI
10626 */
10627static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
10628 tAniDHCPInd *dhcpStartInd)
10629{
10630 WDI_Status status;
10631 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10632 if (NULL == wdiDHCPInd)
10633 {
10634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10635 "%s: VOS MEM Alloc Failure", __func__);
10636 VOS_ASSERT(0);
10637 vos_mem_free(dhcpStartInd);
10638 return VOS_STATUS_E_NOMEM;
10639 }
10640
10641 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
10642 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
10643 sizeof(tSirMacAddr));
10644
10645 status = WDI_dhcpStartInd(wdiDHCPInd);
10646
10647 if (IS_WDI_STATUS_FAILURE(status))
10648 {
10649 vos_mem_free(wdiDHCPInd);
10650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10651 "DHCP Start Indication failed");
10652 }
10653 vos_mem_free(dhcpStartInd);
10654 return CONVERT_WDI2VOS_STATUS(status) ;
10655}
10656
10657 /*
10658 * FUNCTION: WDA_ProcessDHCPStopInd
10659 * Forward DHCP Stop to WDI
10660 */
10661 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
10662 tAniDHCPInd *dhcpStopInd)
10663 {
10664 WDI_Status status;
10665 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10666 if (NULL == wdiDHCPInd)
10667 {
10668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10669 "%s: VOS MEM Alloc Failure", __func__);
10670 VOS_ASSERT(0);
10671 vos_mem_free(dhcpStopInd);
10672 return VOS_STATUS_E_NOMEM;
10673 }
10674 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
10675 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
10676 status = WDI_dhcpStopInd(wdiDHCPInd);
10677 if (IS_WDI_STATUS_FAILURE(status))
10678 {
10679 vos_mem_free(wdiDHCPInd);
10680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10681 "DHCP Start Indication failed");
10682 }
10683 vos_mem_free(dhcpStopInd);
10684 return CONVERT_WDI2VOS_STATUS(status) ;
10685 }
10686
10687/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010688 * FUNCTION: WDA_McProcessMsg
10689 * Trigger DAL-AL to start CFG download
10690 */
10691VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10692{
10693 VOS_STATUS status = VOS_STATUS_SUCCESS;
10694 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 if(NULL == pMsg)
10696 {
10697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010698 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010699 VOS_ASSERT(0);
10700 return VOS_STATUS_E_FAILURE;
10701 }
10702
10703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010704 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010705
10706 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10707 if(NULL == pWDA )
10708 {
10709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010710 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010711 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010712 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010713 return VOS_STATUS_E_FAILURE;
10714 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010715 /* Process all the WDA messages.. */
10716 switch( pMsg->type )
10717 {
10718 case WNI_CFG_DNLD_REQ:
10719 {
10720 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010721 /* call WDA complete event if config download success */
10722 if( VOS_IS_STATUS_SUCCESS(status) )
10723 {
10724 vos_WDAComplete_cback(pVosContext);
10725 }
10726 else
10727 {
10728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10729 "WDA Config Download failure" );
10730 }
10731 break ;
10732 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010733 /*
10734 * Init SCAN request from PE, convert it into DAL format
10735 * and send it to DAL
10736 */
10737 case WDA_INIT_SCAN_REQ:
10738 {
10739 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10740 break ;
10741 }
10742 /* start SCAN request from PE */
10743 case WDA_START_SCAN_REQ:
10744 {
10745 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10746 break ;
10747 }
10748 /* end SCAN request from PE */
10749 case WDA_END_SCAN_REQ:
10750 {
10751 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10752 break ;
10753 }
10754 /* end SCAN request from PE */
10755 case WDA_FINISH_SCAN_REQ:
10756 {
10757 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10758 break ;
10759 }
10760 /* join request from PE */
10761 case WDA_CHNL_SWITCH_REQ:
10762 {
10763 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10764 {
10765 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10766 }
10767 else
10768 {
10769 WDA_ProcessChannelSwitchReq(pWDA,
10770 (tSwitchChannelParams*)pMsg->bodyptr) ;
10771 }
10772 break ;
10773 }
10774 /* ADD BSS request from PE */
10775 case WDA_ADD_BSS_REQ:
10776 {
10777 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10778 break ;
10779 }
10780 case WDA_ADD_STA_REQ:
10781 {
10782 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10783 break ;
10784 }
10785 case WDA_DELETE_BSS_REQ:
10786 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010787 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10788 break ;
10789 }
10790 case WDA_DELETE_STA_REQ:
10791 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010792 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10793 break ;
10794 }
10795 case WDA_CONFIG_PARAM_UPDATE_REQ:
10796 {
10797 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10798 break ;
10799 }
10800 case WDA_SET_BSSKEY_REQ:
10801 {
10802 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10803 break ;
10804 }
10805 case WDA_SET_STAKEY_REQ:
10806 {
10807 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10808 break ;
10809 }
10810 case WDA_SET_STA_BCASTKEY_REQ:
10811 {
10812 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10813 break ;
10814 }
10815 case WDA_REMOVE_BSSKEY_REQ:
10816 {
10817 WDA_ProcessRemoveBssKeyReq(pWDA,
10818 (tRemoveBssKeyParams *)pMsg->bodyptr);
10819 break ;
10820 }
10821 case WDA_REMOVE_STAKEY_REQ:
10822 {
10823 WDA_ProcessRemoveStaKeyReq(pWDA,
10824 (tRemoveStaKeyParams *)pMsg->bodyptr);
10825 break ;
10826 }
10827 case WDA_REMOVE_STA_BCASTKEY_REQ:
10828 {
10829 /* TODO: currently UMAC is not sending this request, Add the code for
10830 handling this request when UMAC supports */
10831 break;
10832 }
10833#ifdef FEATURE_WLAN_CCX
10834 case WDA_TSM_STATS_REQ:
10835 {
10836 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10837 break;
10838 }
10839#endif
10840 case WDA_UPDATE_EDCA_PROFILE_IND:
10841 {
10842 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10843 break;
10844 }
10845 case WDA_ADD_TS_REQ:
10846 {
10847 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10848 break;
10849 }
10850 case WDA_DEL_TS_REQ:
10851 {
10852 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
10853 break;
10854 }
10855 case WDA_ADDBA_REQ:
10856 {
10857 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
10858 break;
10859 }
10860 case WDA_DELBA_IND:
10861 {
10862 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
10863 break;
10864 }
10865 case WDA_SET_LINK_STATE:
10866 {
10867 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
10868 break;
10869 }
10870 case WDA_GET_STATISTICS_REQ:
10871 {
10872 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
10873 break;
10874 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080010875#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
10876 case WDA_GET_ROAM_RSSI_REQ:
10877 {
10878 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
10879 break;
10880 }
10881#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010882 case WDA_PWR_SAVE_CFG:
10883 {
10884 if(pWDA->wdaState == WDA_READY_STATE)
10885 {
10886 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
10887 }
10888 else
10889 {
10890 if(NULL != pMsg->bodyptr)
10891 {
10892 vos_mem_free(pMsg->bodyptr);
10893 }
10894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10895 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
10896 }
10897 break;
10898 }
10899 case WDA_ENTER_IMPS_REQ:
10900 {
10901 if(pWDA->wdaState == WDA_READY_STATE)
10902 {
10903 WDA_ProcessEnterImpsReq(pWDA);
10904 }
10905 else
10906 {
10907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10908 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10909 }
10910 break;
10911 }
10912 case WDA_EXIT_IMPS_REQ:
10913 {
10914 if(pWDA->wdaState == WDA_READY_STATE)
10915 {
10916 WDA_ProcessExitImpsReq(pWDA);
10917 }
10918 else
10919 {
10920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10921 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10922 }
10923 break;
10924 }
10925 case WDA_ENTER_BMPS_REQ:
10926 {
10927 if(pWDA->wdaState == WDA_READY_STATE)
10928 {
10929 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
10930 }
10931 else
10932 {
10933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10934 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10935 }
10936 break;
10937 }
10938 case WDA_EXIT_BMPS_REQ:
10939 {
10940 if(pWDA->wdaState == WDA_READY_STATE)
10941 {
10942 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
10943 }
10944 else
10945 {
10946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10947 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10948 }
10949 break;
10950 }
10951 case WDA_ENTER_UAPSD_REQ:
10952 {
10953 if(pWDA->wdaState == WDA_READY_STATE)
10954 {
10955 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
10956 }
10957 else
10958 {
10959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10960 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10961 }
10962 break;
10963 }
10964 case WDA_EXIT_UAPSD_REQ:
10965 {
10966 if(pWDA->wdaState == WDA_READY_STATE)
10967 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010968 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010969 }
10970 else
10971 {
10972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10973 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10974 }
10975 break;
10976 }
10977 case WDA_UPDATE_UAPSD_IND:
10978 {
10979 if(pWDA->wdaState == WDA_READY_STATE)
10980 {
10981 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
10982 }
10983 else
10984 {
10985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10986 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
10987 }
10988 break;
10989 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 case WDA_REGISTER_PE_CALLBACK :
10991 {
10992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10993 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10994 /*TODO: store the PE callback */
10995 /* Do Nothing? MSG Body should be freed at here */
10996 if(NULL != pMsg->bodyptr)
10997 {
10998 vos_mem_free(pMsg->bodyptr);
10999 }
11000 break;
11001 }
11002 case WDA_SYS_READY_IND :
11003 {
11004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11005 "Handling msg type WDA_SYS_READY_IND " );
11006 pWDA->wdaState = WDA_READY_STATE;
11007 if(NULL != pMsg->bodyptr)
11008 {
11009 vos_mem_free(pMsg->bodyptr);
11010 }
11011 break;
11012 }
11013 case WDA_BEACON_FILTER_IND :
11014 {
11015 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11016 break;
11017 }
11018 case WDA_BTC_SET_CFG:
11019 {
11020 /*TODO: handle this while dealing with BTC */
11021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11022 "Handling msg type WDA_BTC_SET_CFG " );
11023 /* Do Nothing? MSG Body should be freed at here */
11024 if(NULL != pMsg->bodyptr)
11025 {
11026 vos_mem_free(pMsg->bodyptr);
11027 }
11028 break;
11029 }
11030 case WDA_SIGNAL_BT_EVENT:
11031 {
11032 /*TODO: handle this while dealing with BTC */
11033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11034 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11035 /* Do Nothing? MSG Body should be freed at here */
11036 if(NULL != pMsg->bodyptr)
11037 {
11038 vos_mem_free(pMsg->bodyptr);
11039 }
11040 break;
11041 }
11042 case WDA_CFG_RXP_FILTER_REQ:
11043 {
11044 WDA_ProcessConfigureRxpFilterReq(pWDA,
11045 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11046 break;
11047 }
11048 case WDA_SET_HOST_OFFLOAD:
11049 {
11050 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11051 break;
11052 }
11053 case WDA_SET_KEEP_ALIVE:
11054 {
11055 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11056 break;
11057 }
11058#ifdef WLAN_NS_OFFLOAD
11059 case WDA_SET_NS_OFFLOAD:
11060 {
11061 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11062 break;
11063 }
11064#endif //WLAN_NS_OFFLOAD
11065 case WDA_ADD_STA_SELF_REQ:
11066 {
11067 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11068 break;
11069 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011070 case WDA_DEL_STA_SELF_REQ:
11071 {
11072 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11073 break;
11074 }
11075 case WDA_WOWL_ADD_BCAST_PTRN:
11076 {
11077 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11078 break;
11079 }
11080 case WDA_WOWL_DEL_BCAST_PTRN:
11081 {
11082 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11083 break;
11084 }
11085 case WDA_WOWL_ENTER_REQ:
11086 {
11087 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11088 break;
11089 }
11090 case WDA_WOWL_EXIT_REQ:
11091 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011092 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 break;
11094 }
11095 case WDA_TL_FLUSH_AC_REQ:
11096 {
11097 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11098 break;
11099 }
11100 case WDA_SIGNAL_BTAMP_EVENT:
11101 {
11102 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11103 break;
11104 }
11105#ifdef WDA_UT
11106 case WDA_WDI_EVENT_MSG:
11107 {
11108 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11109 break ;
11110 }
11111#endif
11112 case WDA_UPDATE_BEACON_IND:
11113 {
11114 WDA_ProcessUpdateBeaconParams(pWDA,
11115 (tUpdateBeaconParams *)pMsg->bodyptr);
11116 break;
11117 }
11118 case WDA_SEND_BEACON_REQ:
11119 {
11120 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11121 break;
11122 }
11123 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11124 {
11125 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11126 (tSendProbeRespParams *)pMsg->bodyptr);
11127 break;
11128 }
11129#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11130 case WDA_SET_MAX_TX_POWER_REQ:
11131 {
11132 WDA_ProcessSetMaxTxPowerReq(pWDA,
11133 (tMaxTxPowerParams *)pMsg->bodyptr);
11134 break;
11135 }
11136#endif
schang86c22c42013-03-13 18:41:24 -070011137 case WDA_SET_TX_POWER_REQ:
11138 {
11139 WDA_ProcessSetTxPowerReq(pWDA,
11140 (tSirSetTxPowerReq *)pMsg->bodyptr);
11141 break;
11142 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011143 case WDA_SET_P2P_GO_NOA_REQ:
11144 {
11145 WDA_ProcessSetP2PGONOAReq(pWDA,
11146 (tP2pPsParams *)pMsg->bodyptr);
11147 break;
11148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011149 /* timer related messages */
11150 case WDA_TIMER_BA_ACTIVITY_REQ:
11151 {
11152 WDA_BaCheckActivity(pWDA) ;
11153 break ;
11154 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011155
11156 /* timer related messages */
11157 case WDA_TIMER_TRAFFIC_STATS_IND:
11158 {
11159 WDA_TimerTrafficStatsInd(pWDA);
11160 break;
11161 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011162#ifdef WLAN_FEATURE_VOWIFI_11R
11163 case WDA_AGGR_QOS_REQ:
11164 {
11165 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11166 break;
11167 }
11168#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 case WDA_FTM_CMD_REQ:
11170 {
11171 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11172 break ;
11173 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011174#ifdef FEATURE_OEM_DATA_SUPPORT
11175 case WDA_START_OEM_DATA_REQ:
11176 {
11177 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11178 break;
11179 }
11180#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011181 /* Tx Complete Time out Indication */
11182 case WDA_TX_COMPLETE_TIMEOUT_IND:
11183 {
11184 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11185 break;
11186 }
11187 case WDA_WLAN_SUSPEND_IND:
11188 {
11189 WDA_ProcessWlanSuspendInd(pWDA,
11190 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11191 break;
11192 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011193 case WDA_WLAN_RESUME_REQ:
11194 {
11195 WDA_ProcessWlanResumeReq(pWDA,
11196 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11197 break;
11198 }
11199
11200 case WDA_UPDATE_CF_IND:
11201 {
11202 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11203 pMsg->bodyptr = NULL;
11204 break;
11205 }
11206#ifdef FEATURE_WLAN_SCAN_PNO
11207 case WDA_SET_PNO_REQ:
11208 {
11209 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11210 break;
11211 }
11212 case WDA_UPDATE_SCAN_PARAMS_REQ:
11213 {
11214 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11215 break;
11216 }
11217 case WDA_SET_RSSI_FILTER_REQ:
11218 {
11219 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11220 break;
11221 }
11222#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011223#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011224 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011225 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011226 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011227 break;
11228 }
11229#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011230 case WDA_SET_TX_PER_TRACKING_REQ:
11231 {
11232 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11233 break;
11234 }
11235
11236#ifdef WLAN_FEATURE_PACKET_FILTERING
11237 case WDA_8023_MULTICAST_LIST_REQ:
11238 {
11239 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11240 break;
11241 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011242 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11243 {
11244 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11245 break;
11246 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011247 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11248 {
11249 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11250 break;
11251 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011252 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11253 {
11254 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11255 break;
11256 }
11257#endif // WLAN_FEATURE_PACKET_FILTERING
11258
11259
11260 case WDA_TRANSMISSION_CONTROL_IND:
11261 {
11262 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11263 break;
11264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011265 case WDA_SET_POWER_PARAMS_REQ:
11266 {
11267 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11268 break;
11269 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011270#ifdef WLAN_FEATURE_GTK_OFFLOAD
11271 case WDA_GTK_OFFLOAD_REQ:
11272 {
11273 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11274 break;
11275 }
11276
11277 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11278 {
11279 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11280 break;
11281 }
11282#endif //WLAN_FEATURE_GTK_OFFLOAD
11283
11284 case WDA_SET_TM_LEVEL_REQ:
11285 {
11286 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11287 break;
11288 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011289#ifdef WLAN_FEATURE_11AC
11290 case WDA_UPDATE_OP_MODE:
11291 {
11292 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11293 {
11294 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11295 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11296 else
11297 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11298 " VHT OpMode Feature is Not Supported \n");
11299 }
11300 else
11301 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11302 " 11AC Feature is Not Supported \n");
11303 break;
11304 }
11305#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011306#ifdef WLAN_FEATURE_11W
11307 case WDA_EXCLUDE_UNENCRYPTED_IND:
11308 {
11309 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11310 break;
11311 }
11312#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011313#ifdef FEATURE_WLAN_TDLS
11314 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11315 {
11316 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11317 break;
11318 }
11319#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011320 case WDA_DHCP_START_IND:
11321 {
11322 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11323 break;
11324 }
11325 case WDA_DHCP_STOP_IND:
11326 {
11327 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11328 break;
11329 }
Leo Chang9056f462013-08-01 19:21:11 -070011330#ifdef FEATURE_WLAN_LPHB
11331 case WDA_LPHB_CONF_REQ:
11332 {
11333 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
11334 break;
11335 }
11336#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011337 default:
11338 {
11339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11340 "No Handling for msg type %x in WDA "
11341 ,pMsg->type);
11342 /* Do Nothing? MSG Body should be freed at here */
11343 if(NULL != pMsg->bodyptr)
11344 {
11345 vos_mem_free(pMsg->bodyptr);
11346 }
11347 //WDA_VOS_ASSERT(0) ;
11348 }
11349 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011350 return status ;
11351}
11352
Jeff Johnson295189b2012-06-20 16:38:30 -070011353/*
11354 * FUNCTION: WDA_LowLevelIndCallback
11355 * IND API callback from WDI, send Ind to PE
11356 */
11357void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11358 void* pUserData )
11359{
11360 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11361#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11362 tSirRSSINotification rssiNotification;
11363#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 if(NULL == pWDA)
11365 {
11366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011367 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011368 VOS_ASSERT(0);
11369 return ;
11370 }
11371
11372 switch(wdiLowLevelInd->wdiIndicationType)
11373 {
11374 case WDI_RSSI_NOTIFICATION_IND:
11375 {
11376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11377 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011378#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11379 rssiNotification.bReserved =
11380 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11381 rssiNotification.bRssiThres1NegCross =
11382 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11383 rssiNotification.bRssiThres1PosCross =
11384 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11385 rssiNotification.bRssiThres2NegCross =
11386 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11387 rssiNotification.bRssiThres2PosCross =
11388 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11389 rssiNotification.bRssiThres3NegCross =
11390 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11391 rssiNotification.bRssiThres3PosCross =
11392 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011393 rssiNotification.avgRssi = (v_S7_t)
11394 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 WLANTL_BMPSRSSIRegionChangedNotification(
11396 pWDA->pVosContext,
11397 &rssiNotification);
11398#endif
11399 break ;
11400 }
11401 case WDI_MISSED_BEACON_IND:
11402 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011403 tpSirSmeMissedBeaconInd pMissBeacInd =
11404 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11406 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011408 if(NULL == pMissBeacInd)
11409 {
11410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11411 "%s: VOS MEM Alloc Failure", __func__);
11412 break;
11413 }
11414 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11415 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11416 pMissBeacInd->bssIdx =
11417 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11418 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011419 break ;
11420 }
11421 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11422 {
11423 /* TODO: Decode Ind and send Ind to PE */
11424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11425 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11426 break ;
11427 }
11428
11429 case WDI_MIC_FAILURE_IND:
11430 {
11431 tpSirSmeMicFailureInd pMicInd =
11432 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11433
11434 if(NULL == pMicInd)
11435 {
11436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011437 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011438 break;
11439 }
11440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11441 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11443 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11444 vos_mem_copy(pMicInd->bssId,
11445 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11446 sizeof(tSirMacAddr));
11447 vos_mem_copy(pMicInd->info.srcMacAddr,
11448 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11449 sizeof(tSirMacAddr));
11450 vos_mem_copy(pMicInd->info.taMacAddr,
11451 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11452 sizeof(tSirMacAddr));
11453 vos_mem_copy(pMicInd->info.dstMacAddr,
11454 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11455 sizeof(tSirMacAddr));
11456 vos_mem_copy(pMicInd->info.rxMacAddr,
11457 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11458 sizeof(tSirMacAddr));
11459 pMicInd->info.multicast =
11460 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11461 pMicInd->info.keyId=
11462 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11463 pMicInd->info.IV1=
11464 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11465 vos_mem_copy(pMicInd->info.TSC,
11466 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011467 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11468 (void *)pMicInd , 0) ;
11469 break ;
11470 }
11471 case WDI_FATAL_ERROR_IND:
11472 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011473 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 /* TODO: Decode Ind and send Ind to PE */
11475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11476 "Received WDI_FATAL_ERROR_IND from WDI ");
11477 break ;
11478 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011479 case WDI_DEL_STA_IND:
11480 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011481 tpDeleteStaContext pDelSTACtx =
11482 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11483
11484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11485 "Received WDI_DEL_STA_IND from WDI ");
11486 if(NULL == pDelSTACtx)
11487 {
11488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011489 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 break;
11491 }
11492 vos_mem_copy(pDelSTACtx->addr2,
11493 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11494 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 vos_mem_copy(pDelSTACtx->bssId,
11496 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11497 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 pDelSTACtx->assocId =
11499 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11500 pDelSTACtx->reasonCode =
11501 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11502 pDelSTACtx->staId =
11503 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011504 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11505 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011506 break ;
11507 }
11508 case WDI_COEX_IND:
11509 {
11510 tANI_U32 index;
11511 vos_msg_t vosMsg;
11512 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11513 if(NULL == pSmeCoexInd)
11514 {
11515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011516 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011517 break;
11518 }
11519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11520 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 /* Message Header */
11522 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11523 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011524 /* Info from WDI Indication */
11525 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11526 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11527 {
11528 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011530 /* VOS message wrapper */
11531 vosMsg.type = eWNI_SME_COEX_IND;
11532 vosMsg.bodyptr = (void *)pSmeCoexInd;
11533 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011534 /* Send message to SME */
11535 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11536 {
11537 /* free the mem and return */
11538 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11539 }
11540 else
11541 {
11542 /* DEBUG */
11543 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11544 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11545 pSmeCoexInd->coexIndType,
11546 pSmeCoexInd->coexIndData[0],
11547 pSmeCoexInd->coexIndData[1],
11548 pSmeCoexInd->coexIndData[2],
11549 pSmeCoexInd->coexIndData[3]);
11550 }
11551 break;
11552 }
11553 case WDI_TX_COMPLETE_IND:
11554 {
11555 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11556 /* Calling TxCompleteAck Indication from wda context*/
11557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11558 "Complete Indication received from HAL");
11559 if( pWDA->pAckTxCbFunc )
11560 {
11561 if( VOS_STATUS_SUCCESS !=
11562 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11563 {
11564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11565 "Tx Complete timeout Timer Stop Failed ");
11566 }
11567 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11568 pWDA->pAckTxCbFunc = NULL;
11569 }
11570 else
11571 {
11572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11573 "Tx Complete Indication is received after timeout ");
11574 }
11575 break;
11576 }
Viral Modid86bde22012-12-10 13:09:21 -080011577 case WDI_P2P_NOA_START_IND :
11578 {
11579 tSirP2PNoaStart *pP2pNoaStart =
11580 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11581
11582 if (NULL == pP2pNoaStart)
11583 {
11584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11585 "Memory allocation failure, "
11586 "WDI_P2P_NOA_START_IND not forwarded");
11587 break;
11588 }
11589 pP2pNoaStart->status =
11590 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11591 pP2pNoaStart->bssIdx =
11592 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11593 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11594 (void *)pP2pNoaStart , 0) ;
11595 break;
11596 }
11597
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011598#ifdef FEATURE_WLAN_TDLS
11599 case WDI_TDLS_IND :
11600 {
11601 tSirTdlsInd *pTdlsInd =
11602 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
11603
11604 if (NULL == pTdlsInd)
11605 {
11606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11607 "Memory allocation failure, "
11608 "WDI_TDLS_IND not forwarded");
11609 break;
11610 }
11611 pTdlsInd->status =
11612 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
11613 pTdlsInd->assocId =
11614 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
11615 pTdlsInd->staIdx =
11616 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
11617 pTdlsInd->reasonCode =
11618 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
11619 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
11620 (void *)pTdlsInd , 0) ;
11621 break;
11622 }
11623#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011624 case WDI_P2P_NOA_ATTR_IND :
11625 {
11626 tSirP2PNoaAttr *pP2pNoaAttr =
11627 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11629 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011630 if (NULL == pP2pNoaAttr)
11631 {
11632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11633 "Memory allocation failure, "
11634 "WDI_P2P_NOA_ATTR_IND not forwarded");
11635 break;
11636 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011637 pP2pNoaAttr->index =
11638 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11639 pP2pNoaAttr->oppPsFlag =
11640 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11641 pP2pNoaAttr->ctWin =
11642 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11643
11644 pP2pNoaAttr->uNoa1IntervalCnt =
11645 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11646 pP2pNoaAttr->uNoa1Duration =
11647 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11648 pP2pNoaAttr->uNoa1Interval =
11649 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11650 pP2pNoaAttr->uNoa1StartTime =
11651 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011652 pP2pNoaAttr->uNoa2IntervalCnt =
11653 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11654 pP2pNoaAttr->uNoa2Duration =
11655 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11656 pP2pNoaAttr->uNoa2Interval =
11657 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11658 pP2pNoaAttr->uNoa2StartTime =
11659 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011660 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11661 (void *)pP2pNoaAttr , 0) ;
11662 break;
11663 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011664#ifdef FEATURE_WLAN_SCAN_PNO
11665 case WDI_PREF_NETWORK_FOUND_IND:
11666 {
11667 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011668 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11669 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11670 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11671 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11672
Jeff Johnson295189b2012-06-20 16:38:30 -070011673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11674 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 if (NULL == pPrefNetworkFoundInd)
11676 {
11677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11678 "Memory allocation failure, "
11679 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11680 break;
11681 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011682 /* Message Header */
11683 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011684 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011685
11686 /* Info from WDI Indication */
11687 pPrefNetworkFoundInd->ssId.length =
11688 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011689 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011690 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11691 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11692 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011693 if (NULL !=
11694 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11695 {
11696 pPrefNetworkFoundInd->frameLength =
11697 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11698 vos_mem_copy( pPrefNetworkFoundInd->data,
11699 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11700 pPrefNetworkFoundInd->frameLength);
11701 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11702 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11703 }
11704 else
11705 {
11706 pPrefNetworkFoundInd->frameLength = 0;
11707 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011708 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011709 /* VOS message wrapper */
11710 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11711 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11712 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011713 /* Send message to SME */
11714 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11715 {
11716 /* free the mem and return */
11717 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11718 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011719 break;
11720 }
11721#endif // FEATURE_WLAN_SCAN_PNO
11722
11723#ifdef WLAN_WAKEUP_EVENTS
11724 case WDI_WAKE_REASON_IND:
11725 {
11726 vos_msg_t vosMsg;
11727 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11728 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11729 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11730
11731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11732 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11733 wdiLowLevelInd->wdiIndicationType,
11734 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11735 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11736 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11737
11738 if (NULL == pWakeReasonInd)
11739 {
11740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11741 "Memory allocation failure, "
11742 "WDI_WAKE_REASON_IND not forwarded");
11743 break;
11744 }
11745
11746 vos_mem_zero(pWakeReasonInd, allocSize);
11747
11748 /* Message Header */
11749 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11750 pWakeReasonInd->mesgLen = allocSize;
11751
11752 /* Info from WDI Indication */
11753 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11754 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11755 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11756 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11757 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11758 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11759 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11760 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11761
11762 /* VOS message wrapper */
11763 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11764 vosMsg.bodyptr = (void *) pWakeReasonInd;
11765 vosMsg.bodyval = 0;
11766
11767 /* Send message to SME */
11768 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11769 {
11770 /* free the mem and return */
11771 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11772 }
11773
11774 break;
11775 }
11776#endif // WLAN_WAKEUP_EVENTS
11777
11778 case WDI_TX_PER_HIT_IND:
11779 {
11780 vos_msg_t vosMsg;
11781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11782 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11783 /* VOS message wrapper */
11784 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11785 vosMsg.bodyptr = NULL;
11786 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011787 /* Send message to SME */
11788 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11789 {
11790 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11791 }
11792 break;
11793 }
11794
Leo Chang9056f462013-08-01 19:21:11 -070011795#ifdef FEATURE_WLAN_LPHB
11796 case WDI_LPHB_WAIT_TIMEOUT_IND:
11797 {
11798 vos_msg_t vosMsg;
11799 tSirLPHBTimeoutInd *lphbTimeoutInd;
11800
11801 lphbTimeoutInd =
11802 (tSirLPHBTimeoutInd *)vos_mem_malloc(sizeof(tSirLPHBTimeoutInd));
11803 if (NULL == lphbTimeoutInd)
11804 {
11805 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11806 "%s: LPHB IND buffer alloc Fail", __func__);
11807 return ;
11808 }
11809
11810 lphbTimeoutInd->sessionIdx =
11811 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
11812 lphbTimeoutInd->protocolType =
11813 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
11814 lphbTimeoutInd->eventReason =
11815 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
11816
11817 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11818 "Get WDI_LPHB_WAIT_TIMEOUT_IND bssIdx %d",
11819 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
11820
11821 vosMsg.type = eWNI_SME_LPHB_WAIT_TIMEOUT_IND;
11822 vosMsg.bodyptr = lphbTimeoutInd;
11823 vosMsg.bodyval = 0;
11824 /* Send message to SME */
11825 if (VOS_STATUS_SUCCESS !=
11826 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11827 {
11828 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11829 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
11830 vos_mem_free(lphbTimeoutInd);
11831 }
11832 break;
11833 }
11834#endif /* FEATURE_WLAN_LPHB */
11835
Ravi Joshid2ca7c42013-07-23 08:37:49 -070011836 case WDI_IBSS_PEER_INACTIVITY_IND:
11837 {
11838 tSirIbssPeerInactivityInd *pIbssInd =
11839 (tSirIbssPeerInactivityInd *)
11840 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
11841
11842 if (NULL == pIbssInd)
11843 {
11844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11845 "Memory allocation failure, "
11846 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
11847 break;
11848 }
11849
11850 pIbssInd->bssIdx =
11851 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
11852 pIbssInd->staIdx =
11853 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
11854 vos_mem_copy(pIbssInd->peerAddr,
11855 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
11856 sizeof(tSirMacAddr));
11857 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
11858 break;
11859 }
11860
Jeff Johnson295189b2012-06-20 16:38:30 -070011861 default:
11862 {
11863 /* TODO error */
11864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11865 "Received UNKNOWN Indication from WDI ");
11866 }
11867 }
11868 return ;
11869}
11870
Jeff Johnson295189b2012-06-20 16:38:30 -070011871/*
11872 * BA related processing in WDA.
11873 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011874void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
11875 void* pUserData)
11876{
11877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11878 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 if(NULL == pWdaParams)
11880 {
11881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011882 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011883 VOS_ASSERT(0) ;
11884 return ;
11885 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011886 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070011887 vos_mem_free(pWdaParams->wdaMsgParam) ;
11888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11889 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011891 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011892 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
11893 {
11894 tANI_U8 i = 0 ;
11895 tBaActivityInd *baActivityInd = NULL ;
11896 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
11897 tANI_U8 allocSize = sizeof(tBaActivityInd)
11898 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
11899 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
11900 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011901 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011902 if(NULL == baActivityInd)
11903 {
11904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011905 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011906 VOS_ASSERT(0) ;
11907 return;
11908 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011909 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
11910 sizeof(tSirMacAddr)) ;
11911 baActivityInd->baCandidateCnt = baCandidateCount ;
11912
11913 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
11914 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
11915
11916 for(i = 0 ; i < baCandidateCount ; i++)
11917 {
11918 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011919 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
11920 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011921 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
11922 {
11923 baCandidate->baInfo[tid].fBaEnable =
11924 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
11925 baCandidate->baInfo[tid].startingSeqNum =
11926 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
11927 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011928 wdiBaCandidate++ ;
11929 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011930 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011931 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
11932 }
11933 else
11934 {
11935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11936 "BA Trigger RSP with Failure received ");
11937 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011938 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011939}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011940
11941
11942/*
11943 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
11944 * during MCC
11945 */
11946void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
11947{
11948 wpt_uint32 enabled;
11949 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
11950 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
11951 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
11952
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011953 if (NULL == pMac )
11954 {
11955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11956 "%s: Invoked with invalid MAC context ", __func__ );
11957 VOS_ASSERT(0);
11958 return;
11959 }
11960
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011961 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11962 != eSIR_SUCCESS)
11963 {
11964 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11965 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11966 return;
11967 }
11968
11969 if(!enabled)
11970 {
11971 return;
11972 }
11973
11974 if(NULL == pWDA)
11975 {
11976 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11977 "%s:WDA context is NULL", __func__);
11978 VOS_ASSERT(0);
11979 return;
11980 }
11981
11982 if(activate)
11983 {
11984 if( VOS_STATUS_SUCCESS !=
11985 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11986 {
11987 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11988 "Traffic Stats Timer Start Failed ");
11989 return;
11990 }
11991 WDI_DS_ActivateTrafficStats();
11992 }
11993 else
11994 {
11995 WDI_DS_DeactivateTrafficStats();
11996 WDI_DS_ClearTrafficStats();
11997
11998 if( VOS_STATUS_SUCCESS !=
11999 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12000 {
12001 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12002 "Traffic Stats Timer Stop Failed ");
12003 return;
12004 }
12005 }
12006}
12007
12008/*
12009 * Traffic Stats Timer handler
12010 */
12011void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12012{
12013 WDI_Status wdiStatus;
12014 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12015 WDI_TrafficStatsIndType trafficStatsIndParams;
12016 wpt_uint32 length, enabled;
12017 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12018
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012019 if (NULL == pMac )
12020 {
12021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12022 "%s: Invoked with invalid MAC context ", __func__ );
12023 VOS_ASSERT(0);
12024 return;
12025 }
12026
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012027 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12028 != eSIR_SUCCESS)
12029 {
12030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12031 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12032 return;
12033 }
12034
12035 if(!enabled)
12036 {
12037 WDI_DS_DeactivateTrafficStats();
12038 return;
12039 }
12040
12041 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12042
12043 if(pWdiTrafficStats != NULL)
12044 {
12045 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12046 trafficStatsIndParams.length = length;
12047 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012048 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012049 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12050 trafficStatsIndParams.pUserData = pWDA;
12051
12052 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12053
12054 if(WDI_STATUS_PENDING == wdiStatus)
12055 {
12056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12057 "Pending received for %s:%d ",__func__,__LINE__ );
12058 }
12059 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12060 {
12061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12062 "Failure in %s:%d ",__func__,__LINE__ );
12063 }
12064
12065 WDI_DS_ClearTrafficStats();
12066 }
12067 else
12068 {
12069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12070 "pWdiTrafficStats is Null");
12071 }
12072
12073 if( VOS_STATUS_SUCCESS !=
12074 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12075 {
12076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12077 "Traffic Stats Timer Start Failed ");
12078 return;
12079 }
12080}
12081
Jeff Johnson295189b2012-06-20 16:38:30 -070012082/*
12083 * BA Activity check timer handler
12084 */
12085void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
12086{
12087 tANI_U8 curSta = 0 ;
12088 tANI_U8 tid = 0 ;
12089 tANI_U8 size = 0 ;
12090 tANI_U8 baCandidateCount = 0 ;
12091 tANI_U8 newBaCandidate = 0 ;
12092 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
12093
12094 if(NULL == pWDA)
12095 {
12096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012097 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012098 VOS_ASSERT(0);
12099 return ;
12100 }
12101 if(WDA_MAX_STA < pWDA->wdaMaxSta)
12102 {
12103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12104 "Inconsistent STA entries in WDA");
12105 VOS_ASSERT(0) ;
12106 }
12107 /* walk through all STA entries and find out TX packet count */
12108 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
12109 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080012110#ifdef WLAN_SOFTAP_VSTA_FEATURE
12111 // We can only do BA on "hard" STAs.
12112 if (!(IS_HWSTA_IDX(curSta)))
12113 {
12114 continue;
12115 }
12116#endif //WLAN_SOFTAP_VSTA_FEATURE
12117 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
12118 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012119 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012120 tANI_U32 txPktCount = 0 ;
12121 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012122 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012123 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
12124 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070012125 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
12126 curSta, tid, &txPktCount)))
12127 {
12128#if 0
12129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12130 "************* %d:%d, %d ",curSta, txPktCount,
12131 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
12132#endif
12133 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012134 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070012135 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
12136 curSta, tid)))
12137 {
12138 /* get prepare for sending message to HAL */
12139 //baCandidate[baCandidateCount].staIdx = curSta ;
12140 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
12141 newBaCandidate = WDA_ENABLE_BA ;
12142 }
12143 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
12144 }
12145 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012146 /* fill the entry for all the sta with given TID's */
12147 if(WDA_ENABLE_BA == newBaCandidate)
12148 {
12149 /* move to next BA candidate */
12150 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
12151 size += sizeof(WDI_TriggerBAReqCandidateType) ;
12152 baCandidateCount++ ;
12153 newBaCandidate = WDA_DISABLE_BA ;
12154 }
12155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012156 /* prepare and send message to hal */
12157 if( 0 < baCandidateCount)
12158 {
12159 WDI_Status status = WDI_STATUS_SUCCESS ;
12160 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
12161 tWDA_ReqParams *pWdaParams =
12162 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012163 if(NULL == pWdaParams)
12164 {
12165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012166 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012167 VOS_ASSERT(0) ;
12168 return;
12169 }
12170 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
12171 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
12172 if(NULL == wdiTriggerBaReq)
12173 {
12174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012176 VOS_ASSERT(0) ;
12177 vos_mem_free(pWdaParams);
12178 return;
12179 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012180 do
12181 {
12182 WDI_TriggerBAReqinfoType *triggerBaInfo =
12183 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
12184 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
12185 /* TEMP_FIX: Need to see if WDI need check for assoc session for
12186 * for each request */
12187 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
12188 triggerBaInfo->ucBASessionID = 0;
12189 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
12190 } while(0) ;
12191 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
12192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012193 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012194 pWdaParams->pWdaContext = pWDA;
12195 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
12196 pWdaParams->wdaMsgParam = NULL;
12197 status = WDI_TriggerBAReq(wdiTriggerBaReq,
12198 WDA_TriggerBaReqCallback, pWdaParams) ;
12199 if(IS_WDI_STATUS_FAILURE(status))
12200 {
12201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12202 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
12203 vos_mem_free(pWdaParams->wdaMsgParam) ;
12204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12205 vos_mem_free(pWdaParams) ;
12206 }
12207 }
12208 else
12209 {
12210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12211 "There is no TID for initiating BA");
12212 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012213 if( VOS_STATUS_SUCCESS !=
12214 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12215 {
12216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12217 "BA Activity Timer Stop Failed ");
12218 return ;
12219 }
12220 if( VOS_STATUS_SUCCESS !=
12221 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12222 {
12223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12224 "BA Activity Timer Start Failed ");
12225 return;
12226 }
12227 return ;
12228}
Jeff Johnson295189b2012-06-20 16:38:30 -070012229/*
12230 * WDA common routine to create timer used by WDA.
12231 */
12232static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12233{
Jeff Johnson295189b2012-06-20 16:38:30 -070012234 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12235 tANI_U32 val = 0 ;
12236 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12237
12238 if(NULL == pMac)
12239 {
12240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012241 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012242 VOS_ASSERT(0);
12243 return VOS_STATUS_E_FAILURE;
12244 }
12245 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12246 != eSIR_SUCCESS)
12247 {
12248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12249 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12250 return VOS_STATUS_E_FAILURE;
12251 }
12252 val = SYS_MS_TO_TICKS(val) ;
12253
12254 /* BA activity check timer */
12255 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12256 "BA Activity Check timer", WDA_TimerHandler,
12257 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12258 if(status != TX_SUCCESS)
12259 {
12260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12261 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012262 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012263 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012264 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012265 /* Tx Complete Timeout timer */
12266 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12267 "Tx Complete Check timer", WDA_TimerHandler,
12268 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012269 if(status != TX_SUCCESS)
12270 {
12271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12272 "Unable to create Tx Complete Timeout timer");
12273 /* Destroy timer of BA activity check timer */
12274 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12275 if(status != TX_SUCCESS)
12276 {
12277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12278 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012279 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012280 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012281 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012282 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012283
12284 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12285
12286 /* Traffic Stats timer */
12287 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12288 "Traffic Stats timer", WDA_TimerHandler,
12289 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12290 if(status != TX_SUCCESS)
12291 {
12292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12293 "Unable to create traffic stats timer");
12294 /* Destroy timer of BA activity check timer */
12295 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12296 if(status != TX_SUCCESS)
12297 {
12298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12299 "Unable to Destroy BA activity timer");
12300 }
12301 /* Destroy timer of tx complete timer */
12302 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12303 if(status != TX_SUCCESS)
12304 {
12305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12306 "Unable to Tx complete timer");
12307 }
12308 return VOS_STATUS_E_FAILURE ;
12309 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012310 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012311}
Jeff Johnson295189b2012-06-20 16:38:30 -070012312/*
12313 * WDA common routine to destroy timer used by WDA.
12314 */
12315static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12316{
12317 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012318 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12319 if(status != TX_SUCCESS)
12320 {
12321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12322 "Unable to Destroy Tx Complete Timeout timer");
12323 return eSIR_FAILURE ;
12324 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012325 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12326 if(status != TX_SUCCESS)
12327 {
12328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12329 "Unable to Destroy BA activity timer");
12330 return eSIR_FAILURE ;
12331 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012332 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12333 if(status != TX_SUCCESS)
12334 {
12335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12336 "Unable to Destroy traffic stats timer");
12337 return eSIR_FAILURE ;
12338 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012339 return eSIR_SUCCESS ;
12340}
Jeff Johnson295189b2012-06-20 16:38:30 -070012341/*
12342 * WDA timer handler.
12343 */
12344void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12345{
12346 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12347 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012348 /*
12349 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12350 */
12351 wdaMsg.type = timerInfo ;
12352 wdaMsg.bodyptr = NULL;
12353 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012354 /* post the message.. */
12355 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
12356 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
12357 {
12358 vosStatus = VOS_STATUS_E_BADMSG;
12359 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012360}
Jeff Johnson295189b2012-06-20 16:38:30 -070012361/*
12362 * WDA Tx Complete timeout Indication.
12363 */
12364void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
12365{
12366 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012367 if( pWDA->pAckTxCbFunc )
12368 {
12369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12370 "TxComplete timer expired\n");
12371 pWDA->pAckTxCbFunc( pMac, 0);
12372 pWDA->pAckTxCbFunc = NULL;
12373 }
12374 else
12375 {
12376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12377 "There is no request pending for TxComplete and wait timer expired\n");
12378 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012379}
Jeff Johnson295189b2012-06-20 16:38:30 -070012380/*
12381 * WDA Set REG Domain to VOS NV
12382 */
12383eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
12384{
12385 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
12386 {
12387 return eHAL_STATUS_INVALID_PARAMETER;
12388 }
12389 return eHAL_STATUS_SUCCESS;
12390}
Jeff Johnson295189b2012-06-20 16:38:30 -070012391
Jeff Johnson295189b2012-06-20 16:38:30 -070012392#ifdef FEATURE_WLAN_SCAN_PNO
12393/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012394 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012395 *
12396 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012397void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012398{
12399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012401 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012402 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012403 {
12404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012405 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012406 VOS_ASSERT(0) ;
12407 return ;
12408 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012409
Yue Ma7f44bbe2013-04-12 11:47:39 -070012410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12411 vos_mem_free(pWdaParams->wdaMsgParam);
12412 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012413
12414 return ;
12415}
Jeff Johnson295189b2012-06-20 16:38:30 -070012416/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012417 * FUNCTION: WDA_PNOScanReqCallback
12418 * Free memory.
12419 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
12420 */
12421void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012422{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012423 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12424
12425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12426 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12427
12428 if(NULL == pWdaParams)
12429 {
12430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12431 "%s: pWdaParams received NULL", __func__);
12432 VOS_ASSERT(0);
12433 return;
12434 }
12435
12436 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12437 {
12438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12439 vos_mem_free(pWdaParams->wdaMsgParam);
12440 vos_mem_free(pWdaParams);
12441 }
12442
12443 return;
12444}
12445/*
12446 * FUNCTION: WDA_UpdateScanParamsRespCallback
12447 *
12448 */
12449void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12450{
12451 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012453 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012454 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012455 {
12456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012457 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012458 VOS_ASSERT(0) ;
12459 return ;
12460 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012461
12462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12463 vos_mem_free(pWdaParams->wdaMsgParam);
12464 vos_mem_free(pWdaParams);
12465
Jeff Johnson295189b2012-06-20 16:38:30 -070012466 return ;
12467}
Jeff Johnson295189b2012-06-20 16:38:30 -070012468/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012469 * FUNCTION: WDA_UpdateScanParamsReqCallback
12470 * Free memory.
12471 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12472 */
12473void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12474{
12475 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12476
12477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12478 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12479
12480 if(NULL == pWdaParams)
12481 {
12482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12483 "%s: pWdaParams received NULL", __func__);
12484 VOS_ASSERT(0);
12485 return;
12486 }
12487
12488 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12489 {
12490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12491 vos_mem_free(pWdaParams->wdaMsgParam);
12492 vos_mem_free(pWdaParams);
12493 }
12494
12495 return;
12496}
12497/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12499 * Request to WDI to set Preferred Network List.Offload
12500 */
12501VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12502 tSirPNOScanReq *pPNOScanReqParams)
12503{
Jeff Johnson43971f52012-07-17 12:26:56 -070012504 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012505 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12506 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12507 tWDA_ReqParams *pWdaParams ;
12508 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012510 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012511 if(NULL == pwdiPNOScanReqInfo)
12512 {
12513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012515 VOS_ASSERT(0);
12516 return VOS_STATUS_E_NOMEM;
12517 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012518 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12519 if(NULL == pWdaParams)
12520 {
12521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012522 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012523 VOS_ASSERT(0);
12524 vos_mem_free(pwdiPNOScanReqInfo);
12525 return VOS_STATUS_E_NOMEM;
12526 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012527 //
12528 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12529 //
12530 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12531 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012532 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12533 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12534 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012535 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12536 {
12537 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12538 &pPNOScanReqParams->aNetworks[i],
12539 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012541 /*Scan timer intervals*/
12542 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12543 &pPNOScanReqParams->scanTimers,
12544 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012545 /*Probe template for 2.4GHz band*/
12546 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12547 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12548 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012549 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12550 pPNOScanReqParams->p24GProbeTemplate,
12551 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012552 /*Probe template for 5GHz band*/
12553 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12554 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12555 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012556 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12557 pPNOScanReqParams->p5GProbeTemplate,
12558 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012559 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12560 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012561
Jeff Johnson295189b2012-06-20 16:38:30 -070012562 /* Store Params pass it to WDI */
12563 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12564 pWdaParams->pWdaContext = pWDA;
12565 /* Store param pointer as passed in by caller */
12566 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012567 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012568 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012569 if(IS_WDI_STATUS_FAILURE(status))
12570 {
12571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12572 "Failure in Set PNO REQ WDI API, free all the memory " );
12573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12574 vos_mem_free(pWdaParams->wdaMsgParam);
12575 pWdaParams->wdaWdiApiMsgParam = NULL;
12576 pWdaParams->wdaMsgParam = NULL;
12577 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012578 return CONVERT_WDI2VOS_STATUS(status) ;
12579}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012580
12581#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12582
12583void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12584{
12585 /*Convert the CSR Auth types to WDI Auth types */
12586 switch (csrAuthType)
12587 {
12588 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12589 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12590 break;
12591#ifdef FEATURE_WLAN_CCX
12592 case eCSR_AUTH_TYPE_CCKM_WPA:
12593 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12594 break;
12595#endif
12596 case eCSR_AUTH_TYPE_WPA:
12597 *AuthType = eWDA_AUTH_TYPE_WPA;
12598 break;
12599 case eCSR_AUTH_TYPE_WPA_PSK:
12600 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12601 break;
12602#ifdef FEATURE_WLAN_CCX
12603 case eCSR_AUTH_TYPE_CCKM_RSN:
12604 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12605 break;
12606#endif
12607 case eCSR_AUTH_TYPE_RSN:
12608 *AuthType = eWDA_AUTH_TYPE_RSN;
12609 break;
12610 case eCSR_AUTH_TYPE_RSN_PSK:
12611 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12612 break;
12613#if defined WLAN_FEATURE_VOWIFI_11R
12614 case eCSR_AUTH_TYPE_FT_RSN:
12615 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12616 break;
12617 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12618 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12619 break;
12620#endif
12621#ifdef FEATURE_WLAN_WAPI
12622 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12623 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12624 break;
12625 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12626 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12627 break;
12628#endif /* FEATURE_WLAN_WAPI */
12629 case eCSR_AUTH_TYPE_SHARED_KEY:
12630 case eCSR_AUTH_TYPE_AUTOSWITCH:
12631 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12632 break;
12633#if 0
12634 case eCSR_AUTH_TYPE_SHARED_KEY:
12635 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12636 break;
12637 case eCSR_AUTH_TYPE_AUTOSWITCH:
12638 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12639#endif
12640 default:
12641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12642 "%s: Unknown Auth Type", __func__);
12643 break;
12644 }
12645}
12646void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12647{
12648 switch (csrEncrType)
12649 {
12650 case eCSR_ENCRYPT_TYPE_NONE:
12651 *EncrType = WDI_ED_NONE;
12652 break;
12653 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12654 case eCSR_ENCRYPT_TYPE_WEP40:
12655 *EncrType = WDI_ED_WEP40;
12656 break;
12657 case eCSR_ENCRYPT_TYPE_WEP104:
12658 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12659 *EncrType = WDI_ED_WEP104;
12660 break;
12661 case eCSR_ENCRYPT_TYPE_TKIP:
12662 *EncrType = WDI_ED_TKIP;
12663 break;
12664 case eCSR_ENCRYPT_TYPE_AES:
12665 *EncrType = WDI_ED_CCMP;
12666 break;
12667#ifdef WLAN_FEATURE_11W
12668 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12669 *EncrType = WDI_ED_AES_128_CMAC;
12670 break;
12671#endif
12672#ifdef FEATURE_WLAN_WAPI
12673 case eCSR_ENCRYPT_TYPE_WPI:
12674 *EncrType = WDI_ED_WPI;
12675 break;
12676#endif
12677 case eCSR_ENCRYPT_TYPE_ANY:
12678 *EncrType = WDI_ED_ANY;
12679 break;
12680
12681 default:
12682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12683 "%s: Unknown Encryption Type", __func__);
12684 break;
12685 }
12686}
12687
12688/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012689 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012690 * Request to WDI to set Roam Offload Scan
12691 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012692VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012693 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12694{
12695 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012696 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
12697 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012698 tWDA_ReqParams *pWdaParams ;
12699 v_U8_t csrAuthType;
12700 WDI_RoamNetworkType *pwdiRoamNetworkType;
12701 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12703 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012704 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012705 {
12706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12707 "%s: VOS MEM Alloc Failure", __func__);
12708 VOS_ASSERT(0);
12709 return VOS_STATUS_E_NOMEM;
12710 }
12711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12712 if (NULL == pWdaParams)
12713 {
12714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12715 "%s: VOS MEM Alloc Failure", __func__);
12716 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012717 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012718 return VOS_STATUS_E_NOMEM;
12719 }
12720
12721 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012722 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012723 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012724 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
12725 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012726 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12727 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12728 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12729 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12730 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12731 sizeof(pwdiRoamNetworkType->currAPbssid));
12732 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12733 csrAuthType);
12734 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12735 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12736 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12737 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12738 pwdiRoamOffloadScanInfo->LookupThreshold =
12739 pRoamOffloadScanReqParams->LookupThreshold ;
12740 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12741 pRoamOffloadScanReqParams->RoamRssiDiff ;
12742 pwdiRoamOffloadScanInfo->Command =
12743 pRoamOffloadScanReqParams->Command ;
12744 pwdiRoamOffloadScanInfo->StartScanReason =
12745 pRoamOffloadScanReqParams->StartScanReason ;
12746 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12747 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12748 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12749 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12750 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12751 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12752 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12753 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12754 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12755 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12756 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12757 pRoamOffloadScanReqParams->IsCCXEnabled ;
12758 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12759 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12760 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12761 pwdiRoamNetworkType->ssId.ucLength =
12762 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12763 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12764 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12765 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12766 pwdiRoamNetworkType->ChannelCount =
12767 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12768 pwdiRoamOffloadScanInfo->ChannelCacheType =
12769 pRoamOffloadScanReqParams->ChannelCacheType;
12770 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12771 pRoamOffloadScanReqParams->ValidChannelList,
12772 pRoamOffloadScanReqParams->ValidChannelCount);
12773 pwdiRoamOffloadScanInfo->ValidChannelCount =
12774 pRoamOffloadScanReqParams->ValidChannelCount;
12775 pwdiRoamOffloadScanInfo->us24GProbeSize =
12776 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12777 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12778 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12779 pRoamOffloadScanReqParams->p24GProbeTemplate,
12780 pwdiRoamOffloadScanInfo->us24GProbeSize);
12781 pwdiRoamOffloadScanInfo->us5GProbeSize =
12782 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12783 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12784 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12785 pRoamOffloadScanReqParams->p5GProbeTemplate,
12786 pwdiRoamOffloadScanInfo->us5GProbeSize);
12787 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12788 pRoamOffloadScanReqParams->MDID.mdiePresent;
12789 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12790 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012791 pwdiRoamOffloadScanInfo->nProbes =
12792 pRoamOffloadScanReqParams->nProbes;
12793 pwdiRoamOffloadScanInfo->HomeAwayTime =
12794 pRoamOffloadScanReqParams->HomeAwayTime;
12795 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012796 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012797 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012798 pWdaParams->pWdaContext = pWDA;
12799 /* Store param pointer as passed in by caller */
12800 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012801 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012802 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12803 if(IS_WDI_STATUS_FAILURE(status))
12804 {
12805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12806 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12808 vos_mem_free(pWdaParams->wdaMsgParam);
12809 pWdaParams->wdaWdiApiMsgParam = NULL;
12810 pWdaParams->wdaMsgParam = NULL;
12811 }
12812 return CONVERT_WDI2VOS_STATUS(status) ;
12813}
12814#endif
12815
Jeff Johnson295189b2012-06-20 16:38:30 -070012816/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012817 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012818 *
12819 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012820void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012821{
12822 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12823
12824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012825 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012826
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012827 if(NULL == pWdaParams)
12828 {
12829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012830 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012831 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012832 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012833 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012834
Jeff Johnson295189b2012-06-20 16:38:30 -070012835 vos_mem_free(pWdaParams->wdaMsgParam) ;
12836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12837 vos_mem_free(pWdaParams) ;
12838
12839 return ;
12840}
12841/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012842 * FUNCTION: WDA_RssiFilterReqCallback
12843 * Free memory.
12844 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
12845 */
12846void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
12847{
12848 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12849
12850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12851 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12852
12853 if(NULL == pWdaParams)
12854 {
12855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12856 "%s: pWdaParams received NULL", __func__);
12857 VOS_ASSERT(0);
12858 return;
12859 }
12860
12861 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12862 {
12863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12864 vos_mem_free(pWdaParams->wdaMsgParam);
12865 vos_mem_free(pWdaParams);
12866 }
12867
12868 return;
12869}
12870/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012871 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12872 * Request to WDI to set Preferred Network List.Offload
12873 */
12874VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
12875 tSirSetRSSIFilterReq* pRssiFilterParams)
12876{
Jeff Johnson43971f52012-07-17 12:26:56 -070012877 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012878 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
12879 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
12880 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012882 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012883 if(NULL == pwdiSetRssiFilterReqInfo)
12884 {
12885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012886 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012887 VOS_ASSERT(0);
12888 return VOS_STATUS_E_NOMEM;
12889 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012890 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12891 if(NULL == pWdaParams)
12892 {
12893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012894 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012895 VOS_ASSERT(0);
12896 vos_mem_free(pwdiSetRssiFilterReqInfo);
12897 return VOS_STATUS_E_NOMEM;
12898 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012899 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012900 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
12901 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012902
Jeff Johnson295189b2012-06-20 16:38:30 -070012903 /* Store Params pass it to WDI */
12904 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
12905 pWdaParams->pWdaContext = pWDA;
12906 /* Store param pointer as passed in by caller */
12907 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012908 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012909 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012910 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012911 if(IS_WDI_STATUS_FAILURE(status))
12912 {
12913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12914 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
12915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12916 vos_mem_free(pWdaParams->wdaMsgParam);
12917 pWdaParams->wdaWdiApiMsgParam = NULL;
12918 pWdaParams->wdaMsgParam = NULL;
12919 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012920 return CONVERT_WDI2VOS_STATUS(status) ;
12921}
12922
Jeff Johnson295189b2012-06-20 16:38:30 -070012923/*
12924 * FUNCTION: WDA_ProcessUpdateScanParams
12925 * Request to WDI to update Scan Parameters
12926 */
12927VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
12928 tSirUpdateScanParams *pUpdateScanParams)
12929{
Jeff Johnson43971f52012-07-17 12:26:56 -070012930 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012931 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
12932 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
12933 sizeof(WDI_UpdateScanParamsInfoType)) ;
12934 tWDA_ReqParams *pWdaParams ;
12935 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012937 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012938 if(NULL == wdiUpdateScanParamsInfoType)
12939 {
12940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012942 VOS_ASSERT(0);
12943 return VOS_STATUS_E_NOMEM;
12944 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12946 if ( NULL == pWdaParams )
12947 {
12948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012950 VOS_ASSERT(0);
12951 vos_mem_free(wdiUpdateScanParamsInfoType);
12952 return VOS_STATUS_E_NOMEM;
12953 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012954 //
12955 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
12956 //
Jeff Johnson295189b2012-06-20 16:38:30 -070012957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12958 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
12959 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
12960 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
12961 "sir struct %d wdi struct %d",
12962 pUpdateScanParams->b11dEnabled,
12963 pUpdateScanParams->b11dResolved,
12964 pUpdateScanParams->ucChannelCount,
12965 pUpdateScanParams->usPassiveMinChTime,
12966 pUpdateScanParams->usPassiveMaxChTime,
12967 pUpdateScanParams->usActiveMinChTime,
12968 pUpdateScanParams->usActiveMaxChTime,
12969 sizeof(tSirUpdateScanParams),
12970 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
12971
Jeff Johnson295189b2012-06-20 16:38:30 -070012972 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
12973 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070012974 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
12975 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070012976 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
12977 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
12979 pUpdateScanParams->usActiveMaxChTime;
12980 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
12981 pUpdateScanParams->usActiveMinChTime;
12982 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
12983 pUpdateScanParams->usPassiveMaxChTime;
12984 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
12985 pUpdateScanParams->usPassiveMinChTime;
12986
Jeff Johnson295189b2012-06-20 16:38:30 -070012987 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053012988 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
12989 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070012990
Jeff Johnson295189b2012-06-20 16:38:30 -070012991 for ( i = 0; i <
12992 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
12993 i++)
12994 {
12995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12996 "Update Scan Parameters channel: %d",
12997 pUpdateScanParams->aChannels[i]);
12998
12999 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13000 pUpdateScanParams->aChannels[i];
13001 }
13002
Yue Ma7f44bbe2013-04-12 11:47:39 -070013003 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13004 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013005
Jeff Johnson295189b2012-06-20 16:38:30 -070013006 /* Store Params pass it to WDI */
13007 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13008 pWdaParams->pWdaContext = pWDA;
13009 /* Store param pointer as passed in by caller */
13010 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013011
Jeff Johnson295189b2012-06-20 16:38:30 -070013012
13013
13014 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013015 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013016 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013017 if(IS_WDI_STATUS_FAILURE(status))
13018 {
13019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13020 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13021 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13022 vos_mem_free(pWdaParams->wdaMsgParam);
13023 vos_mem_free(pWdaParams);
13024 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013025 return CONVERT_WDI2VOS_STATUS(status) ;
13026}
13027#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013028
13029#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13030/*
13031 * FUNCTION: WDA_RoamOffloadScanReqCallback
13032 *
13033 */
13034void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13035{
13036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013037 vos_msg_t vosMsg;
13038 wpt_uint8 reason = 0;
13039
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013041 "<------ %s " ,__func__);
13042 if (NULL == pWdaParams)
13043 {
13044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13045 "%s: pWdaParams received NULL", __func__);
13046 VOS_ASSERT(0) ;
13047 return ;
13048 }
13049 if ( pWdaParams != NULL )
13050 {
13051 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13052 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013053 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13055 }
13056 if ( pWdaParams->wdaMsgParam != NULL)
13057 {
13058 vos_mem_free(pWdaParams->wdaMsgParam);
13059 }
13060
13061 vos_mem_free(pWdaParams) ;
13062 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013063 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
13064 vosMsg.bodyptr = NULL;
13065 if (WDI_STATUS_SUCCESS != status)
13066 {
13067 reason = 0;
13068 }
13069 vosMsg.bodyval = reason;
13070 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13071 {
13072 /* free the mem and return */
13073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13074 "Failed to post the rsp to UMAC" ,__func__);
13075 }
13076
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013077 return ;
13078}
13079#endif
13080
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013081/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013082 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013083 *
13084 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013085void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013086{
13087 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13088
13089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13090 "<------ %s " ,__func__);
13091
13092 if(NULL == pWdaParams)
13093 {
13094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13095 "%s: pWdaParams received NULL", __func__);
13096 VOS_ASSERT(0);
13097 return;
13098 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013099
13100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13101 vos_mem_free(pWdaParams->wdaMsgParam);
13102 vos_mem_free(pWdaParams);
13103
13104 return;
13105}
13106/*
13107 * FUNCTION: WDA_SetPowerParamsReqCallback
13108 * Free memory.
13109 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
13110 */
13111void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13112{
13113 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13114
13115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13116 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13117
13118 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013119 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13121 "%s: pWdaParams received NULL", __func__);
13122 VOS_ASSERT(0);
13123 return;
13124 }
13125
13126 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13127 {
13128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13129 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013130 vos_mem_free(pWdaParams);
13131 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013132
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013133 return;
13134}
13135
Jeff Johnson295189b2012-06-20 16:38:30 -070013136#ifdef WLAN_FEATURE_PACKET_FILTERING
13137/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013138 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013139 *
13140 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013141void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013142 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
13143 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013144{
13145 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013147 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013148 if(NULL == pWdaParams)
13149 {
13150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013151 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013152 VOS_ASSERT(0) ;
13153 return ;
13154 }
13155
13156 vos_mem_free(pWdaParams->wdaMsgParam) ;
13157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13158 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013159 //print a msg, nothing else to do
13160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013161 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013162 return ;
13163}
Jeff Johnson295189b2012-06-20 16:38:30 -070013164/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013165 * FUNCTION: WDA_8023MulticastListReqCallback
13166 * Free memory.
13167 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
13168 */
13169void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
13170{
13171 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13172
13173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13174 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13175
13176 if(NULL == pWdaParams)
13177 {
13178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13179 "%s: pWdaParams received NULL", __func__);
13180 VOS_ASSERT(0);
13181 return;
13182 }
13183
13184 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13185 {
13186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13187 vos_mem_free(pWdaParams->wdaMsgParam);
13188 vos_mem_free(pWdaParams);
13189 }
13190
13191 return;
13192}
13193/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013194 * FUNCTION: WDA_Process8023MulticastListReq
13195 * Request to WDI to add 8023 Multicast List
13196 */
13197VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
13198 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
13199{
Jeff Johnson43971f52012-07-17 12:26:56 -070013200 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013201 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
13202 tWDA_ReqParams *pWdaParams ;
13203 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013205 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 pwdiFltPktSetMcListReqParamsType =
13207 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
13208 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
13209 ) ;
13210 if(NULL == pwdiFltPktSetMcListReqParamsType)
13211 {
13212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013213 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013214 return VOS_STATUS_E_NOMEM;
13215 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013216 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13217 if(NULL == pWdaParams)
13218 {
13219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013220 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013221 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
13222 return VOS_STATUS_E_NOMEM;
13223 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013224
Jeff Johnson295189b2012-06-20 16:38:30 -070013225 //
13226 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
13227 //
13228 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070013229 pRcvFltMcAddrList->ulMulticastAddrCnt;
13230
13231 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13232 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13233 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13234 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13235
Jeff Johnson295189b2012-06-20 16:38:30 -070013236 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13237 {
13238 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13239 &(pRcvFltMcAddrList->multicastAddr[i]),
13240 sizeof(tSirMacAddr));
13241 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013242 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13243 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013244
Jeff Johnson295189b2012-06-20 16:38:30 -070013245 /* Store Params pass it to WDI */
13246 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13247 pWdaParams->pWdaContext = pWDA;
13248 /* Store param pointer as passed in by caller */
13249 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013250 status = WDI_8023MulticastListReq(
13251 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013252 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013253 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013254 if(IS_WDI_STATUS_FAILURE(status))
13255 {
13256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13257 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13259 vos_mem_free(pWdaParams->wdaMsgParam);
13260 vos_mem_free(pWdaParams);
13261 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013262 return CONVERT_WDI2VOS_STATUS(status) ;
13263}
Jeff Johnson295189b2012-06-20 16:38:30 -070013264/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013265 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013266 *
13267 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013268void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013269 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13270 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013271{
13272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013274 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013275 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013276 if(NULL == pWdaParams)
13277 {
13278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013279 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013280 VOS_ASSERT(0) ;
13281 return ;
13282 }
13283
13284 vos_mem_free(pWdaParams->wdaMsgParam) ;
13285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13286 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013287 //print a msg, nothing else to do
13288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013289 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013290 return ;
13291}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013292
13293/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013294 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13295 * Free memory.
13296 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013297 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013298void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013299 void* pUserData)
13300{
13301 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13302
13303 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13304 "<------ %s, wdiStatus: %d",
13305 __func__, wdiStatus);
13306
13307 if (NULL == pWdaParams)
13308 {
13309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13310 "%s: Invalid pWdaParams pointer", __func__);
13311 VOS_ASSERT(0);
13312 return;
13313 }
13314
13315 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13316 {
13317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13318 vos_mem_free(pWdaParams->wdaMsgParam);
13319 vos_mem_free(pWdaParams);
13320 }
13321
13322 return;
13323}
13324
Jeff Johnson295189b2012-06-20 16:38:30 -070013325/*
13326 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13327 * Request to WDI to set Receive Filters
13328 */
13329VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13330 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13331{
Jeff Johnson43971f52012-07-17 12:26:56 -070013332 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013333 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13334 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13335 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13336 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13337 tWDA_ReqParams *pWdaParams ;
13338 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013340 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013341 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13342 {
13343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013345 VOS_ASSERT(0);
13346 return VOS_STATUS_E_NOMEM;
13347 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013348 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13349 if(NULL == pWdaParams)
13350 {
13351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013352 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013353 VOS_ASSERT(0);
13354 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
13355 return VOS_STATUS_E_NOMEM;
13356 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013357 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
13358 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
13359 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
13360 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013361 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
13362 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
13363
13364 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
13365 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013366
13367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13368 "FID %d FT %d NParams %d CT %d",
13369 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
13370 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
13371 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
13372 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070013373 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
13374 {
13375 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
13376 &pRcvPktFilterCfg->paramsData[i],
13377 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070013378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13379 "Proto %d Comp Flag %d \n",
13380 pwdiSetRcvPktFilterReqParamsType->
13381 wdiPktFilterCfg.paramsData[i].protocolLayer,
13382 pwdiSetRcvPktFilterReqParamsType->
13383 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070013384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13385 "Data Offset %d Data Len %d\n",
13386 pwdiSetRcvPktFilterReqParamsType->
13387 wdiPktFilterCfg.paramsData[i].dataOffset,
13388 pwdiSetRcvPktFilterReqParamsType->
13389 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070013390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13391 "CData: %d:%d:%d:%d:%d:%d\n",
13392 pwdiSetRcvPktFilterReqParamsType->
13393 wdiPktFilterCfg.paramsData[i].compareData[0],
13394 pwdiSetRcvPktFilterReqParamsType->
13395 wdiPktFilterCfg.paramsData[i].compareData[1],
13396 pwdiSetRcvPktFilterReqParamsType->
13397 wdiPktFilterCfg.paramsData[i].compareData[2],
13398 pwdiSetRcvPktFilterReqParamsType->
13399 wdiPktFilterCfg.paramsData[i].compareData[3],
13400 pwdiSetRcvPktFilterReqParamsType->
13401 wdiPktFilterCfg.paramsData[i].compareData[4],
13402 pwdiSetRcvPktFilterReqParamsType->
13403 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13405 "MData: %d:%d:%d:%d:%d:%d\n",
13406 pwdiSetRcvPktFilterReqParamsType->
13407 wdiPktFilterCfg.paramsData[i].dataMask[0],
13408 pwdiSetRcvPktFilterReqParamsType->
13409 wdiPktFilterCfg.paramsData[i].dataMask[1],
13410 pwdiSetRcvPktFilterReqParamsType->
13411 wdiPktFilterCfg.paramsData[i].dataMask[2],
13412 pwdiSetRcvPktFilterReqParamsType->
13413 wdiPktFilterCfg.paramsData[i].dataMask[3],
13414 pwdiSetRcvPktFilterReqParamsType->
13415 wdiPktFilterCfg.paramsData[i].dataMask[4],
13416 pwdiSetRcvPktFilterReqParamsType->
13417 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013418 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013419 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013420 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013421 /* Store Params pass it to WDI */
13422 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
13423 pWdaParams->pWdaContext = pWDA;
13424 /* Store param pointer as passed in by caller */
13425 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013426 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013427 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013428 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013429 if(IS_WDI_STATUS_FAILURE(status))
13430 {
13431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13432 "Failure in SetFilter(),free all the memory,status %d ",status);
13433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13434 vos_mem_free(pWdaParams->wdaMsgParam);
13435 vos_mem_free(pWdaParams);
13436 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013437 return CONVERT_WDI2VOS_STATUS(status) ;
13438}
Jeff Johnson295189b2012-06-20 16:38:30 -070013439/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013440 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013441 *
13442 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013443void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013444 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13445 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013446{
13447 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13448 tWDA_CbContext *pWDA;
13449 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13450 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13451 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13452 tANI_U8 i;
13453 vos_msg_t vosMsg;
13454
13455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013456 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013457 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13458
Jeff Johnsone7245742012-09-05 17:12:55 -070013459 if(NULL == pRcvFltPktMatchCntRsp)
13460 {
13461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013462 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013463 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013464 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013465 return ;
13466 }
13467
Jeff Johnson295189b2012-06-20 16:38:30 -070013468 if(NULL == pWdaParams)
13469 {
13470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013471 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013472 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013473 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013474 return ;
13475 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013476 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13477 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013478 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13479 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13480
13481 /* Message Header */
13482 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13483 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13484
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013485 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013486
13487 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13488 {
13489 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13490 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13491 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013492 /* VOS message wrapper */
13493 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13494 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13495 vosMsg.bodyval = 0;
13496 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13497 {
13498 /* free the mem and return */
13499 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13500 }
13501
13502 vos_mem_free(pWdaParams->wdaMsgParam) ;
13503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13504 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013505
13506 return;
13507}
13508/*
13509 * FUNCTION: WDA_FilterMatchCountReqCallback
13510 * Free memory and send RSP back to SME.
13511 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13512 */
13513void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13514{
13515 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13516 vos_msg_t vosMsg;
13517
13518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13519 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13520
13521 if(NULL == pWdaParams)
13522 {
13523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13524 "%s: pWdaParams received NULL", __func__);
13525 VOS_ASSERT(0);
13526 return;
13527 }
13528
13529 /* VOS message wrapper */
13530 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13531 vosMsg.bodyptr = NULL;
13532 vosMsg.bodyval = 0;
13533
13534 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13535 {
13536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13537 vos_mem_free(pWdaParams->wdaMsgParam);
13538 vos_mem_free(pWdaParams);
13539 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13540 }
13541
13542 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013543}
Jeff Johnson295189b2012-06-20 16:38:30 -070013544/*
13545 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13546 * Request to WDI to get PC Filter Match Count
13547 */
13548VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13549{
Jeff Johnson43971f52012-07-17 12:26:56 -070013550 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013551 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13552 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13553 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013555 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013556 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13557 {
13558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013559 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013560 VOS_ASSERT(0);
13561 return VOS_STATUS_E_NOMEM;
13562 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013563 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13564 if(NULL == pWdaParams)
13565 {
13566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013567 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013568 VOS_ASSERT(0);
13569 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13570 return VOS_STATUS_E_NOMEM;
13571 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013572
Yue Ma7f44bbe2013-04-12 11:47:39 -070013573 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13574 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013575
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013576 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13577 pRcvFltPktMatchRsp->bssId,
13578 sizeof(wpt_macAddr));
13579
Jeff Johnson295189b2012-06-20 16:38:30 -070013580 /* Store Params pass it to WDI */
13581 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13582 pWdaParams->pWdaContext = pWDA;
13583 /* Store param pointer as passed in by caller */
13584 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013585 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013586 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013587 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013588 if(IS_WDI_STATUS_FAILURE(status))
13589 {
13590 /* failure returned by WDI API */
13591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13592 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13594 vos_mem_free(pWdaParams) ;
13595 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13596 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13597 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013598 return CONVERT_WDI2VOS_STATUS(status) ;
13599}
Jeff Johnson295189b2012-06-20 16:38:30 -070013600/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013601 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013602 *
13603 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013604void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013605 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13606 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013607{
13608 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013610 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013611/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13612 if(NULL == pWdaParams)
13613 {
13614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013615 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013616 VOS_ASSERT(0) ;
13617 return ;
13618 }
13619
13620 vos_mem_free(pWdaParams->wdaMsgParam) ;
13621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13622 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013623 //print a msg, nothing else to do
13624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013625 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013626 return ;
13627}
Jeff Johnson295189b2012-06-20 16:38:30 -070013628/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013629 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13630 * Free memory.
13631 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13632 */
13633void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13634{
13635 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13636
13637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13638 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13639
13640 if(NULL == pWdaParams)
13641 {
13642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13643 "%s: Invalid pWdaParams pointer", __func__);
13644 VOS_ASSERT(0);
13645 return;
13646 }
13647
13648 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13649 {
13650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13651 vos_mem_free(pWdaParams->wdaMsgParam);
13652 vos_mem_free(pWdaParams);
13653 }
13654
13655 return;
13656}
13657/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013658 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13659 * Request to WDI to clear Receive Filters
13660 */
13661VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13662 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13663{
Jeff Johnson43971f52012-07-17 12:26:56 -070013664 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013665 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13666 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13667 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013669 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013670 if(NULL == pwdiRcvFltPktClearReqParamsType)
13671 {
13672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013674 VOS_ASSERT(0);
13675 return VOS_STATUS_E_NOMEM;
13676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013677 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13678 if(NULL == pWdaParams)
13679 {
13680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013681 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013682 VOS_ASSERT(0);
13683 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13684 return VOS_STATUS_E_NOMEM;
13685 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013686 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13687 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013688 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13689 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13690 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13691 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013692
Yue Ma7f44bbe2013-04-12 11:47:39 -070013693 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013694 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013695 /* Store Params pass it to WDI */
13696 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13697 pWdaParams->pWdaContext = pWDA;
13698 /* Store param pointer as passed in by caller */
13699 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013700 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013701 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013702 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013703 if(IS_WDI_STATUS_FAILURE(status))
13704 {
13705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13706 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013708 vos_mem_free(pWdaParams->wdaMsgParam);
13709 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013710 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013711 return CONVERT_WDI2VOS_STATUS(status) ;
13712}
13713#endif // WLAN_FEATURE_PACKET_FILTERING
13714
Jeff Johnson295189b2012-06-20 16:38:30 -070013715/*
13716 * FUNCTION: WDA_ProcessSetPowerParamsReq
13717 * Request to WDI to set power params
13718 */
13719VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13720 tSirSetPowerParamsReq *pPowerParams)
13721{
Jeff Johnson43971f52012-07-17 12:26:56 -070013722 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013723 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13724 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013725 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013727 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013728 if(NULL == pwdiSetPowerParamsReqInfo)
13729 {
13730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013731 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013732 VOS_ASSERT(0);
13733 return VOS_STATUS_E_NOMEM;
13734 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013735 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13736 if(NULL == pWdaParams)
13737 {
13738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 VOS_ASSERT(0);
13741 vos_mem_free(pwdiSetPowerParamsReqInfo);
13742 return VOS_STATUS_E_NOMEM;
13743 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013744
Jeff Johnson295189b2012-06-20 16:38:30 -070013745
13746 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13747 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013748 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13749 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013750 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13751 pPowerParams->uListenInterval;
13752 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13753 pPowerParams->uBcastMcastFilter;
13754 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13755 pPowerParams->uEnableBET;
13756 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13757 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070013758 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
13759 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013760 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13761 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013762
Jeff Johnson295189b2012-06-20 16:38:30 -070013763 /* Store Params pass it to WDI */
13764 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13765 pWdaParams->pWdaContext = pWDA;
13766 /* Store param pointer as passed in by caller */
13767 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013768 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013769 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013770 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013771 if(IS_WDI_STATUS_FAILURE(status))
13772 {
13773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13774 "Failure in Set power params REQ WDI API, free all the memory " );
13775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13776 vos_mem_free(pWdaParams->wdaMsgParam);
13777 pWdaParams->wdaWdiApiMsgParam = NULL;
13778 pWdaParams->wdaMsgParam = NULL;
13779 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013780 return CONVERT_WDI2VOS_STATUS(status) ;
13781}
13782
13783/*
13784 * FUNCTION: WDA_SetTmLevelRspCallback
13785 * Set TM Level response
13786 */
13787void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13788{
13789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13790
13791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013792 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013793
13794 if(NULL == pWdaParams)
13795 {
13796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013797 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013798 VOS_ASSERT(0) ;
13799 return ;
13800 }
13801
13802 /* Dose not need to send notification to upper layer
13803 * Just free allocated resources */
13804 if( pWdaParams != NULL )
13805 {
13806 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13807 {
13808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13809 }
13810 vos_mem_free(pWdaParams->wdaMsgParam) ;
13811 vos_mem_free(pWdaParams) ;
13812 }
13813}
13814
13815/*
13816 * FUNCTION: WDA_ProcessSetTmLevelReq
13817 * Set TM Level request
13818 */
13819VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13820 tAniSetTmLevelReq *setTmLevelReq)
13821{
13822 WDI_Status status = WDI_STATUS_SUCCESS ;
13823 tWDA_ReqParams *pWdaParams ;
13824 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13825 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13826 sizeof(WDI_SetTmLevelReqType)) ;
13827 if(NULL == wdiSetTmLevelReq)
13828 {
13829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013831 VOS_ASSERT(0);
13832 return VOS_STATUS_E_NOMEM;
13833 }
13834
13835 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13836 if(NULL == pWdaParams)
13837 {
13838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013839 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013840 VOS_ASSERT(0);
13841 vos_mem_free(wdiSetTmLevelReq);
13842 return VOS_STATUS_E_NOMEM;
13843 }
13844
13845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013846 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013847
13848 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
13849 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
13850
13851 pWdaParams->pWdaContext = pWDA;
13852 pWdaParams->wdaMsgParam = setTmLevelReq;
13853 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
13854
13855 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
13856 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
13857
13858 if(IS_WDI_STATUS_FAILURE(status))
13859 {
13860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080013861 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070013862 vos_mem_free(pWdaParams->wdaMsgParam) ;
13863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13864 vos_mem_free(pWdaParams) ;
13865 }
13866
13867 return CONVERT_WDI2VOS_STATUS(status) ;
13868}
13869
13870VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
13871 tpTxControlParams pTxCtrlParam)
13872{
13873 VOS_STATUS wdaStatus;
13874
13875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013876 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013877 if( pTxCtrlParam == NULL )
13878 {
13879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013880 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013881 return VOS_STATUS_E_FAILURE;
13882 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013883 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
13884 {
13885 wdaStatus = WDA_SuspendDataTx(pWDA);
13886 }
13887 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
13888 {
13889 wdaStatus = WDA_ResumeDataTx(pWDA);
13890 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013891 return wdaStatus;
13892}
13893
13894 /* FUNCTION WDA_featureCapsExchange
13895 * WDA API to invoke capability exchange between host and FW.
13896 */
13897void WDA_featureCapsExchange(v_PVOID_t pVosContext)
13898{
13899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013900 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013901 WDI_featureCapsExchangeReq( NULL, pVosContext);
13902}
13903
Yathish9f22e662012-12-10 14:21:35 -080013904/* FUNCTION WDA_disableCapablityFeature
13905 * WDA API to diable Active mode offload in host.
13906 */
13907void WDA_disableCapablityFeature(tANI_U8 feature_index)
13908{
13909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13910 "%s:enter", __func__ );
13911 WDI_disableCapablityFeature(feature_index);
13912}
13913
Jeff Johnson295189b2012-06-20 16:38:30 -070013914 /* FUNCTION WDA_getHostWlanFeatCaps
13915 * Wrapper for WDI API, that will return if the feature (enum value).passed
13916 * to this API is supported or not in Host
13917 * return value
13918 * 0 - implies feature is NOT Supported
13919 * any non zero value - implies feature is SUPPORTED
13920 */
13921tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
13922{
13923 return WDI_getHostWlanFeatCaps(featEnumValue);
13924}
13925
13926 /* FUNCTION WDA_getFwWlanFeatCaps
13927 * Wrapper for WDI API, that will return if the feature (enum value).passed
13928 * to this API is supported or not in FW
13929 * return value
13930 * 0 - implies feature is NOT Supported
13931 * any non zero value - implies feature is SUPPORTED
13932 */
13933tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
13934{
13935 return WDI_getFwWlanFeatCaps(featEnumValue);
13936}
13937
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013938
Jeff Johnson295189b2012-06-20 16:38:30 -070013939/*
13940 * FUNCTION: WDA_shutdown
13941 * Shutdown WDA/WDI without handshaking with Riva.
13942 * Synchronous function.
13943 */
13944VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
13945{
13946 WDI_Status wdiStatus;
13947 //tANI_U8 eventIdx = 0;
13948 VOS_STATUS status = VOS_STATUS_SUCCESS;
13949 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013950 if (NULL == pWDA)
13951 {
13952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013953 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013954 VOS_ASSERT(0);
13955 return VOS_STATUS_E_FAILURE;
13956 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013957 /* FTM mode stay START_STATE */
13958 if( (WDA_READY_STATE != pWDA->wdaState) &&
13959 (WDA_INIT_STATE != pWDA->wdaState) &&
13960 (WDA_START_STATE != pWDA->wdaState) )
13961 {
13962 VOS_ASSERT(0);
13963 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013964
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013965 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
13966 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070013967 {
13968 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013969 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013970 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013971
Jeff Johnson295189b2012-06-20 16:38:30 -070013972 /* call WDI shutdown */
13973 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070013974 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
13975 {
13976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13977 "error in WDA Stop" );
13978 status = VOS_STATUS_E_FAILURE;
13979 }
13980 /* WDI stop is synchrnous, shutdown is complete when it returns */
13981 pWDA->wdaState = WDA_STOP_STATE;
13982
Jeff Johnson295189b2012-06-20 16:38:30 -070013983 /* shutdown should perform the stop & close actions. */
13984 /* Destroy the event */
13985 status = vos_event_destroy(&pWDA->txFrameEvent);
13986 if(!VOS_IS_STATUS_SUCCESS(status))
13987 {
13988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13989 "VOS Event destroy failed - status = %d\n", status);
13990 status = VOS_STATUS_E_FAILURE;
13991 }
13992 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
13993 if(!VOS_IS_STATUS_SUCCESS(status))
13994 {
13995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13996 "VOS Event destroy failed - status = %d\n", status);
13997 status = VOS_STATUS_E_FAILURE;
13998 }
13999 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14000 if(!VOS_IS_STATUS_SUCCESS(status))
14001 {
14002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14003 "VOS Event destroy failed - status = %d\n", status);
14004 status = VOS_STATUS_E_FAILURE;
14005 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014006 /* free WDA context */
14007 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14008 if ( !VOS_IS_STATUS_SUCCESS(status) )
14009 {
14010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14011 "error in WDA close " );
14012 status = VOS_STATUS_E_FAILURE;
14013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014014 return status;
14015}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014016
Jeff Johnsone7245742012-09-05 17:12:55 -070014017/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014018 * FUNCTION: WDA_setNeedShutdown
14019 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014020 */
14021
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014022void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014023{
14024 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014025 if(pWDA == NULL)
14026 {
14027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14028 "Could not get the WDA Context pointer" );
14029 return;
14030 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014031 pWDA->needShutdown = TRUE;
14032}
14033/*
14034 * FUNCTION: WDA_needShutdown
14035 * WDA needs a shutdown
14036 */
14037
14038v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
14039{
14040 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014041 if(pWDA == NULL)
14042 {
14043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14044 "Could not get the WDA Context pointer" );
14045 return 0;
14046 }
14047 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014048}
14049
Mohit Khanna4a70d262012-09-11 16:30:12 -070014050#ifdef WLAN_FEATURE_11AC
14051/*
14052 * FUNCTION: WDA_SetBeaconFilterReqCallback
14053 *
14054 */
14055void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
14056{
14057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014059 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014060 if(NULL == pWdaParams)
14061 {
14062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014063 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014064 VOS_ASSERT(0) ;
14065 return ;
14066 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014067
Mohit Khanna4a70d262012-09-11 16:30:12 -070014068 vos_mem_free(pWdaParams->wdaMsgParam) ;
14069 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14070 vos_mem_free(pWdaParams) ;
14071 /*
14072 * No respone required for SetBeaconFilter req so just free the request
14073 * param here
14074 */
14075
14076 return ;
14077}
14078
14079VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
14080 tUpdateVHTOpMode *pData)
14081{
14082 WDI_Status status = WDI_STATUS_SUCCESS ;
14083 tWDA_ReqParams *pWdaParams ;
14084 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
14085 sizeof(WDI_UpdateVHTOpMode)) ;
14086 if(NULL == wdiTemp)
14087 {
14088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014089 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014090 VOS_ASSERT(0);
14091 return VOS_STATUS_E_NOMEM;
14092 }
14093 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14094 if(NULL == pWdaParams)
14095 {
14096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014097 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014098 VOS_ASSERT(0);
14099 vos_mem_free(wdiTemp);
14100 return VOS_STATUS_E_NOMEM;
14101 }
14102
14103 wdiTemp->opMode = pData->opMode;
14104 wdiTemp->staId = pData->staId;
14105
14106 pWdaParams->pWdaContext = pWDA;
14107 /* Store Req pointer, as this will be used for response */
14108 pWdaParams->wdaMsgParam = (void *)pData;
14109 /* store Params pass it to WDI */
14110 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
14111
14112 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
14113
14114 if(IS_WDI_STATUS_FAILURE(status))
14115 {
14116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14117 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
14118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14119 vos_mem_free(pWdaParams->wdaMsgParam);
14120 vos_mem_free(pWdaParams);
14121 }
14122 return CONVERT_WDI2VOS_STATUS(status) ;
14123}
14124#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014125
14126/*==========================================================================
14127 FUNCTION WDA_TransportChannelDebug
14128
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070014129 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014130 Display Transport Channel debugging information
14131 User may request to display DXE channel snapshot
14132 Or if host driver detects any abnormal stcuk may display
14133
14134 PARAMETERS
schang6295e542013-03-12 15:31:23 -070014135 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080014136 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014137 enableStallDetect : Enable stall detect feature
14138 This feature will take effect to data performance
14139 Not integrate till fully verification
14140
14141 RETURN VALUE
14142 NONE
14143
14144===========================================================================*/
14145void WDA_TransportChannelDebug
14146(
schang6295e542013-03-12 15:31:23 -070014147 tpAniSirGlobal pMac,
14148 v_BOOL_t displaySnapshot,
14149 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014150)
14151{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070014152 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014153 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014154}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070014155
14156/*==========================================================================
14157 FUNCTION WDA_SetEnableSSR
14158
14159 DESCRIPTION
14160 API to enable/disable SSR on WDI timeout
14161
14162 PARAMETERS
14163 enableSSR : enable/disable SSR
14164
14165 RETURN VALUE
14166 NONE
14167
14168===========================================================================*/
14169void WDA_SetEnableSSR(v_BOOL_t enableSSR)
14170{
14171 WDI_SetEnableSSR(enableSSR);
14172}
Leo Chang9056f462013-08-01 19:21:11 -070014173
14174#ifdef FEATURE_WLAN_LPHB
14175/*
14176 * FUNCTION: WDA_LPHBconfRspCallback
14177 *
14178 */
14179void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
14180{
14181 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14182
14183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14184 "<------ %s " ,__func__);
14185 if (NULL == pWdaParams)
14186 {
14187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14188 "%s: pWdaParams received NULL", __func__);
14189 VOS_ASSERT(0) ;
14190 return ;
14191 }
14192
14193 /* Do not need to send notification to upper layer
14194 * Just free allocated resources */
14195 if (pWdaParams != NULL)
14196 {
14197 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14198 {
14199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14200 }
14201 vos_mem_free(pWdaParams->wdaMsgParam) ;
14202 vos_mem_free(pWdaParams) ;
14203 }
14204
14205 return;
14206}
14207
14208/*
14209 * FUNCTION: WDA_ProcessLPHBConfReq
14210 *
14211 */
14212VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
14213 tSirLPHBReq *pData)
14214{
14215 WDI_Status wdiStatus;
14216 tWDA_ReqParams *pWdaParams ;
14217
14218 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14219 "------> %s " , __func__);
14220
14221 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14222 if (NULL == pWdaParams)
14223 {
14224 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14225 "%s: VOS MEM Alloc Failure", __func__);
14226 VOS_ASSERT(0);
14227 vos_mem_free(pData);
14228 return VOS_STATUS_E_NOMEM;
14229 }
14230
14231 pWdaParams->pWdaContext = pWDA;
14232 pWdaParams->wdaMsgParam = (void *)pData;
14233 pWdaParams->wdaWdiApiMsgParam = NULL;
14234
14235 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
14236 if (WDI_STATUS_PENDING == wdiStatus)
14237 {
14238 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14239 "Pending received for %s:%d ", __func__, __LINE__);
14240 }
14241 else if (WDI_STATUS_SUCCESS != wdiStatus)
14242 {
14243 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14244 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
14245 vos_mem_free(pWdaParams->wdaMsgParam);
14246 vos_mem_free(pWdaParams);
14247 }
14248
14249 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14250}
14251#endif /* FEATURE_WLAN_LPHB */
14252