blob: 81c14e65c7f382bd520a55b288474beddd94d35c [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
Jeff Johnson295189b2012-06-20 16:38:30 -07001571 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001572#ifdef WLAN_DEBUG
1573 {
1574 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001575 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1576 "****** Dumping CFG TLV ***** ");
1577 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1578 {
1579 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1580 "%02x %02x %02x %02x %02x %02x %02x %02x",
1581 tlvStructStart[i],
1582 tlvStructStart[i+1],
1583 tlvStructStart[i+2],
1584 tlvStructStart[i+3],
1585 tlvStructStart[i+4],
1586 tlvStructStart[i+5],
1587 tlvStructStart[i+6],
1588 tlvStructStart[i+7]);
1589 }
1590 /* Dump the bytes in the last line*/
1591 for (; i < wdiStartParams->usConfigBufferLen; i++)
1592 {
1593 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1594 "%02x ",tlvStructStart[i]);
1595 }
1596 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1597 "**************************** ");
1598 }
1599#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001600 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001601handle_failure:
1602 vos_mem_free(configParam);
1603 return VOS_STATUS_E_FAILURE;
1604}
Jeff Johnson295189b2012-06-20 16:38:30 -07001605/*
1606 * FUNCTION: WDA_wdiCompleteCB
1607 * call the voss call back function
1608 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001609void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001610{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001611 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1612 tWDA_CbContext *wdaContext;
1613
1614 if(NULL == pWdaParams)
1615 {
1616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001617 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001618 VOS_ASSERT(0) ;
1619 return ;
1620 }
1621
1622 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1623
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 if (NULL == wdaContext)
1625 {
1626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001627 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001628 return ;
1629 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001630
Jeff Johnson295189b2012-06-20 16:38:30 -07001631 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001632 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001633 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001635 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001636 vos_mem_free(pWdaParams);
1637
Jeff Johnson295189b2012-06-20 16:38:30 -07001638 if(WDI_STATUS_SUCCESS != status)
1639 {
1640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1641 "WDI stop callback returned failure" );
1642 VOS_ASSERT(0) ;
1643 }
1644 else
1645 {
1646 wdaContext->wdaState = WDA_STOP_STATE;
1647 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001648
Jeff Johnson295189b2012-06-20 16:38:30 -07001649 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001650 vos_WDAComplete_cback(wdaContext->pVosContext);
1651
Jeff Johnson295189b2012-06-20 16:38:30 -07001652 return ;
1653}
Jeff Johnson295189b2012-06-20 16:38:30 -07001654/*
1655 * FUNCTION: WDA_stop
1656 * call WDI_stop
1657 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001658VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1659{
1660 WDI_Status wdiStatus;
1661 VOS_STATUS status = VOS_STATUS_SUCCESS;
1662 WDI_StopReqParamsType *wdiStopReq;
1663 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001664 tWDA_ReqParams *pWdaParams ;
1665
Jeff Johnson295189b2012-06-20 16:38:30 -07001666 if (NULL == pWDA)
1667 {
1668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001669 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001670 VOS_ASSERT(0);
1671 return VOS_STATUS_E_FAILURE;
1672 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001673 if (pWDA->wdiFailed == true)
1674 {
1675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001676 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001677 return VOS_STATUS_E_ALREADY;
1678 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001679
Jeff Johnson295189b2012-06-20 16:38:30 -07001680 /* FTM mode stay START_STATE */
1681 if( (WDA_READY_STATE != pWDA->wdaState) &&
1682 (WDA_INIT_STATE != pWDA->wdaState) &&
1683 (WDA_START_STATE != pWDA->wdaState) )
1684 {
1685 VOS_ASSERT(0);
1686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001687 wdiStopReq = (WDI_StopReqParamsType *)
1688 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1689 if(NULL == wdiStopReq)
1690 {
1691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001692 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001693 VOS_ASSERT(0);
1694 return VOS_STATUS_E_NOMEM;
1695 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001696
Jeff Johnson295189b2012-06-20 16:38:30 -07001697 wdiStopReq->wdiStopReason = reason;
1698 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001699
1700 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1701 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001702 {
1703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001705 VOS_ASSERT(0);
1706 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001707 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001708 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001709
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001710 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1711 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001712 {
1713 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001714 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001715 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001716
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001717 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1718 pWdaParams->wdaMsgParam = NULL;
1719 pWdaParams->pWdaContext = pWDA;
1720
Jeff Johnson295189b2012-06-20 16:38:30 -07001721 /* call WDI stop */
1722 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001723 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1724
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1726 {
1727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1728 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1730 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001731 status = VOS_STATUS_E_FAILURE;
1732 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001733 return status;
1734}
Jeff Johnson295189b2012-06-20 16:38:30 -07001735/*
1736 * FUNCTION: WDA_close
1737 * call WDI_close and free the WDA context
1738 */
1739VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1740{
Jeff Johnson43971f52012-07-17 12:26:56 -07001741 VOS_STATUS status = VOS_STATUS_SUCCESS;
1742 WDI_Status wstatus;
1743 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001744 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001745 if (NULL == wdaContext)
1746 {
1747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001748 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001749 return VOS_STATUS_E_FAILURE;
1750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001751 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1752 (WDA_STOP_STATE != wdaContext->wdaState))
1753 {
1754 VOS_ASSERT(0);
1755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001756 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001757 wstatus = WDI_Close();
1758 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001759 {
1760 status = VOS_STATUS_E_FAILURE;
1761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001762 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001763 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001764 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1765 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 {
1767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1768 "WDI Sync Event destroy failed - status = %d\n", status);
1769 status = VOS_STATUS_E_FAILURE;
1770 }
1771
Jeff Johnson43971f52012-07-17 12:26:56 -07001772 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001773 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001774 {
1775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1776 "VOS Event destroy failed - status = %d\n", status);
1777 status = VOS_STATUS_E_FAILURE;
1778 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001779 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001780 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 "VOS Event destroy failed - status = %d\n", status);
1784 status = VOS_STATUS_E_FAILURE;
1785 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001786 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001787 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001788 {
1789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1790 "VOS Event destroy failed - status = %d\n", status);
1791 status = VOS_STATUS_E_FAILURE;
1792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001793 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001794 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
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 "error in WDA close " );
1799 status = VOS_STATUS_E_FAILURE;
1800 }
1801 return status;
1802}
Jeff Johnson295189b2012-06-20 16:38:30 -07001803/*
1804 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1805 * returns 1 if the compiled version is greater than or equal to the input version
1806 */
1807
1808uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1809{
1810 VOS_STATUS status = VOS_STATUS_SUCCESS;
1811 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1812 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001813 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001814 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1815 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1816 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1817 (compiledVersion.revision >= revision)))
1818 return 1;
1819 else
1820 return 0;
1821}
Jeff Johnson295189b2012-06-20 16:38:30 -07001822/*
1823 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1824 * returns 1 if the compiled version is greater than or equal to the input version
1825 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001826uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1827{
1828 VOS_STATUS status = VOS_STATUS_SUCCESS;
1829 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1830 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001831 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001832 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1833 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1834 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1835 (reportedVersion.revision >= revision)))
1836 return 1;
1837 else
1838 return 0;
1839}
Jeff Johnson295189b2012-06-20 16:38:30 -07001840/*
1841 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1842 * Returns the version of the WCNSS WLAN API with which the HOST
1843 * device driver was compiled
1844 */
1845VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1846 tSirVersionType *pVersion)
1847{
1848 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001849 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001850 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001851 if ((NULL == pvosGCtx) || (NULL == pVersion))
1852 {
1853 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001854 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001855 VOS_ASSERT(0);
1856 return VOS_STATUS_E_FAILURE;
1857 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001858 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1859 if (NULL == pWDA )
1860 {
1861 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001862 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001863 VOS_ASSERT(0);
1864 return VOS_STATUS_E_FAILURE;
1865 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001866 *pVersion = pWDA->wcnssWlanCompiledVersion;
1867 return VOS_STATUS_SUCCESS;
1868}
Jeff Johnson295189b2012-06-20 16:38:30 -07001869/*
1870 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1871 * Returns the version of the WCNSS WLAN API with which the WCNSS
1872 * device driver was compiled
1873 */
1874VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1875 tSirVersionType *pVersion)
1876{
1877 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001878 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001879 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001880 if ((NULL == pvosGCtx) || (NULL == pVersion))
1881 {
1882 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001883 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001884 VOS_ASSERT(0);
1885 return VOS_STATUS_E_FAILURE;
1886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1888 if (NULL == pWDA )
1889 {
1890 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001891 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001892 VOS_ASSERT(0);
1893 return VOS_STATUS_E_FAILURE;
1894 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001895 *pVersion = pWDA->wcnssWlanReportedVersion;
1896 return VOS_STATUS_SUCCESS;
1897}
Jeff Johnson295189b2012-06-20 16:38:30 -07001898/*
1899 * FUNCTION: WDA_GetWcnssSoftwareVersion
1900 * Returns the WCNSS Software version string
1901 */
1902VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1903 tANI_U8 *pVersion,
1904 tANI_U32 versionBufferSize)
1905{
1906 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001907 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001908 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001909 if ((NULL == pvosGCtx) || (NULL == pVersion))
1910 {
1911 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001912 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001913 VOS_ASSERT(0);
1914 return VOS_STATUS_E_FAILURE;
1915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001916 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1917 if (NULL == pWDA )
1918 {
1919 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001920 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001921 VOS_ASSERT(0);
1922 return VOS_STATUS_E_FAILURE;
1923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001924 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1925 return VOS_STATUS_SUCCESS;
1926}
Jeff Johnson295189b2012-06-20 16:38:30 -07001927/*
1928 * FUNCTION: WDA_GetWcnssHardwareVersion
1929 * Returns the WCNSS Hardware version string
1930 */
1931VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1932 tANI_U8 *pVersion,
1933 tANI_U32 versionBufferSize)
1934{
1935 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001936 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001937 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001938 if ((NULL == pvosGCtx) || (NULL == pVersion))
1939 {
1940 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001941 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001942 VOS_ASSERT(0);
1943 return VOS_STATUS_E_FAILURE;
1944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001945 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1946 if (NULL == pWDA )
1947 {
1948 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001949 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 VOS_ASSERT(0);
1951 return VOS_STATUS_E_FAILURE;
1952 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001953 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1954 return VOS_STATUS_SUCCESS;
1955}
Jeff Johnson295189b2012-06-20 16:38:30 -07001956/*
1957 * FUNCTION: WDA_WniCfgDnld
1958 * Trigger CFG Download
1959 */
1960VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1961{
1962 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001963 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001964 v_VOID_t *pFileImage = NULL;
1965 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001966 v_VOID_t *pCfgBinary = NULL;
1967 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001968 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07001969
Jeff Johnson295189b2012-06-20 16:38:30 -07001970 if (NULL == pMac )
1971 {
1972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001973 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001974 VOS_ASSERT(0);
1975 return VOS_STATUS_E_FAILURE;
1976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001977 /* get the number of bytes in the CFG Binary... */
1978 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1979 &cbFileImageSize );
1980 if ( VOS_STATUS_E_NOMEM != vosStatus )
1981 {
1982 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1983 "Error obtaining binary size" );
1984 goto fail;
1985 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001986 // malloc a buffer to read in the Configuration binary file.
1987 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001988 if ( NULL == pFileImage )
1989 {
1990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1991 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1992 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001993 vosStatus = VOS_STATUS_E_NOMEM;
1994 goto fail;
1995 }
1996
1997 /* Get the entire CFG file image... */
1998 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1999 &cbFileImageSize );
2000 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2001 {
2002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2003 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2004 cbFileImageSize );
2005 goto fail;
2006 }
2007
2008 /*
2009 * Validate the binary image. This function will return a pointer
2010 * and length where the CFG binary is located within the binary image file.
2011 */
2012 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2013 &pCfgBinary, &cbCfgBinarySize );
2014 if ( VOS_FALSE == bStatus )
2015 {
2016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2017 "Error: Cannot find STA CFG in binary image file" );
2018 vosStatus = VOS_STATUS_E_FAILURE;
2019 goto fail;
2020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002021 /*
2022 * TODO: call the config download function
2023 * for now calling the existing cfg download API
2024 */
2025 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002026 vosStatus = VOS_STATUS_SUCCESS;
2027
2028 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002029
2030fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002031 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002032 return vosStatus;
2033}
Jeff Johnson295189b2012-06-20 16:38:30 -07002034/* -----------------------------------------------------------------
2035 * WDI interface
2036 * -----------------------------------------------------------------
2037 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002038/*
2039 * FUNCTION: WDA_suspendDataTxCallback
2040 * call back function called from TL after suspend Transmission
2041 */
2042VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2043 v_U8_t* ucSTAId,
2044 VOS_STATUS vosStatus)
2045{
2046 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002048 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002049 if (NULL == pWDA )
2050 {
2051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002052 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002053 VOS_ASSERT(0);
2054 return VOS_STATUS_E_FAILURE;
2055 }
2056 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2057 {
2058 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2059 }
2060 else
2061 {
2062 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 /* Trigger the event to bring the WDA TL suspend function to come
2065 * out of wait*/
2066 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2067 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2068 {
2069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2070 "NEW VOS Event Set failed - status = %d \n", vosStatus);
2071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002072 /* If TL suspended had timedout before this callback was called, resume back
2073 * TL.*/
2074 if (pWDA->txSuspendTimedOut)
2075 {
2076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2077 "Late TLSuspendCallback, resuming TL back again\n");
2078 WDA_ResumeDataTx(pWDA);
2079 pWDA->txSuspendTimedOut = FALSE;
2080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 return VOS_STATUS_SUCCESS;
2082}
Jeff Johnson295189b2012-06-20 16:38:30 -07002083/*
2084 * FUNCTION: WDA_suspendDataTx
2085 * Update TL to suspend the data Transmission
2086 */
2087VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2088{
2089 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2090 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002091
2092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002093 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002094 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002095 if (pWDA->txSuspendTimedOut)
2096 {
2097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2098 "TL suspend timedout previously, CB not called yet\n");
2099 return status;
2100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 /* Reset the event to be not signalled */
2102 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2103 if(!VOS_IS_STATUS_SUCCESS(status))
2104 {
2105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2106 "VOS Event reset failed - status = %d\n",status);
2107 return VOS_STATUS_E_FAILURE;
2108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002109 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002110 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002111 WDA_SuspendDataTxCallback);
2112 if(status != VOS_STATUS_SUCCESS)
2113 {
2114 return status;
2115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002116 /* Wait for the event to be set by the TL, to get the response of
2117 * suspending the TX queues, this event should be set by the Callback
2118 * function called by TL*/
2119 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2120 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2121 if(!VOS_IS_STATUS_SUCCESS(status))
2122 {
2123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2124 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002125 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002126 /* Set this flag to true when TL suspend times out, so that when TL
2127 * suspend eventually happens and calls the callback, TL can be resumed
2128 * right away by looking at this flag when true.*/
2129 pWDA->txSuspendTimedOut = TRUE;
2130 }
2131 else
2132 {
2133 pWDA->txSuspendTimedOut = FALSE;
2134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002135 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2136 {
2137 status = VOS_STATUS_SUCCESS;
2138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002139 return status;
2140}
Jeff Johnson295189b2012-06-20 16:38:30 -07002141/*
2142 * FUNCTION: WDA_resumeDataTx
2143 * Update TL to resume the data Transmission
2144 */
2145VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2146{
2147 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002148
2149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002150 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002151
2152 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002153 return status;
2154}
Jeff Johnson295189b2012-06-20 16:38:30 -07002155/*
2156 * FUNCTION: WDA_InitScanReqCallback
2157 * Trigger Init SCAN callback
2158 */
2159void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2160{
2161 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2162 tWDA_CbContext *pWDA;
2163 tInitScanParams *pWDA_ScanParam ;
2164 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002166 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002167 if(NULL == pWdaParams)
2168 {
2169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002170 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 VOS_ASSERT(0) ;
2172 return ;
2173 }
2174 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2175 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 if(NULL == pWDA_ScanParam)
2177 {
2178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002179 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002180 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2182 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002183 return ;
2184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 if(WDI_STATUS_SUCCESS != wdiStatus)
2186 {
2187 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002188 if(VOS_STATUS_SUCCESS != status)
2189 {
2190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002191 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002192 }
2193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 /* free WDI command buffer */
2195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002197
Jeff Johnson295189b2012-06-20 16:38:30 -07002198
2199 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002200 /* without converting the Status to Failure or Success Just
2201 pass the same status to lim */
2202 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 /* send SCAN RSP message back to PE */
2204 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002205 return ;
2206}
2207
2208/*
2209 * FUNCTION: WDA_ProcessInitScanReq
2210 * Trigger Init SCAN in DAL
2211 */
2212VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2213 tInitScanParams *initScanParams)
2214{
2215 WDI_Status status = WDI_STATUS_SUCCESS ;
2216 WDI_InitScanReqParamsType *wdiInitScanParam =
2217 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2218 sizeof(WDI_InitScanReqParamsType)) ;
2219 tWDA_ReqParams *pWdaParams;
2220 tANI_U8 i = 0;
2221
2222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002223 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 if(NULL == wdiInitScanParam)
2225 {
2226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002227 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 VOS_ASSERT(0);
2229 return VOS_STATUS_E_NOMEM;
2230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2232 if(NULL == pWdaParams)
2233 {
2234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002235 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 VOS_ASSERT(0);
2237 vos_mem_free(wdiInitScanParam);
2238 return VOS_STATUS_E_NOMEM;
2239 }
2240
2241 /* Copy init Scan params to WDI structure */
2242 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2243 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2244 sizeof(tSirMacAddr)) ;
2245 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2246 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2247 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2249 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2251 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002252 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2253 {
2254 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2255 initScanParams->scanEntry.bssIdx[i] ;
2256 }
2257
2258 /* if Frame length, copy macMgmtHdr or WDI structure */
2259 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2260 {
2261 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2262 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2263 }
2264 wdiInitScanParam->wdiReqStatusCB = NULL ;
2265
Jeff Johnson295189b2012-06-20 16:38:30 -07002266 /* Store Init Req pointer, as this will be used for response */
2267 pWdaParams->pWdaContext = pWDA;
2268 pWdaParams->wdaMsgParam = initScanParams;
2269 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002270 /* first try to suspend TX */
2271 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002272 if(WDI_STATUS_SUCCESS != status)
2273 {
2274 goto handleWdiFailure;
2275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 /* call DAL API to pass init scan request to DAL */
2277 status = WDI_InitScanReq(wdiInitScanParam,
2278 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002279 if(IS_WDI_STATUS_FAILURE(status))
2280 {
2281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2282 "error in WDA Init Scan, Resume Tx " );
2283 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002284 VOS_ASSERT(0) ;
2285
2286 goto handleWdiFailure;
2287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002289handleWdiFailure:
2290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2291 "Failure in WDI Api, free all the memory " );
2292 /* free WDI command buffer */
2293 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2294 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002295 /* send Failure to PE */
2296 initScanParams->status = eSIR_FAILURE ;
2297 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002298 return CONVERT_WDI2VOS_STATUS(status) ;
2299}
2300
Jeff Johnson295189b2012-06-20 16:38:30 -07002301/*
2302 * FUNCTION: WDA_StartScanReqCallback
2303 * send Start SCAN RSP back to PE
2304 */
2305void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2306 void* pUserData)
2307{
2308 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2309 tWDA_CbContext *pWDA;
2310 tStartScanParams *pWDA_ScanParam;
2311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 if(NULL == pWdaParams)
2314 {
2315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002316 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 VOS_ASSERT(0) ;
2318 return ;
2319 }
2320 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2321 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 if(NULL == pWDA_ScanParam)
2323 {
2324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002325 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002327 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 return ;
2329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2331 {
2332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002333 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002335 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002336 return ;
2337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2339 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002340
Jeff Johnson295189b2012-06-20 16:38:30 -07002341
2342 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002343 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 /* send SCAN RSP message back to PE */
2345 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002346 return ;
2347}
2348
Jeff Johnson295189b2012-06-20 16:38:30 -07002349/*
2350 * FUNCTION: WDA_ProcessStartScanReq
2351 * Trigger start SCAN in WDI
2352 */
2353VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2354 tStartScanParams *startScanParams)
2355{
2356 WDI_Status status = WDI_STATUS_SUCCESS;
2357 WDI_StartScanReqParamsType *wdiStartScanParams =
2358 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2359 sizeof(WDI_StartScanReqParamsType)) ;
2360 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002362 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002363 if(NULL == wdiStartScanParams)
2364 {
2365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002366 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002367 VOS_ASSERT(0);
2368 return VOS_STATUS_E_NOMEM;
2369 }
2370 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2371 if(NULL == pWdaParams)
2372 {
2373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002374 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002375 VOS_ASSERT(0);
2376 vos_mem_free(wdiStartScanParams);
2377 return VOS_STATUS_E_NOMEM;
2378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002379 /* Copy init Scan params to WDI structure */
2380 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2381 wdiStartScanParams->wdiReqStatusCB = NULL ;
2382
Jeff Johnson295189b2012-06-20 16:38:30 -07002383 /* Store Init Req pointer, as this will be used for response */
2384 /* store Params pass it to WDI */
2385 pWdaParams->pWdaContext = pWDA;
2386 pWdaParams->wdaMsgParam = startScanParams;
2387 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 /* call DAL API to pass init scan request to DAL */
2389 status = WDI_StartScanReq(wdiStartScanParams,
2390 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002391 /* failure returned by WDI API */
2392 if(IS_WDI_STATUS_FAILURE(status))
2393 {
2394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2395 "Failure in Start Scan WDI API, free all the memory "
2396 "It should be due to previous abort scan." );
2397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2398 vos_mem_free(pWdaParams) ;
2399 startScanParams->status = eSIR_FAILURE ;
2400 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2401 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002402 return CONVERT_WDI2VOS_STATUS(status) ;
2403}
Jeff Johnson295189b2012-06-20 16:38:30 -07002404/*
2405 * FUNCTION: WDA_EndScanReqCallback
2406 * END SCAN callback
2407 */
2408void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2409{
2410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2411 tWDA_CbContext *pWDA;
2412 tEndScanParams *endScanParam;
2413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002414 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 if(NULL == pWdaParams)
2416 {
2417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002418 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002419 VOS_ASSERT(0) ;
2420 return ;
2421 }
2422 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2423 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 if(NULL == endScanParam)
2425 {
2426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002427 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2430 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002431 return ;
2432 }
2433
2434 /* Free WDI command buffer */
2435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2436 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002438 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 /* send response back to PE */
2440 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2441 return ;
2442}
2443
Jeff Johnson295189b2012-06-20 16:38:30 -07002444/*
2445 * FUNCTION: WDA_ProcessEndScanReq
2446 * Trigger END SCAN in WDI
2447 */
2448VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2449 tEndScanParams *endScanParams)
2450{
2451 WDI_Status status = WDI_STATUS_SUCCESS;
2452 WDI_EndScanReqParamsType *wdiEndScanParams =
2453 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2454 sizeof(WDI_EndScanReqParamsType)) ;
2455 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002457 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 if(NULL == wdiEndScanParams)
2459 {
2460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002462 VOS_ASSERT(0);
2463 return VOS_STATUS_E_NOMEM;
2464 }
2465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2466 if(NULL == pWdaParams)
2467 {
2468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 VOS_ASSERT(0);
2471 vos_mem_free(wdiEndScanParams);
2472 return VOS_STATUS_E_NOMEM;
2473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 /* Copy init Scan params to WDI structure */
2475 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2476 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 /* Store Init Req pointer, as this will be used for response */
2478 /* store Params pass it to WDI */
2479 pWdaParams->pWdaContext = pWDA;
2480 pWdaParams->wdaMsgParam = endScanParams;
2481 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 /* call DAL API to pass init scan request to DAL */
2483 status = WDI_EndScanReq(wdiEndScanParams,
2484 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 if(IS_WDI_STATUS_FAILURE(status))
2486 {
2487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2488 "Failure in End Scan WDI API, free all the memory "
2489 "It should be due to previous abort scan." );
2490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2491 vos_mem_free(pWdaParams) ;
2492 endScanParams->status = eSIR_FAILURE ;
2493 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2494 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002495 return CONVERT_WDI2VOS_STATUS(status) ;
2496}
Jeff Johnson295189b2012-06-20 16:38:30 -07002497/*
2498 * FUNCTION: WDA_FinishScanReqCallback
2499 * Trigger Finish SCAN callback
2500 */
2501void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2502{
2503 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2504 tWDA_CbContext *pWDA;
2505 tFinishScanParams *finishScanParam;
2506 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002508 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002509 if(NULL == pWdaParams)
2510 {
2511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002512 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 VOS_ASSERT(0) ;
2514 return ;
2515 }
2516
2517 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2518 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 if(NULL == finishScanParam)
2520 {
2521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002522 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2525 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 return ;
2527 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2529 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 /*
2531 * Now Resume TX, if we reached here means, TX is already suspended, we
2532 * have to resume it unconditionaly
2533 */
2534 status = WDA_ResumeDataTx(pWDA) ;
2535
2536 if(VOS_STATUS_SUCCESS != status)
2537 {
2538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002539 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002541 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2543 return ;
2544}
Jeff Johnson295189b2012-06-20 16:38:30 -07002545/*
2546 * FUNCTION: WDA_ProcessFinshScanReq
2547 * Trigger Finish SCAN in WDI
2548 */
2549VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2550 tFinishScanParams *finishScanParams)
2551{
2552 WDI_Status status = WDI_STATUS_SUCCESS;
2553 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2554 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2555 sizeof(WDI_FinishScanReqParamsType)) ;
2556 tWDA_ReqParams *pWdaParams ;
2557 tANI_U8 i = 0;
2558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002559 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002560 if(NULL == wdiFinishScanParams)
2561 {
2562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 VOS_ASSERT(0);
2565 return VOS_STATUS_E_NOMEM;
2566 }
2567 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2568 if(NULL == pWdaParams)
2569 {
2570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002571 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002572 VOS_ASSERT(0);
2573 vos_mem_free(wdiFinishScanParams);
2574 return VOS_STATUS_E_NOMEM;
2575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 /* Copy init Scan params to WDI structure */
2577 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2578 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2579 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2581 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2582 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2583 finishScanParams->frameLength ;
2584 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2585 finishScanParams->currentOperChannel ;
2586 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2587 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2588 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2590 {
2591 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2592 finishScanParams->scanEntry.bssIdx[i] ;
2593 }
2594
2595
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 /* if Frame length, copy macMgmtHdr ro WDI structure */
2597 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2598 {
2599 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2600 &finishScanParams->macMgmtHdr,
2601 sizeof(WDI_MacMgmtHdr)) ;
2602 }
2603 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 /* Store Init Req pointer, as this will be used for response */
2605 /* store Params pass it to WDI */
2606 pWdaParams->pWdaContext = pWDA;
2607 pWdaParams->wdaMsgParam = finishScanParams;
2608 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 /* call DAL API to pass init scan request to DAL */
2610 status = WDI_FinishScanReq(wdiFinishScanParams,
2611 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002612
Jeff Johnson295189b2012-06-20 16:38:30 -07002613
2614 /*
2615 * WDI API returns failure..
2616 */
2617 if(IS_WDI_STATUS_FAILURE( status))
2618 {
2619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2620 "Failure in Finish Scan WDI API, free all the memory " );
2621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2622 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002623 finishScanParams->status = eSIR_FAILURE ;
2624 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 return CONVERT_WDI2VOS_STATUS(status) ;
2627}
Jeff Johnson295189b2012-06-20 16:38:30 -07002628/*---------------------------------------------------------------------
2629 * ASSOC API's
2630 *---------------------------------------------------------------------
2631 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002632/*
2633 * FUNCTION: WDA_JoinReqCallback
2634 * Trigger Init SCAN callback
2635 */
2636void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2637{
2638 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2639 tWDA_CbContext *pWDA;
2640 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002642 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002643 if(NULL == pWdaParams)
2644 {
2645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002646 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002647 VOS_ASSERT(0) ;
2648 return ;
2649 }
2650 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2651 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2653 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 /* reset macBSSID */
2655 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 /* reset macSTASelf */
2657 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002658 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002659 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002660 return ;
2661}
Jeff Johnson295189b2012-06-20 16:38:30 -07002662/*
2663 * FUNCTION: WDA_ProcessJoinReq
2664 * Trigger Join REQ in WDI
2665 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002666VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2667 tSwitchChannelParams* joinReqParam)
2668{
2669 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 WDI_JoinReqParamsType *wdiJoinReqParam =
2671 (WDI_JoinReqParamsType *)vos_mem_malloc(
2672 sizeof(WDI_JoinReqParamsType)) ;
2673 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002675 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002676 if(NULL == wdiJoinReqParam)
2677 {
2678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002679 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002680 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002681 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 return VOS_STATUS_E_NOMEM;
2683 }
2684 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2685 if(NULL == pWdaParams)
2686 {
2687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 VOS_ASSERT(0);
2690 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002691 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 return VOS_STATUS_E_NOMEM;
2693 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002694
2695 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2696 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2697 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2698 {
2699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2700 "%s: received join request when BSSID or self-STA is NULL "
2701 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002702 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002703 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2704 VOS_ASSERT(0);
2705 vos_mem_free(wdiJoinReqParam);
2706 vos_mem_free(pWdaParams);
2707 joinReqParam->status = eSIR_FAILURE ;
2708 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2709 return VOS_STATUS_E_INVAL;
2710 }
2711
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 /* copy the BSSID for pWDA */
2713 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2714 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002715 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2716 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2718 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002719#ifdef WLAN_FEATURE_VOWIFI
2720 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2721 joinReqParam->maxTxPower ;
2722#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002723 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2724 joinReqParam->localPowerConstraint ;
2725#endif
2726 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2727 joinReqParam->secondaryChannelOffset ;
2728 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2729
2730 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 /* Store Init Req pointer, as this will be used for response */
2732 /* store Params pass it to WDI */
2733 pWdaParams->pWdaContext = pWDA;
2734 pWdaParams->wdaMsgParam = joinReqParam;
2735 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 status = WDI_JoinReq(wdiJoinReqParam,
2737 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 if(IS_WDI_STATUS_FAILURE(status))
2739 {
2740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2741 "Failure in Join WDI API, free all the memory " );
2742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2743 vos_mem_free(pWdaParams) ;
2744 joinReqParam->status = eSIR_FAILURE ;
2745 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 return CONVERT_WDI2VOS_STATUS(status) ;
2748}
Jeff Johnson295189b2012-06-20 16:38:30 -07002749/*
2750 * FUNCTION: WDA_SwitchChannelReqCallback
2751 * send Switch channel RSP back to PE
2752 */
2753void WDA_SwitchChannelReqCallback(
2754 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2755{
2756 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2757 tWDA_CbContext *pWDA;
2758 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002760 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 if(NULL == pWdaParams)
2762 {
2763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002764 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 VOS_ASSERT(0) ;
2766 return ;
2767 }
2768 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2769 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2770
2771#ifdef WLAN_FEATURE_VOWIFI
2772 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2773#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2775 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002777 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 return ;
2780}
Jeff Johnson295189b2012-06-20 16:38:30 -07002781/*
2782 * FUNCTION: WDA_ProcessChannelSwitchReq
2783 * Request to WDI to switch channel REQ params.
2784 */
2785VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2786 tSwitchChannelParams *pSwitchChanParams)
2787{
2788 WDI_Status status = WDI_STATUS_SUCCESS ;
2789 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2790 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2791 sizeof(WDI_SwitchChReqParamsType)) ;
2792 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002794 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 if(NULL == wdiSwitchChanParam)
2796 {
2797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002798 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 VOS_ASSERT(0);
2800 return VOS_STATUS_E_NOMEM;
2801 }
2802 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2803 if(NULL == pWdaParams)
2804 {
2805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 VOS_ASSERT(0);
2808 vos_mem_free(wdiSwitchChanParam);
2809 return VOS_STATUS_E_NOMEM;
2810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2812#ifndef WLAN_FEATURE_VOWIFI
2813 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2814 pSwitchChanParams->localPowerConstraint;
2815#endif
2816 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2817 pSwitchChanParams->secondaryChannelOffset;
2818 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002819 /* Store req pointer, as this will be used for response */
2820 /* store Params pass it to WDI */
2821 pWdaParams->pWdaContext = pWDA;
2822 pWdaParams->wdaMsgParam = pSwitchChanParams;
2823 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002824#ifdef WLAN_FEATURE_VOWIFI
2825 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2826 = pSwitchChanParams->maxTxPower;
2827 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2828 pSwitchChanParams ->selfStaMacAddr,
2829 sizeof(tSirMacAddr));
2830#endif
2831 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2832 pSwitchChanParams->bssId,
2833 sizeof(tSirMacAddr));
2834
2835 status = WDI_SwitchChReq(wdiSwitchChanParam,
2836 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 if(IS_WDI_STATUS_FAILURE(status))
2838 {
2839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2840 "Failure in process channel switch Req WDI API, free all the memory " );
2841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2842 vos_mem_free(pWdaParams) ;
2843 pSwitchChanParams->status = eSIR_FAILURE ;
2844 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 return CONVERT_WDI2VOS_STATUS(status) ;
2847}
Jeff Johnson295189b2012-06-20 16:38:30 -07002848/*
2849 * FUNCTION: WDA_ConfigBssReqCallback
2850 * config BSS Req Callback, called by WDI
2851 */
2852void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2853 ,void* pUserData)
2854{
2855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2856 tWDA_CbContext *pWDA;
2857 tAddBssParams *configBssReqParam;
2858 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002860 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 if(NULL == pWdaParams)
2862 {
2863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002864 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 VOS_ASSERT(0) ;
2866 return ;
2867 }
2868 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2869 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2870 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002872 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2874 {
2875 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2876 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2878 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2879 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2880
2881 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2882 {
2883 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2884 {
2885 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2886 staConfigBssParam->staType = STA_ENTRY_BSSID;
2887 }
2888 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2889 (staConfigBssParam->staType == STA_ENTRY_SELF))
2890 {
2891 /* This is the 1st add BSS Req for the BTAMP STA */
2892 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2893 staConfigBssParam->staType = STA_ENTRY_BSSID;
2894 }
2895 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2896 (staConfigBssParam->staType == STA_ENTRY_PEER))
2897 {
2898 /* This is the 2nd ADD BSS Request that is sent
2899 * on the BTAMP STA side. The Sta type is
2900 * set to STA_ENTRY_PEER here.*/
2901 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2902 }
2903 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2904 (staConfigBssParam->staType == STA_ENTRY_SELF))
2905 {
2906 /* statype is already set by PE.
2907 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2908 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2909 staConfigBssParam->staType = STA_ENTRY_BSSID;
2910 }
2911 else
2912 {
2913 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2914 staConfigBssParam->staType = STA_ENTRY_PEER;
2915 }
2916 }
2917 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2918 {
2919 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2920 staConfigBssParam->staType = STA_ENTRY_SELF;
2921 }
2922 else
2923 {
2924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2925 "Invalid operation mode specified");
2926 VOS_ASSERT(0);
2927 }
2928
2929 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2934 sizeof(tSirMacAddr));
2935 staConfigBssParam->txChannelWidthSet =
2936 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2938 staConfigBssParam->htCapable)
2939 {
2940 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2941 wdiConfigBssRsp->ucBSSIdx;
2942 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2943 WDA_VALID_STA_INDEX ;
2944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2946 wdiConfigBssRsp->ucBSSIdx,
2947 wdiConfigBssRsp->ucSTAIdx))
2948 {
2949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002950 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002951 VOS_ASSERT(0) ;
2952 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002953 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2954 {
2955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002956 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 VOS_ASSERT(0) ;
2958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002959#ifdef WLAN_FEATURE_VOWIFI
2960 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2961#endif
2962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2964 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 return ;
2967}
Jeff Johnson295189b2012-06-20 16:38:30 -07002968/*
2969 * FUNCTION: WDA_UpdateEdcaParamsForAC
2970 * Update WDI EDCA params with PE edca params
2971 */
2972void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2973 WDI_EdcaParamRecord *wdiEdcaParam,
2974 tSirMacEdcaParamRecord *macEdcaParam)
2975{
2976 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2977 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2978 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2979 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2980 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2981 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2982}
Jeff Johnson295189b2012-06-20 16:38:30 -07002983/*
2984 * FUNCTION: WDA_ProcessConfigBssReq
2985 * Configure BSS before starting Assoc with AP
2986 */
2987VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2988 tAddBssParams* configBssReqParam)
2989{
2990 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05302991 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002994 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05302995 if (NULL == configBssReqParam)
2996 {
2997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2998 "%s: configBssReqParam is NULL", __func__);
2999 return VOS_STATUS_E_INVAL;
3000 }
3001
3002 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3003 sizeof(WDI_ConfigBSSReqParamsType)) ;
3004
Jeff Johnson295189b2012-06-20 16:38:30 -07003005 if(NULL == wdiConfigBssReqParam)
3006 {
3007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003008 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 VOS_ASSERT(0);
3010 return VOS_STATUS_E_NOMEM;
3011 }
3012 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3013 if(NULL == pWdaParams)
3014 {
3015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003017 VOS_ASSERT(0);
3018 vos_mem_free(wdiConfigBssReqParam);
3019 return VOS_STATUS_E_NOMEM;
3020 }
Kiran4a17ebe2013-01-31 10:43:43 -08003021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3022 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3025 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 /* Store Init Req pointer, as this will be used for response */
3027 /* store Params pass it to WDI */
3028 pWdaParams->pWdaContext = pWDA;
3029 pWdaParams->wdaMsgParam = configBssReqParam;
3030 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3032 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 if(IS_WDI_STATUS_FAILURE(status))
3034 {
3035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3036 "Failure in Config BSS WDI API, free all the memory " );
3037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3038 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 return CONVERT_WDI2VOS_STATUS(status) ;
3043}
Jeff Johnson295189b2012-06-20 16:38:30 -07003044#ifdef ENABLE_HAL_COMBINED_MESSAGES
3045/*
3046 * FUNCTION: WDA_PostAssocReqCallback
3047 * Post ASSOC req callback, send RSP back to PE
3048 */
3049void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3050 void* pUserData)
3051{
3052 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3053 tPostAssocParams *postAssocReqParam =
3054 (tPostAssocParams *)pWDA->wdaMsgParam ;
3055 /*STA context within the BSS Params*/
3056 tAddStaParams *staPostAssocParam =
3057 &postAssocReqParam->addBssParams.staContext ;
3058 /*STA Params for self STA*/
3059 tAddStaParams *selfStaPostAssocParam =
3060 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003062 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003064 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3066 {
3067 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3068 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3069 sizeof(tSirMacAddr)) ;
3070 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3071 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3072 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003073 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3074 }
3075 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3076 pWDA->wdaWdiApiMsgParam = NULL;
3077 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003079 return ;
3080}
Jeff Johnson295189b2012-06-20 16:38:30 -07003081/*
3082 * FUNCTION: WDA_ProcessPostAssocReq
3083 * Trigger POST ASSOC processing in WDI
3084 */
3085VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3086 tPostAssocParams *postAssocReqParam)
3087{
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 WDI_Status status = WDI_STATUS_SUCCESS ;
3089
3090 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3091 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3092 sizeof(WDI_PostAssocReqParamsType)) ;
3093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003094 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003095
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 if(NULL == wdiPostAssocReqParam)
3097 {
3098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003100 VOS_ASSERT(0);
3101 return VOS_STATUS_E_NOMEM;
3102 }
3103
3104 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3105 {
3106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003107 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003108 VOS_ASSERT(0);
3109 return VOS_STATUS_E_FAILURE;
3110 }
3111
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 /* update BSS params into WDI structure */
3113 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3114 &postAssocReqParam->addBssParams) ;
3115 /* update STA params into WDI structure */
3116 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3117 &postAssocReqParam->addStaParams) ;
3118
3119 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3120 postAssocReqParam->addBssParams.highPerformance;
3121 WDA_UpdateEdcaParamsForAC(pWDA,
3122 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3123 &postAssocReqParam->addBssParams.acbe);
3124 WDA_UpdateEdcaParamsForAC(pWDA,
3125 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3126 &postAssocReqParam->addBssParams.acbk);
3127 WDA_UpdateEdcaParamsForAC(pWDA,
3128 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3129 &postAssocReqParam->addBssParams.acvi);
3130 WDA_UpdateEdcaParamsForAC(pWDA,
3131 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3132 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 /* Store Init Req pointer, as this will be used for response */
3134 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003135 /* store Params pass it to WDI */
3136 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3138 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 if(IS_WDI_STATUS_FAILURE(status))
3140 {
3141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3142 "Failure in Post Assoc WDI API, free all the memory " );
3143 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3144 pWDA->wdaWdiApiMsgParam = NULL;
3145 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003149 return CONVERT_WDI2VOS_STATUS(status) ;
3150}
3151#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003152/*
3153 * FUNCTION: WDA_AddStaReqCallback
3154 * ADD STA req callback, send RSP back to PE
3155 */
3156void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3157 void* pUserData)
3158{
3159 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3160 tWDA_CbContext *pWDA;
3161 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003163 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 if(NULL == pWdaParams)
3165 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003167 VOS_ASSERT(0) ;
3168 return ;
3169 }
3170 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3171 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003173 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3175 {
3176 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3177 /*TODO: UMAC structure doesn't have these fields*/
3178 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3179 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3180 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3181 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3182 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3183 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003184#ifdef FEATURE_WLAN_TDLS
3185 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3186 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3187#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003188 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003189#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003190 {
3191 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3192 wdiConfigStaRsp->ucBssIdx;
3193 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3194 WDA_VALID_STA_INDEX ;
3195 }
3196 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3197 {
3198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003199 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 VOS_ASSERT(0) ;
3201 return ;
3202 }
3203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3205 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 return ;
3208}
Jeff Johnson295189b2012-06-20 16:38:30 -07003209/*
3210 * FUNCTION: WDA_ConfigStaReq
3211 * Trigger Config STA processing in WDI
3212 */
3213VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3214 tAddStaParams *addStaReqParam)
3215{
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3218 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3219 sizeof(WDI_ConfigSTAReqParamsType)) ;
3220 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003222 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 if(NULL == wdiConfigStaReqParam)
3224 {
3225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003226 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003227 VOS_ASSERT(0);
3228 return VOS_STATUS_E_NOMEM;
3229 }
3230 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3231 if(NULL == pWdaParams)
3232 {
3233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003234 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003235 VOS_ASSERT(0);
3236 vos_mem_free(wdiConfigStaReqParam);
3237 return VOS_STATUS_E_NOMEM;
3238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 /* update STA params into WDI structure */
3241 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3242 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003243 /* Store Init Req pointer, as this will be used for response */
3244 /* store Params pass it to WDI */
3245 pWdaParams->pWdaContext = pWDA;
3246 pWdaParams->wdaMsgParam = addStaReqParam;
3247 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003248 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3249 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 if(IS_WDI_STATUS_FAILURE(status))
3251 {
3252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3253 "Failure in Config STA WDI API, free all the memory " );
3254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3255 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003256 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 return CONVERT_WDI2VOS_STATUS(status) ;
3260}
Jeff Johnson295189b2012-06-20 16:38:30 -07003261/*
3262 * FUNCTION: WDA_DelBSSReqCallback
3263 * Dens DEL BSS RSP back to PE
3264 */
3265void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3266 void* pUserData)
3267{
3268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3269 tWDA_CbContext *pWDA;
3270 tDeleteBssParams *delBssReqParam;
3271 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003273 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 if(NULL == pWdaParams)
3275 {
3276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003277 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 VOS_ASSERT(0) ;
3279 return ;
3280 }
3281 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3282 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003283 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3285 {
3286 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3287 sizeof(tSirMacAddr)) ;
3288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3290 {
3291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003292 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 VOS_ASSERT(0) ;
3294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3296 {
3297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003298 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 VOS_ASSERT(0) ;
3300 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003301 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3302 {
3303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003304 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 VOS_ASSERT(0) ;
3306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3308 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003309 /* reset the the system role*/
3310 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3311
3312 /* Reset the BA related information */
3313 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3314 {
3315 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3316 {
3317 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3318 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3319 /* Reset framesTxed counters here */
3320 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3321 {
3322 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3323 }
3324 }
3325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 return ;
3328}
3329
Jeff Johnson295189b2012-06-20 16:38:30 -07003330/*
3331 * FUNCTION: WDA_ProcessDelBssReq
3332 * Init DEL BSS req with WDI
3333 */
3334VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3335 tDeleteBssParams *delBssParam)
3336{
3337 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003338 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3339 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3340 sizeof(WDI_DelBSSReqParamsType)) ;
3341 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003343 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 if(NULL == wdiDelBssReqParam)
3345 {
3346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 VOS_ASSERT(0);
3349 return VOS_STATUS_E_NOMEM;
3350 }
3351 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3352 if(NULL == pWdaParams)
3353 {
3354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003355 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003356 VOS_ASSERT(0);
3357 vos_mem_free(wdiDelBssReqParam);
3358 return VOS_STATUS_E_NOMEM;
3359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3361 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3362
3363 /* Store Init Req pointer, as this will be used for response */
3364 /* store Params pass it to WDI */
3365 pWdaParams->pWdaContext = pWDA;
3366 pWdaParams->wdaMsgParam = delBssParam;
3367 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003368 status = WDI_DelBSSReq(wdiDelBssReqParam,
3369 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003370 if(IS_WDI_STATUS_FAILURE(status))
3371 {
3372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3373 "Failure in Del BSS WDI API, free all the memory " );
3374 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3375 vos_mem_free(pWdaParams) ;
3376 delBssParam->status = eSIR_FAILURE ;
3377 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 return CONVERT_WDI2VOS_STATUS(status) ;
3380}
Jeff Johnson295189b2012-06-20 16:38:30 -07003381/*
3382 * FUNCTION: WDA_DelSTAReqCallback
3383 * Dens DEL STA RSP back to PE
3384 */
3385void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3386 void* pUserData)
3387{
3388 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3389 tWDA_CbContext *pWDA;
3390 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003392 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003393 if(NULL == pWdaParams)
3394 {
3395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003396 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 VOS_ASSERT(0) ;
3398 return ;
3399 }
3400 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3401 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003402 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3404 {
3405 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3406 {
3407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003408 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003409 VOS_ASSERT(0) ;
3410 }
3411 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3412 }
3413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3414 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 /*Reset the BA information corresponding to this STAIdx */
3416 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3417 WDA_INVALID_STA_INDEX;
3418 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3419
3420 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 return ;
3422}
Jeff Johnson295189b2012-06-20 16:38:30 -07003423/*
3424 * FUNCTION: WDA_ProcessDelStaReq
3425 * Init DEL STA req with WDI
3426 */
3427VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3428 tDeleteStaParams *delStaParam)
3429{
3430 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3432 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3433 sizeof(WDI_DelSTAReqParamsType)) ;
3434 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003436 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 if(NULL == wdiDelStaReqParam)
3438 {
3439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003441 VOS_ASSERT(0);
3442 return VOS_STATUS_E_NOMEM;
3443 }
3444 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3445 if(NULL == pWdaParams)
3446 {
3447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003449 VOS_ASSERT(0);
3450 vos_mem_free(wdiDelStaReqParam);
3451 return VOS_STATUS_E_NOMEM;
3452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3454 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003455 /* Store Init Req pointer, as this will be used for response */
3456 /* store Params pass it to WDI */
3457 pWdaParams->pWdaContext = pWDA;
3458 pWdaParams->wdaMsgParam = delStaParam;
3459 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 status = WDI_DelSTAReq(wdiDelStaReqParam,
3461 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003462 if(IS_WDI_STATUS_FAILURE(status))
3463 {
3464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3465 "Failure in Del STA WDI API, free all the memory status = %d",
3466 status );
3467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3468 vos_mem_free(pWdaParams) ;
3469 delStaParam->status = eSIR_FAILURE ;
3470 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 return CONVERT_WDI2VOS_STATUS(status) ;
3473}
Jeff Johnson295189b2012-06-20 16:38:30 -07003474void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3475{
3476 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3477 tWDA_CbContext *pWDA;
3478 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003480 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 if(NULL == pWdaParams)
3482 {
3483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003484 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 VOS_ASSERT(0) ;
3486 return ;
3487 }
3488 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3489 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3491 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003492 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3493 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3494 pwdiAddSTASelfRsp->macSelfSta,
3495 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 return ;
3498}
Jeff Johnson295189b2012-06-20 16:38:30 -07003499/*
3500 * FUNCTION: WDA_ProcessAddStaSelfReq
3501 *
3502 */
3503VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3504{
3505 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003506 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3508 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3509 sizeof(WDI_AddSTASelfReqParamsType)) ;
3510 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003512 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003513 if( NULL == wdiAddStaSelfReq )
3514 {
3515 VOS_ASSERT( 0 );
3516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003517 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003518 return( VOS_STATUS_E_NOMEM );
3519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 if( NULL == pWdaParams )
3522 {
3523 VOS_ASSERT( 0 );
3524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003525 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003526 vos_mem_free(wdiAddStaSelfReq) ;
3527 return( VOS_STATUS_E_NOMEM );
3528 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003530 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003531 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 /* Store Init Req pointer, as this will be used for response */
3533 /* store Params pass it to WDI */
3534 pWdaParams->pWdaContext = pWDA;
3535 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3536 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003537 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003538
Jeff Johnson43971f52012-07-17 12:26:56 -07003539 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003540 {
3541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3542 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003543 wstatus );
3544 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3546 vos_mem_free(pWdaParams) ;
3547 pAddStaSelfReq->status = eSIR_FAILURE ;
3548 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3549 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003550 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003551}
Jeff Johnson295189b2012-06-20 16:38:30 -07003552/*
3553 * FUNCTION: WDA_DelSTASelfRespCallback
3554 *
3555 */
3556void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3557 wdiDelStaSelfRspParams , void* pUserData)
3558{
3559 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3560 tWDA_CbContext *pWDA;
3561 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003563 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003564 if (NULL == pWdaParams)
3565 {
3566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003567 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003568 VOS_ASSERT(0);
3569 return;
3570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003571 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3572 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003574 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003575
3576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3577 vos_mem_free(pWdaParams) ;
3578
3579 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003580 return ;
3581}
Jeff Johnson295189b2012-06-20 16:38:30 -07003582/*
3583 * FUNCTION: WDA_DelSTASelfReqCallback
3584 *
3585 */
3586void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3587 void* pUserData)
3588{
3589 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3590 tWDA_CbContext *pWDA;
3591 tDelStaSelfParams *delStaSelfParams;
3592
3593 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303594 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003595 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003596
3597 if (NULL == pWdaParams)
3598 {
3599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003600 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 VOS_ASSERT(0);
3602 return;
3603 }
3604
3605 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3606 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3607
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003608 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003609
3610 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3611 {
3612 VOS_ASSERT(0);
3613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3614 vos_mem_free(pWdaParams) ;
3615 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3616 }
3617
3618 return ;
3619}
3620
3621/*
3622 * FUNCTION: WDA_DelSTASelfReq
3623 * Trigger Config STA processing in WDI
3624 */
3625VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3626 tDelStaSelfParams* pDelStaSelfReqParam)
3627{
3628 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003629 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003630 tWDA_ReqParams *pWdaParams = NULL;
3631 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3632 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3633 sizeof(WDI_DelSTASelfReqParamsType)) ;
3634
Jeff Johnson295189b2012-06-20 16:38:30 -07003635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003636 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003637 if( NULL == wdiDelStaSelfReq )
3638 {
3639 VOS_ASSERT( 0 );
3640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003641 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 return( VOS_STATUS_E_NOMEM );
3643 }
3644
3645 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3646 if( NULL == pWdaParams )
3647 {
3648 VOS_ASSERT( 0 );
3649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003650 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 vos_mem_free(wdiDelStaSelfReq) ;
3652 return( VOS_STATUS_E_NOMEM );
3653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 pWdaParams->pWdaContext = pWDA;
3655 /* Store param pointer as passed in by caller */
3656 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3657 /* store Params pass it to WDI */
3658 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3660 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3661
3662 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3663 wdiDelStaSelfReq->pUserData = pWdaParams;
3664
Jeff Johnson43971f52012-07-17 12:26:56 -07003665 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003666 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3667
Jeff Johnson43971f52012-07-17 12:26:56 -07003668 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003669 {
3670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3671 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3672 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003673 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3675 vos_mem_free(pWdaParams) ;
3676 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3677 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3678 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003679 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003680}
3681
Jeff Johnson295189b2012-06-20 16:38:30 -07003682/*
3683 * FUNCTION: WDA_SendMsg
3684 * Send Message back to PE
3685 */
3686void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3687 void *pBodyptr, tANI_U32 bodyVal)
3688{
3689 tSirMsgQ msg = {0} ;
3690 tANI_U32 status = VOS_STATUS_SUCCESS ;
3691 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003692 msg.type = msgType;
3693 msg.bodyval = bodyVal;
3694 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003696 if (VOS_STATUS_SUCCESS != status)
3697 {
3698 if(NULL != pBodyptr)
3699 {
3700 vos_mem_free(pBodyptr);
3701 }
3702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003703 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003704 VOS_ASSERT(0) ;
3705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003706 return ;
3707}
Jeff Johnson295189b2012-06-20 16:38:30 -07003708/*
3709 * FUNCTION: WDA_UpdateBSSParams
3710 * Translated WDA/PE BSS info into WDI BSS info..
3711 */
3712void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3713 WDI_ConfigBSSReqInfoType *wdiBssParams,
3714 tAddBssParams *wdaBssParams)
3715{
3716 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003717 /* copy bssReq Params to WDI structure */
3718 vos_mem_copy(wdiBssParams->macBSSID,
3719 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3720 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3721 sizeof(tSirMacAddr)) ;
3722 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3723 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3724 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 wdiBssParams->ucShortSlotTimeSupported =
3726 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003727 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3728 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3729 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3730 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3731 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3732
3733 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3734 wdiBssParams->ucTXOPProtectionFullSupport =
3735 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003736 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3737 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003739 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3740 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3741 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3742 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3743
Chet Lanctot186b5732013-03-18 10:26:30 -07003744 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3745
Jeff Johnson295189b2012-06-20 16:38:30 -07003746 /* copy SSID into WDI structure */
3747 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3748 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3749 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3751 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003752 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003753#ifdef WLAN_FEATURE_VOWIFI
3754 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3755#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003758#ifdef WLAN_FEATURE_VOWIFI_11R
3759 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 if(wdiBssParams->bExtSetStaKeyParamValid)
3761 {
3762 /* copy set STA key params to WDI structure */
3763 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3764 wdaBssParams->extSetStaKeyParam.staIdx;
3765 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3766 wdaBssParams->extSetStaKeyParam.encType;
3767 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3768 wdaBssParams->extSetStaKeyParam.wepType;
3769 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3770 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3772 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003773 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003774 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3775 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3776 {
3777 WDA_GetWepKeysFromCfg( pWDA,
3778 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3779 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3780 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3781 }
3782 else
3783 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003784 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3785 keyIndex++)
3786 {
3787 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3788 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3789 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3790 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3791 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3792 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3794 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3795 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3796 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3797 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3798 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3799 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3800 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003802 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3803 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003804 }
3805 }
3806 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3807 }
3808 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3809 {
3810 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3811 sizeof(wdaBssParams->extSetStaKeyParam) );
3812 }
3813#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003814#ifdef WLAN_FEATURE_11AC
3815 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3816 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3817#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003818
3819 return ;
3820}
Jeff Johnson295189b2012-06-20 16:38:30 -07003821/*
3822 * FUNCTION: WDA_UpdateSTAParams
3823 * Translated WDA/PE BSS info into WDI BSS info..
3824 */
3825void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3826 WDI_ConfigStaReqInfoType *wdiStaParams,
3827 tAddStaParams *wdaStaParams)
3828{
3829 tANI_U8 i = 0;
3830 /* Update STA params */
3831 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3832 sizeof(tSirMacAddr)) ;
3833 wdiStaParams->usAssocId = wdaStaParams->assocId;
3834 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003835 wdiStaParams->staIdx = wdaStaParams->staIdx;
3836
Jeff Johnson295189b2012-06-20 16:38:30 -07003837 wdiStaParams->ucShortPreambleSupported =
3838 wdaStaParams->shortPreambleSupported;
3839 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3840 sizeof(tSirMacAddr)) ;
3841 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3842
3843 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3844
3845 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3846 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3847 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3848 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3849 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3850 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3851 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3852
3853 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3854 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 wdiStaParams->wdiSupportedRates.opRateMode =
3856 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003857 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3858 {
3859 wdiStaParams->wdiSupportedRates.llbRates[i] =
3860 wdaStaParams->supportedRates.llbRates[i];
3861 }
3862 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3863 {
3864 wdiStaParams->wdiSupportedRates.llaRates[i] =
3865 wdaStaParams->supportedRates.llaRates[i];
3866 }
3867 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3868 {
3869 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3870 wdaStaParams->supportedRates.aniLegacyRates[i];
3871 }
3872 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3873 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003874#ifdef WLAN_FEATURE_11AC
3875 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3876 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3877 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3878 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3879#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3881 {
3882 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3883 wdaStaParams->supportedRates.supportedMCSSet[i];
3884 }
3885 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3886 wdaStaParams->supportedRates.rxHighestDataRate;
3887
3888 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3889
3890 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3891
3892 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3893 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3894 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3895
3896 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3897 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3898 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3899 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003900 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003901#ifdef WLAN_FEATURE_11AC
3902 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3903 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003904 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003905#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003906 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3907 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003908 return ;
3909}
Jeff Johnson295189b2012-06-20 16:38:30 -07003910/*
3911 * -------------------------------------------------------------------------
3912 * CFG update to WDI
3913 * -------------------------------------------------------------------------
3914 */
3915
3916 /*
3917 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3918 * Convert the WNI CFG ID to HAL CFG ID
3919 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003920static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003921{
3922 switch(wniCfgId)
3923 {
3924 case WNI_CFG_STA_ID:
3925 return QWLAN_HAL_CFG_STA_ID;
3926 case WNI_CFG_CURRENT_TX_ANTENNA:
3927 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3928 case WNI_CFG_CURRENT_RX_ANTENNA:
3929 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3930 case WNI_CFG_LOW_GAIN_OVERRIDE:
3931 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3932 case WNI_CFG_POWER_STATE_PER_CHAIN:
3933 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3934 case WNI_CFG_CAL_PERIOD:
3935 return QWLAN_HAL_CFG_CAL_PERIOD;
3936 case WNI_CFG_CAL_CONTROL:
3937 return QWLAN_HAL_CFG_CAL_CONTROL;
3938 case WNI_CFG_PROXIMITY:
3939 return QWLAN_HAL_CFG_PROXIMITY;
3940 case WNI_CFG_NETWORK_DENSITY:
3941 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3942 case WNI_CFG_MAX_MEDIUM_TIME:
3943 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3944 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3945 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3946 case WNI_CFG_RTS_THRESHOLD:
3947 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3948 case WNI_CFG_SHORT_RETRY_LIMIT:
3949 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3950 case WNI_CFG_LONG_RETRY_LIMIT:
3951 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3952 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3953 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3954 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3955 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3956 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3957 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3958 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3959 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3960 case WNI_CFG_FIXED_RATE:
3961 return QWLAN_HAL_CFG_FIXED_RATE;
3962 case WNI_CFG_RETRYRATE_POLICY:
3963 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3964 case WNI_CFG_RETRYRATE_SECONDARY:
3965 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3966 case WNI_CFG_RETRYRATE_TERTIARY:
3967 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3968 case WNI_CFG_FORCE_POLICY_PROTECTION:
3969 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3970 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3971 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3972 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3973 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3974 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3975 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3976 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3977 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3978 case WNI_CFG_MAX_BA_SESSIONS:
3979 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3980 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3981 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3982 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3983 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3984 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3985 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3986 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3987 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3988 case WNI_CFG_STATS_PERIOD:
3989 return QWLAN_HAL_CFG_STATS_PERIOD;
3990 case WNI_CFG_CFP_MAX_DURATION:
3991 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3992#if 0 /*This is not part of CFG*/
3993 case WNI_CFG_FRAME_TRANS_ENABLED:
3994 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3995#endif
3996 case WNI_CFG_DTIM_PERIOD:
3997 return QWLAN_HAL_CFG_DTIM_PERIOD;
3998 case WNI_CFG_EDCA_WME_ACBK:
3999 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4000 case WNI_CFG_EDCA_WME_ACBE:
4001 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4002 case WNI_CFG_EDCA_WME_ACVI:
4003 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4004 case WNI_CFG_EDCA_WME_ACVO:
4005 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4006#if 0
4007 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4008 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4009 case WNI_CFG_TELE_BCN_TRANS_LI:
4010 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4011 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4012 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4013 case WNI_CFG_TELE_BCN_MAX_LI:
4014 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4015 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4016 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4017#endif
4018 case WNI_CFG_ENABLE_CLOSE_LOOP:
4019 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004020 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4021 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004022 default:
4023 {
4024 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4025 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
4026 wniCfgId);
4027 return VOS_STATUS_E_INVAL;
4028 }
4029 }
4030}
Jeff Johnson295189b2012-06-20 16:38:30 -07004031/*
4032 * FUNCTION: WDA_UpdateCfgCallback
4033 *
4034 */
4035void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4036{
4037 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4038 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4039 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004041 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004042 /*
4043 * currently there is no response message is expected between PE and
4044 * WDA, Failure return from WDI is a ASSERT condition
4045 */
4046 if(WDI_STATUS_SUCCESS != wdiStatus)
4047 {
4048 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004049 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004050 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4051 }
4052
4053 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4054 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4055 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004056 return ;
4057}
Jeff Johnson295189b2012-06-20 16:38:30 -07004058/*
4059 * FUNCTION: WDA_UpdateCfg
4060 *
4061 */
4062VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4063{
4064
4065 WDI_Status status = WDI_STATUS_SUCCESS ;
4066 tANI_U32 val =0;
4067 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4068 tHalCfg *configData;
4069 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4070 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004072 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 if (NULL == pMac )
4074 {
4075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004076 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 return VOS_STATUS_E_FAILURE;
4078 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 if(WDA_START_STATE != pWDA->wdaState)
4080 {
4081 return VOS_STATUS_E_FAILURE;
4082 }
4083
4084 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4085 {
4086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004087 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004088 VOS_ASSERT(0);
4089 return VOS_STATUS_E_FAILURE;
4090 }
4091
4092 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4093 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 if(NULL == wdiCfgReqParam)
4095 {
4096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004097 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004098 VOS_ASSERT(0);
4099 return VOS_STATUS_E_NOMEM;
4100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004101 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4102 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 if(NULL == wdiCfgReqParam->pConfigBuffer)
4104 {
4105 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004106 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 vos_mem_free(wdiCfgReqParam);
4108 VOS_ASSERT(0);
4109 return VOS_STATUS_E_NOMEM;
4110 }
4111
4112 /*convert the WNI CFG Id to HAL CFG Id*/
4113 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4114 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4115
4116 /*TODO: revisit this for handling string parameters */
4117 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4118 &val) != eSIR_SUCCESS)
4119 {
4120 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4121 "Failed to cfg get id %d\n", cfgParam->bodyval);
4122 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4123 vos_mem_free(wdiCfgReqParam);
4124 return eSIR_FAILURE;
4125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004126 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4127 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4128 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4129 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4130 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4131
4132 /* store Params pass it to WDI */
4133 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004134#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4135 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4136 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 if(IS_WDI_STATUS_FAILURE(status))
4138 {
4139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4140 "Failure in Update CFG WDI API, free all the memory " );
4141 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4142 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4143 pWDA->wdaWdiCfgApiMsgParam = NULL;
4144 /* Failure is not expected */
4145 VOS_ASSERT(0) ;
4146 }
4147#else
4148 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4149 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4150 pWDA->wdaWdiCfgApiMsgParam = NULL;
4151#endif
4152 return CONVERT_WDI2VOS_STATUS(status) ;
4153}
4154
Jeff Johnson295189b2012-06-20 16:38:30 -07004155VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4156 v_U8_t *pDefaultKeyId,
4157 v_U8_t *pNumKeys,
4158 WDI_KeysType *pWdiKeys )
4159{
4160 v_U32_t i, j, defKeyId = 0;
4161 v_U32_t val = SIR_MAC_KEY_LENGTH;
4162 VOS_STATUS status = WDI_STATUS_SUCCESS;
4163 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 if (NULL == pMac )
4165 {
4166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004167 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004168 return VOS_STATUS_E_FAILURE;
4169 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004170 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4171 &defKeyId ))
4172 {
4173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4174 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4175 }
4176
4177 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 /* Need to extract ALL of the configured WEP Keys */
4179 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4180 {
4181 val = SIR_MAC_KEY_LENGTH;
4182 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4183 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4184 pWdiKeys[j].key,
4185 &val ))
4186 {
4187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4188 "WEP Key index [%d] may not configured in CFG\n",i);
4189 }
4190 else
4191 {
4192 pWdiKeys[j].keyId = (tANI_U8) i;
4193 /*
4194 * Actually, a DC (Don't Care) because
4195 * this is determined (and set) by PE/MLME
4196 */
4197 pWdiKeys[j].unicast = 0;
4198 /*
4199 * Another DC (Don't Care)
4200 */
4201 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4202 /* Another DC (Don't Care). Unused for WEP */
4203 pWdiKeys[j].paeRole = 0;
4204 /* Determined from wlan_cfgGetStr() above.*/
4205 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004206 j++;
4207 *pNumKeys = (tANI_U8) j;
4208 }
4209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004210 return status;
4211}
Jeff Johnson295189b2012-06-20 16:38:30 -07004212/*
4213 * FUNCTION: WDA_SetBssKeyReqCallback
4214 * send SET BSS key RSP back to PE
4215 */
4216void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4217{
4218 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4219 tWDA_CbContext *pWDA;
4220 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004222 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 if(NULL == pWdaParams)
4224 {
4225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004226 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 VOS_ASSERT(0) ;
4228 return ;
4229 }
4230 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4231 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4233 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004234 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004235 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 return ;
4237}
Jeff Johnson295189b2012-06-20 16:38:30 -07004238/*
4239 * FUNCTION: WDA_ProcessSetBssKeyReq
4240 * Request to WDI for programming the BSS key( key for
4241 * broadcast/multicast frames Encryption)
4242 */
4243VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4244 tSetBssKeyParams *setBssKeyParams )
4245{
4246 WDI_Status status = WDI_STATUS_SUCCESS ;
4247 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4248 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4249 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4250 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004253 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004254 if(NULL == wdiSetBssKeyParam)
4255 {
4256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 VOS_ASSERT(0);
4259 return VOS_STATUS_E_NOMEM;
4260 }
4261 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4262 if(NULL == pWdaParams)
4263 {
4264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004265 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 VOS_ASSERT(0);
4267 vos_mem_free(wdiSetBssKeyParam);
4268 return VOS_STATUS_E_NOMEM;
4269 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004270 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 /* copy set BSS params to WDI structure */
4272 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4273 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4274 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 if(setBssKeyParams->encType != eSIR_ED_NONE)
4276 {
4277 if( setBssKeyParams->numKeys == 0 &&
4278 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4279 setBssKeyParams->encType == eSIR_ED_WEP104))
4280 {
4281 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4283 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4284 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4285 }
4286 else
4287 {
4288 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4289 {
4290 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4291 setBssKeyParams->key[keyIndex].keyId;
4292 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4293 setBssKeyParams->key[keyIndex].unicast;
4294 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4295 setBssKeyParams->key[keyIndex].keyDirection;
4296 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4297 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4298 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4299 setBssKeyParams->key[keyIndex].paeRole;
4300 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4301 setBssKeyParams->key[keyIndex].keyLength;
4302 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4303 setBssKeyParams->key[keyIndex].key,
4304 SIR_MAC_MAX_KEY_LENGTH);
4305 }
4306 }
4307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4309 setBssKeyParams->singleTidRc;
4310 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 /* Store set key pointer, as this will be used for response */
4312 /* store Params pass it to WDI */
4313 pWdaParams->pWdaContext = pWDA;
4314 pWdaParams->wdaMsgParam = setBssKeyParams;
4315 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4317 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4318
4319 if(IS_WDI_STATUS_FAILURE(status))
4320 {
4321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4322 "Failure in Set BSS Key Req WDI API, free all the memory " );
4323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4324 vos_mem_free(pWdaParams) ;
4325 setBssKeyParams->status = eSIR_FAILURE ;
4326 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 return CONVERT_WDI2VOS_STATUS(status) ;
4329}
Jeff Johnson295189b2012-06-20 16:38:30 -07004330/*
4331 * FUNCTION: WDA_RemoveBssKeyReqCallback
4332 * send SET BSS key RSP back to PE
4333 */
4334void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4335{
4336 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4337 tWDA_CbContext *pWDA;
4338 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004340 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004341 if(NULL == pWdaParams)
4342 {
4343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004344 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 VOS_ASSERT(0) ;
4346 return ;
4347 }
4348 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4349 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4351 vos_mem_free(pWdaParams) ;
4352
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004353 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 return ;
4356}
Jeff Johnson295189b2012-06-20 16:38:30 -07004357/*
4358 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4359 * Request to WDI to remove the BSS key( key for broadcast/multicast
4360 * frames Encryption)
4361 */
4362VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4363 tRemoveBssKeyParams *removeBssKeyParams )
4364{
4365 WDI_Status status = WDI_STATUS_SUCCESS ;
4366 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4367 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4368 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4369 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004371 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 if(NULL == wdiRemoveBssKeyParam)
4373 {
4374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 VOS_ASSERT(0);
4377 return VOS_STATUS_E_NOMEM;
4378 }
4379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4380 if(NULL == pWdaParams)
4381 {
4382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 VOS_ASSERT(0);
4385 vos_mem_free(wdiRemoveBssKeyParam);
4386 return VOS_STATUS_E_NOMEM;
4387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 /* copy Remove BSS key params to WDI structure*/
4389 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4390 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4391 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4392 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4393 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 /* Store remove key pointer, as this will be used for response */
4395 /* store Params pass it to WDI */
4396 pWdaParams->pWdaContext = pWDA;
4397 pWdaParams->wdaMsgParam = removeBssKeyParams;
4398 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004399 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4400 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 if(IS_WDI_STATUS_FAILURE(status))
4402 {
4403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4404 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4405 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4406 vos_mem_free(pWdaParams) ;
4407 removeBssKeyParams->status = eSIR_FAILURE ;
4408 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004410 return CONVERT_WDI2VOS_STATUS(status) ;
4411}
Jeff Johnson295189b2012-06-20 16:38:30 -07004412/*
4413 * FUNCTION: WDA_SetBssKeyReqCallback
4414 * send SET BSS key RSP back to PE
4415 */
4416void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4417{
4418 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4419 tWDA_CbContext *pWDA;
4420 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004422 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 if(NULL == pWdaParams)
4424 {
4425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004426 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 VOS_ASSERT(0) ;
4428 return ;
4429 }
4430 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4431 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4433 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004434 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004435 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 return ;
4437}
Jeff Johnson295189b2012-06-20 16:38:30 -07004438/*
4439 * FUNCTION: WDA_ProcessSetStaKeyReq
4440 * Request to WDI for programming the STA key( key for Unicast frames
4441 * Encryption)
4442 */
4443VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4444 tSetStaKeyParams *setStaKeyParams )
4445{
4446 WDI_Status status = WDI_STATUS_SUCCESS ;
4447 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4448 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4449 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4450 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004453 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 if(NULL == wdiSetStaKeyParam)
4455 {
4456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004458 VOS_ASSERT(0);
4459 return VOS_STATUS_E_NOMEM;
4460 }
4461 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4462 if(NULL == pWdaParams)
4463 {
4464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 VOS_ASSERT(0);
4467 vos_mem_free(wdiSetStaKeyParam);
4468 return VOS_STATUS_E_NOMEM;
4469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004470 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004472 /* copy set STA key params to WDI structure */
4473 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4474 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4475 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4476 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 if(setStaKeyParams->encType != eSIR_ED_NONE)
4478 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004479 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004480 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4481 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4482 {
4483 WDA_GetWepKeysFromCfg( pWDA,
4484 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4485 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4486 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4487 }
4488 else
4489 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004490 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4491 keyIndex++)
4492 {
4493 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4494 setStaKeyParams->key[keyIndex].keyId;
4495 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4496 setStaKeyParams->key[keyIndex].unicast;
4497 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4498 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004499 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4500 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4501 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4502 setStaKeyParams->key[keyIndex].paeRole;
4503 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4504 setStaKeyParams->key[keyIndex].keyLength;
4505 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4506 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4507 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4508 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4509 {
4510 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4511 }
4512 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004513 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4514 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 }
4516 }
4517 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4518 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 /* Store set key pointer, as this will be used for response */
4520 /* store Params pass it to WDI */
4521 pWdaParams->pWdaContext = pWDA;
4522 pWdaParams->wdaMsgParam = setStaKeyParams;
4523 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4525 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 if(IS_WDI_STATUS_FAILURE(status))
4527 {
4528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4529 "Failure in set STA Key Req WDI API, free all the memory " );
4530 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4531 vos_mem_free(pWdaParams) ;
4532 setStaKeyParams->status = eSIR_FAILURE ;
4533 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4534 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 return CONVERT_WDI2VOS_STATUS(status) ;
4536}
Jeff Johnson295189b2012-06-20 16:38:30 -07004537/*
4538 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4539 * send SET Bcast STA key RSP back to PE
4540 */
4541void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4542{
4543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4544 tWDA_CbContext *pWDA;
4545 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004547 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 if(NULL == pWdaParams)
4549 {
4550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004551 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004552 VOS_ASSERT(0) ;
4553 return ;
4554 }
4555 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4556 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4558 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004559 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004560 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 return ;
4562}
4563
Jeff Johnson295189b2012-06-20 16:38:30 -07004564/*
4565 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4566 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4567 * Encryption)
4568 */
4569VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4570 tSetStaKeyParams *setStaKeyParams )
4571{
4572 WDI_Status status = WDI_STATUS_SUCCESS ;
4573 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4574 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4575 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4576 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004577 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004579 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 if(NULL == wdiSetStaKeyParam)
4581 {
4582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 VOS_ASSERT(0);
4585 return VOS_STATUS_E_NOMEM;
4586 }
4587 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4588 if(NULL == pWdaParams)
4589 {
4590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 VOS_ASSERT(0);
4593 vos_mem_free(wdiSetStaKeyParam);
4594 return VOS_STATUS_E_NOMEM;
4595 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004597 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004598 /* copy set STA key params to WDI structure */
4599 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4600 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4601 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4602 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 if(setStaKeyParams->encType != eSIR_ED_NONE)
4604 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4606 keyIndex++)
4607 {
4608 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4609 setStaKeyParams->key[keyIndex].keyId;
4610 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4611 setStaKeyParams->key[keyIndex].unicast;
4612 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4613 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4615 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4616 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4617 setStaKeyParams->key[keyIndex].paeRole;
4618 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4619 setStaKeyParams->key[keyIndex].keyLength;
4620 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4621 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4622 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4624 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 }
4626 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004627 /* Store set key pointer, as this will be used for response */
4628 /* store Params pass it to WDI */
4629 pWdaParams->pWdaContext = pWDA;
4630 pWdaParams->wdaMsgParam = setStaKeyParams;
4631 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004632 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4633 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 if(IS_WDI_STATUS_FAILURE(status))
4635 {
4636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4637 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4639 vos_mem_free(pWdaParams) ;
4640 setStaKeyParams->status = eSIR_FAILURE ;
4641 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4642 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004643 return CONVERT_WDI2VOS_STATUS(status) ;
4644}
Jeff Johnson295189b2012-06-20 16:38:30 -07004645/*
4646 * FUNCTION: WDA_RemoveStaKeyReqCallback
4647 * send SET BSS key RSP back to PE
4648 */
4649void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4650{
4651 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4652 tWDA_CbContext *pWDA;
4653 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004655 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 if(NULL == pWdaParams)
4657 {
4658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004659 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004660 VOS_ASSERT(0) ;
4661 return ;
4662 }
4663 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4664 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4666 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004667 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004668 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 return ;
4670}
4671
Jeff Johnson295189b2012-06-20 16:38:30 -07004672/*
4673 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4674 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4675 */
4676VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4677 tRemoveStaKeyParams *removeStaKeyParams )
4678{
4679 WDI_Status status = WDI_STATUS_SUCCESS ;
4680 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4681 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4682 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4683 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004685 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 if(NULL == wdiRemoveStaKeyParam)
4687 {
4688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004689 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 VOS_ASSERT(0);
4691 return VOS_STATUS_E_NOMEM;
4692 }
4693 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4694 if(NULL == pWdaParams)
4695 {
4696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004697 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004698 VOS_ASSERT(0);
4699 vos_mem_free(wdiRemoveStaKeyParam);
4700 return VOS_STATUS_E_NOMEM;
4701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 /* copy remove STA key params to WDI structure*/
4703 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4704 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4705 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4706 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4707 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 /* Store remove key pointer, as this will be used for response */
4709 /* store Params pass it to WDI */
4710 pWdaParams->pWdaContext = pWDA;
4711 pWdaParams->wdaMsgParam = removeStaKeyParams;
4712 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4714 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 if(IS_WDI_STATUS_FAILURE(status))
4716 {
4717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4718 "Failure in remove STA Key Req WDI API, free all the memory " );
4719 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4720 vos_mem_free(pWdaParams) ;
4721 removeStaKeyParams->status = eSIR_FAILURE ;
4722 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4723 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004724 return CONVERT_WDI2VOS_STATUS(status) ;
4725}
Jeff Johnson295189b2012-06-20 16:38:30 -07004726/*
4727 * FUNCTION: WDA_IsHandleSetLinkStateReq
4728 * Update the WDA state and return the status to handle this message or not
4729 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004730WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4731 tWDA_CbContext *pWDA,
4732 tLinkStateParams *linkStateParams)
4733{
4734 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 switch(linkStateParams->state)
4736 {
4737 case eSIR_LINK_PREASSOC_STATE:
4738 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4739 /*
4740 * set the WDA state to PRE ASSOC
4741 * copy the BSSID into pWDA to use it in join request and return,
4742 * No need to handle these messages.
4743 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004744 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4745 {
4746 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004748 }
4749 else
4750 {
4751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004752 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004753 VOS_ASSERT(0);
4754 }
4755
4756 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4757 {
4758 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004759 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004760 }
4761 else
4762 {
4763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004764 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004765 VOS_ASSERT(0);
4766 }
4767
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4769 *channel and after ) so reset the WDA state to ready when the second
4770 * time UMAC issue the link state with PREASSOC
4771 */
4772 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4773 {
4774 /* RESET WDA state back to WDA_READY_STATE */
4775 pWDA->wdaState = WDA_READY_STATE;
4776 }
4777 else
4778 {
4779 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4780 }
4781 //populate linkState info in WDACbCtxt
4782 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 default:
4785 if(pWDA->wdaState != WDA_READY_STATE)
4786 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004787 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4788 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4789 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4790 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4791 *the ASSERT in WDA_Stop during module unload.*/
4792 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4793 {
4794 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004795 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004796 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004797 else
4798 {
4799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004800 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004801 status = WDA_IGNORE_SET_LINK_STATE;
4802 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004803 }
4804 break;
4805 }
4806
4807 return status;
4808}
Jeff Johnson295189b2012-06-20 16:38:30 -07004809/*
4810 * FUNCTION: WDA_SetLinkStateCallback
4811 * call back function for set link state from WDI
4812 */
4813void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4814{
4815 tWDA_CbContext *pWDA;
4816 tLinkStateParams *linkStateParams;
4817 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004819 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 if(NULL == pWdaParams)
4821 {
4822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004823 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004824 VOS_ASSERT(0) ;
4825 return ;
4826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004829 /*
4830 * In STA mode start the BA activity check timer after association
4831 * and in AP mode start BA activity check timer after BSS start */
4832 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4833 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004834 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4835 ((status == WDI_STATUS_SUCCESS) &&
4836 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 {
4838 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004840 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004841 /*
4842 * No respone required for WDA_SET_LINK_STATE so free the request
4843 * param here
4844 */
4845 if( pWdaParams != NULL )
4846 {
4847 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4848 {
4849 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4850 }
4851 vos_mem_free(pWdaParams);
4852 }
4853 return ;
4854}
Jeff Johnson295189b2012-06-20 16:38:30 -07004855/*
4856 * FUNCTION: WDA_ProcessSetLinkState
4857 * Request to WDI to set the link status.
4858 */
4859VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4860 tLinkStateParams *linkStateParams)
4861{
4862 WDI_Status status = WDI_STATUS_SUCCESS ;
4863 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4864 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4865 sizeof(WDI_SetLinkReqParamsType)) ;
4866 tWDA_ReqParams *pWdaParams ;
4867 tpAniSirGlobal pMac;
4868 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4869
4870 if(NULL == pMac)
4871 {
4872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004873 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004874 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004875 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 return VOS_STATUS_E_FAILURE;
4877 }
4878
4879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004880 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004881 if(NULL == wdiSetLinkStateParam)
4882 {
4883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004884 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 VOS_ASSERT(0);
4886 return VOS_STATUS_E_NOMEM;
4887 }
4888 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4889 if(NULL == pWdaParams)
4890 {
4891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 VOS_ASSERT(0);
4894 vos_mem_free(wdiSetLinkStateParam);
4895 return VOS_STATUS_E_NOMEM;
4896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 if(WDA_IGNORE_SET_LINK_STATE ==
4898 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4899 {
4900 status = WDI_STATUS_E_FAILURE;
4901 }
4902 else
4903 {
4904 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4905 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4907 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4909 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 pWdaParams->pWdaContext = pWDA;
4911 /* Store remove key pointer, as this will be used for response */
4912 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 /* store Params pass it to WDI */
4914 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4915 /* Stop Timer only other than GO role and concurrent session */
4916 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07004917 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4919 {
4920 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4923 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 if(IS_WDI_STATUS_FAILURE(status))
4925 {
4926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4927 "Failure in set link state Req WDI API, free all the memory " );
4928 }
4929 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004930 if(IS_WDI_STATUS_FAILURE(status))
4931 {
4932 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004933 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 vos_mem_free(pWdaParams);
4935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 return CONVERT_WDI2VOS_STATUS(status) ;
4937}
Jeff Johnson295189b2012-06-20 16:38:30 -07004938/*
4939 * FUNCTION: WDA_GetStatsReqParamsCallback
4940 * send the response to PE with Stats received from WDI
4941 */
4942void WDA_GetStatsReqParamsCallback(
4943 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4944 void* pUserData)
4945{
4946 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4947 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4948
4949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004950 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 pGetPEStatsRspParams =
4952 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4953 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4954
4955 if(NULL == pGetPEStatsRspParams)
4956 {
4957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 VOS_ASSERT(0);
4960 return;
4961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4963 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4964 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4965 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004966
4967 //Fill the Session Id Properly in PE
4968 pGetPEStatsRspParams->sessionId = 0;
4969 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004970 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4972 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 vos_mem_copy( pGetPEStatsRspParams + 1,
4974 wdiGetStatsRsp + 1,
4975 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 /* send response to UMAC*/
4977 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4978
4979 return;
4980}
4981
Jeff Johnson295189b2012-06-20 16:38:30 -07004982/*
4983 * FUNCTION: WDA_ProcessGetStatsReq
4984 * Request to WDI to get the statistics
4985 */
4986VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4987 tAniGetPEStatsReq *pGetStatsParams)
4988{
4989 WDI_Status status = WDI_STATUS_SUCCESS ;
4990 WDI_GetStatsReqParamsType wdiGetStatsParam;
4991 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004993 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4995 pGetStatsParams->staId;
4996 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4997 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004998 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 status = WDI_GetStatsReq(&wdiGetStatsParam,
5000 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 if(IS_WDI_STATUS_FAILURE(status))
5002 {
5003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5004 "Failure in Get Stats Req WDI API, free all the memory " );
5005 pGetPEStatsRspParams =
5006 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5007 if(NULL == pGetPEStatsRspParams)
5008 {
5009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005010 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005011 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005012 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 return VOS_STATUS_E_NOMEM;
5014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005015 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5016 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5017 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5018 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5019 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5020 (void *)pGetPEStatsRspParams, 0) ;
5021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 /* Free the request message */
5023 vos_mem_free(pGetStatsParams);
5024 return CONVERT_WDI2VOS_STATUS(status);
5025}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005026
5027#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5028/*
5029 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5030 * send the response to PE with roam Rssi received from WDI
5031 */
5032void WDA_GetRoamRssiReqParamsCallback(
5033 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5034 void* pUserData)
5035{
5036 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5037 tWDA_CbContext *pWDA = NULL;
5038 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5039 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5041 "<------ %s " ,__func__);
5042 if(NULL == pWdaParams)
5043 {
5044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5045 "%s: pWdaParams received NULL", __func__);
5046 VOS_ASSERT(0) ;
5047 return ;
5048 }
5049 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5050 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5051
5052 if(NULL == pGetRoamRssiReqParams)
5053 {
5054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5055 "%s: pGetRoamRssiReqParams received NULL", __func__);
5056 VOS_ASSERT(0);
5057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5058 vos_mem_free(pWdaParams);
5059 return ;
5060 }
5061 pGetRoamRssiRspParams =
5062 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5063
5064 if(NULL == pGetRoamRssiRspParams)
5065 {
5066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5067 "%s: VOS MEM Alloc Failure", __func__);
5068 VOS_ASSERT(0);
5069 return;
5070 }
5071 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5072 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005073 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005074 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5075 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5076
5077 /* Assign get roam rssi req (backup) in to the response */
5078 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5079
5080 /* free WDI command buffer */
5081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5082 vos_mem_free(pWdaParams) ;
5083
5084 /* send response to UMAC*/
5085 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5086
5087 return;
5088}
5089
5090
5091
5092/*
5093 * FUNCTION: WDA_ProcessGetRoamRssiReq
5094 * Request to WDI to get the statistics
5095 */
5096VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5097 tAniGetRssiReq *pGetRoamRssiParams)
5098{
5099 WDI_Status status = WDI_STATUS_SUCCESS ;
5100 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5101 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5102 tWDA_ReqParams *pWdaParams = NULL;
5103
5104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5105 "------> %s " ,__func__);
5106 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5107 pGetRoamRssiParams->staId;
5108 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5109
5110 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5111 if(NULL == pWdaParams)
5112 {
5113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5114 "%s: VOS MEM Alloc Failure", __func__);
5115 VOS_ASSERT(0);
5116 return VOS_STATUS_E_NOMEM;
5117 }
5118
5119 /* Store Init Req pointer, as this will be used for response */
5120 pWdaParams->pWdaContext = pWDA;
5121
5122 /* Take Get roam Rssi req backup as it stores the callback to be called after
5123 receiving the response */
5124 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5125 pWdaParams->wdaWdiApiMsgParam = NULL;
5126
5127 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5128 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5129 if(IS_WDI_STATUS_FAILURE(status))
5130 {
5131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5132 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5133 pGetRoamRssiRspParams =
5134 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5135 if(NULL == pGetRoamRssiRspParams)
5136 {
5137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5138 "%s: VOS MEM Alloc Failure", __func__);
5139 VOS_ASSERT(0);
5140 vos_mem_free(pGetRoamRssiParams);
5141 vos_mem_free(pWdaParams);
5142 return VOS_STATUS_E_NOMEM;
5143 }
5144 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5145 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5146 pGetRoamRssiRspParams->rssi = 0;
5147 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5148 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5149 (void *)pGetRoamRssiRspParams, 0) ;
5150 }
5151 return CONVERT_WDI2VOS_STATUS(status);
5152}
5153#endif
5154
5155
Jeff Johnson295189b2012-06-20 16:38:30 -07005156/*
5157 * FUNCTION: WDA_UpdateEDCAParamCallback
5158 * call back function for Update EDCA params from WDI
5159 */
5160void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5161{
5162 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5163 tEdcaParams *pEdcaParams;
5164
5165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005166 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 if(NULL == pWdaParams)
5168 {
5169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005170 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005171 VOS_ASSERT(0) ;
5172 return ;
5173 }
5174 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5176 vos_mem_free(pWdaParams);
5177 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 return ;
5179}
Jeff Johnson295189b2012-06-20 16:38:30 -07005180/*
5181 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5182 * Request to WDI to Update the EDCA params.
5183 */
5184VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5185 tEdcaParams *pEdcaParams)
5186{
5187 WDI_Status status = WDI_STATUS_SUCCESS ;
5188 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5189 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5190 sizeof(WDI_UpdateEDCAParamsType)) ;
5191 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005193 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005194 if(NULL == wdiEdcaParam)
5195 {
5196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005197 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005198 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005199 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 return VOS_STATUS_E_NOMEM;
5201 }
5202 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5203 if(NULL == pWdaParams)
5204 {
5205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005206 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 VOS_ASSERT(0);
5208 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005209 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005210 return VOS_STATUS_E_NOMEM;
5211 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005213 /*
5214 Since firmware is not using highperformance flag, we have removed
5215 this flag from wdiEDCAInfo structure to match sizeof the structure
5216 between host and firmware.In future if we are planning to use
5217 highperformance flag then Please define this flag in wdiEDCAInfo
5218 structure, update it here and send it to firmware. i.e.
5219 Following is the original line which we removed as part of the fix
5220 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5221 pEdcaParams->highPerformance;
5222 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5224 &pEdcaParams->acbe);
5225 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5226 &pEdcaParams->acbk);
5227 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5228 &pEdcaParams->acvi);
5229 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5230 &pEdcaParams->acvo);
5231 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005232 pWdaParams->pWdaContext = pWDA;
5233 /* Store remove key pointer, as this will be used for response */
5234 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 /* store Params pass it to WDI */
5236 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005237 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5238 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 if(IS_WDI_STATUS_FAILURE(status))
5240 {
5241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5242 "Failure in Update EDCA Params WDI API, free all the memory " );
5243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5244 vos_mem_free(pWdaParams);
5245 vos_mem_free(pEdcaParams);
5246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 return CONVERT_WDI2VOS_STATUS(status) ;
5248}
Jeff Johnson295189b2012-06-20 16:38:30 -07005249/*
5250 * FUNCTION: WDA_AddBAReqCallback
5251 * send ADD BA RSP back to PE
5252 */
5253void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5254 void* pUserData)
5255{
5256 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5257 tWDA_CbContext *pWDA;
5258 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005260 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005261 if(NULL == pWdaParams)
5262 {
5263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005264 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005265 VOS_ASSERT(0) ;
5266 return ;
5267 }
5268 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5269 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5271 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005272 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005273 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 return ;
5275}
5276
Jeff Johnson295189b2012-06-20 16:38:30 -07005277/*
5278 * FUNCTION: WDA_ProcessAddBAReq
5279 * Request to WDI to Update the ADDBA REQ params.
5280 */
5281VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5282 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5283{
Jeff Johnson43971f52012-07-17 12:26:56 -07005284 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005285 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5286 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5287 sizeof(WDI_AddBAReqParamsType)) ;
5288 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005290 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005291 if(NULL == wdiAddBAReqParam)
5292 {
5293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 VOS_ASSERT(0);
5296 return VOS_STATUS_E_NOMEM;
5297 }
5298 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5299 if(NULL == pWdaParams)
5300 {
5301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005303 VOS_ASSERT(0);
5304 vos_mem_free(wdiAddBAReqParam);
5305 return VOS_STATUS_E_NOMEM;
5306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 do
5308 {
5309 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 wdiAddBaInfo->ucSTAIdx = staIdx ;
5311 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5312 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 } while(0) ;
5314 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005315 pWdaParams->pWdaContext = pWDA;
5316 /* store Params pass it to WDI */
5317 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5318 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005319 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5320 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005321
Jeff Johnson43971f52012-07-17 12:26:56 -07005322 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005323 {
5324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005325 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5326 status = CONVERT_WDI2VOS_STATUS(wstatus);
5327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 vos_mem_free(pWdaParams);
5329 pAddBAReqParams->status = eSIR_FAILURE;
5330 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5331 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005332 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005333}
Jeff Johnson295189b2012-06-20 16:38:30 -07005334/*
5335 * FUNCTION: WDA_AddBASessionReqCallback
5336 * send ADD BA SESSION RSP back to PE/(or TL)
5337 */
5338void WDA_AddBASessionReqCallback(
5339 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5340{
5341 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5343 tWDA_CbContext *pWDA;
5344 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005346 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 if(NULL == pWdaParams)
5348 {
5349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005350 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005351 VOS_ASSERT(0) ;
5352 return ;
5353 }
5354 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5355 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 if( NULL == pAddBAReqParams )
5357 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005359 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5362 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 return ;
5364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5366 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005367 /*
5368 * if WDA in update TL state, update TL with BA session parama and send
5369 * another request to HAL(/WDI) (ADD_BA_REQ)
5370 */
5371
5372 if((VOS_STATUS_SUCCESS ==
5373 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5374 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5375 {
5376 /* Update TL with BA info received from HAL/WDI */
5377 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5378 wdiAddBaSession->usBaSessionID,
5379 wdiAddBaSession->ucSTAIdx,
5380 wdiAddBaSession->ucBaTID,
5381 wdiAddBaSession->ucBaBufferSize,
5382 wdiAddBaSession->ucWinSize,
5383 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005384 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5385 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5386 }
5387 else
5388 {
5389 pAddBAReqParams->status =
5390 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5391
5392 /* Setting Flag to indicate that Set BA is success */
5393 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5394 {
5395 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5396 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5397 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 /*Reset the WDA state to READY */
5402 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 return ;
5404}
5405
Jeff Johnson295189b2012-06-20 16:38:30 -07005406/*
5407 * FUNCTION: WDA_ProcessAddBASessionReq
5408 * Request to WDI to Update the ADDBA REQ params.
5409 */
5410VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5411 tAddBAParams *pAddBAReqParams)
5412{
5413 WDI_Status status = WDI_STATUS_SUCCESS ;
5414 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5415 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5416 sizeof(WDI_AddBASessionReqParamsType)) ;
5417 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005418 WLANTL_STAStateType tlSTAState = 0;
5419
Jeff Johnson295189b2012-06-20 16:38:30 -07005420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005421 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005422 if(NULL == wdiAddBASessionReqParam)
5423 {
5424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005425 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005426 VOS_ASSERT(0);
5427 return VOS_STATUS_E_NOMEM;
5428 }
5429 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5430 if(NULL == pWdaParams)
5431 {
5432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005433 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005434 VOS_ASSERT(0);
5435 vos_mem_free(wdiAddBASessionReqParam);
5436 return VOS_STATUS_E_NOMEM;
5437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005438 /*
5439 * Populate ADD BA parameters and pass these paarmeters to WDI.
5440 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5441 * the state to track if these is BA recipient case or BA initiator
5442 * case.
5443 */
5444 do
5445 {
5446 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5447 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5448 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5449 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5450 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5451 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5452 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5455 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5456 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5457 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5458 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 /* check the BA direction and update state accordingly */
5460 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5461 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5462 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5463
5464 }while(0) ;
5465 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005466 pWdaParams->pWdaContext = pWDA;
5467 /* Store ADD BA pointer, as this will be used for response */
5468 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5469 /* store Params pass it to WDI */
5470 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005471
5472 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5473 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5474 */
5475 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5476 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5477 {
5478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5479 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5480 status = WDI_STATUS_E_NOT_ALLOWED;
5481 pAddBAReqParams->status =
5482 CONVERT_WDI2SIR_STATUS(status) ;
5483 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5484 /*Reset the WDA state to READY */
5485 pWDA->wdaState = WDA_READY_STATE;
5486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5487 vos_mem_free(pWdaParams);
5488
5489 return CONVERT_WDI2VOS_STATUS(status) ;
5490 }
5491
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5493 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005494 if(IS_WDI_STATUS_FAILURE(status))
5495 {
5496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005497 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5499 "Send ADD BA failure response to PE\n");
5500 pAddBAReqParams->status =
5501 CONVERT_WDI2SIR_STATUS(status) ;
5502 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005503 /*Reset the WDA state to READY */
5504 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005506 vos_mem_free(pWdaParams);
5507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005508 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509}
Jeff Johnson295189b2012-06-20 16:38:30 -07005510/*
5511 * FUNCTION: WDA_DelBANotifyTL
5512 * send DEL BA IND to TL
5513 */
5514void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5515 tDelBAParams *pDelBAReqParams)
5516{
5517 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5518 //tSirMsgQ msg;
5519 vos_msg_t vosMsg;
5520 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 if(NULL == pDelBAInd)
5522 {
5523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 VOS_ASSERT(0) ;
5526 return;
5527 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5529 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5530 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5531 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005532
Jeff Johnson295189b2012-06-20 16:38:30 -07005533
5534 vosMsg.type = WDA_DELETEBA_IND;
5535 vosMsg.bodyptr = pDelBAInd;
5536 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5537 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5538 {
5539 vosStatus = VOS_STATUS_E_BADMSG;
5540 }
5541}
Jeff Johnson295189b2012-06-20 16:38:30 -07005542/*
5543 * FUNCTION: WDA_DelBAReqCallback
5544 * send DEL BA RSP back to PE
5545 */
5546void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5547{
5548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5549 tWDA_CbContext *pWDA;
5550 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 if(NULL == pWdaParams)
5554 {
5555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 VOS_ASSERT(0) ;
5558 return ;
5559 }
5560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5561 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 /* Notify TL about DEL BA in case of recipinet */
5563 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5564 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5565 {
5566 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 /*
5569 * No respone required for WDA_DELBA_IND so just free the request
5570 * param here
5571 */
5572 vos_mem_free(pDelBAReqParams);
5573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5574 vos_mem_free(pWdaParams);
5575 return ;
5576}
5577
Jeff Johnson295189b2012-06-20 16:38:30 -07005578/*
5579 * FUNCTION: WDA_ProcessDelBAReq
5580 * Request to WDI to Update the DELBA REQ params.
5581 */
5582VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5583 tDelBAParams *pDelBAReqParams)
5584{
5585 WDI_Status status = WDI_STATUS_SUCCESS ;
5586 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5587 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5588 sizeof(WDI_DelBAReqParamsType)) ;
5589 tWDA_ReqParams *pWdaParams ;
5590 tANI_U16 staIdx = 0;
5591 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005593 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 if(NULL == wdiDelBAReqParam)
5595 {
5596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 VOS_ASSERT(0);
5599 return VOS_STATUS_E_NOMEM;
5600 }
5601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5602 if(NULL == pWdaParams)
5603 {
5604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005605 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 VOS_ASSERT(0);
5607 vos_mem_free(wdiDelBAReqParam);
5608 return VOS_STATUS_E_NOMEM;
5609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5611 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5612 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5613 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 pWdaParams->pWdaContext = pWDA;
5615 /* Store DEL BA pointer, as this will be used for response */
5616 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005617 /* store Params pass it to WDI */
5618 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005619 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5620 * maintained in WDA, so that WDA can retry for another BA session
5621 */
5622 staIdx = pDelBAReqParams->staIdx;
5623 tid = pDelBAReqParams->baTID;
5624 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005625 status = WDI_DelBAReq(wdiDelBAReqParam,
5626 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 if(IS_WDI_STATUS_FAILURE(status))
5628 {
5629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5630 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5632 vos_mem_free(pWdaParams->wdaMsgParam);
5633 vos_mem_free(pWdaParams);
5634 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005636}
Jeff Johnson295189b2012-06-20 16:38:30 -07005637/*
5638 * FUNCTION: WDA_AddTSReqCallback
5639 * send ADD TS RSP back to PE
5640 */
5641void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5642{
5643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5644 tWDA_CbContext *pWDA;
5645 tAddTsParams *pAddTsReqParams;
5646
5647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005648 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005649 if(NULL == pWdaParams)
5650 {
5651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005652 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 VOS_ASSERT(0) ;
5654 return ;
5655 }
5656 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5657 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5659 vos_mem_free(pWdaParams);
5660
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005661 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 return ;
5664}
5665
Jeff Johnson295189b2012-06-20 16:38:30 -07005666/*
5667 * FUNCTION: WDA_ProcessAddTSReq
5668 * Request to WDI to Update the ADD TS REQ params.
5669 */
5670VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5671 tAddTsParams *pAddTsReqParams)
5672{
5673 WDI_Status status = WDI_STATUS_SUCCESS ;
5674 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5675 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5676 sizeof(WDI_AddTSReqParamsType)) ;
5677 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005679 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 if(NULL == wdiAddTSReqParam)
5681 {
5682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 VOS_ASSERT(0);
5685 return VOS_STATUS_E_NOMEM;
5686 }
5687 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5688 if(NULL == pWdaParams)
5689 {
5690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005691 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 VOS_ASSERT(0);
5693 vos_mem_free(wdiAddTSReqParam);
5694 return VOS_STATUS_E_NOMEM;
5695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005696 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5697 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005698 //TS IE
5699 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5700 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5701 pAddTsReqParams->tspec.length;
5702
5703 //TS IE : TS INFO : TRAFFIC
5704 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5705 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5706 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5707 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5708 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5709 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5710 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5711 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5712 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5713 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5714 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5715 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5716 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5717 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5718 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5719 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5720
5721 //TS IE : TS INFO : SCHEDULE
5722 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5723 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5724 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5725 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 //TS IE
5727 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5728 pAddTsReqParams->tspec.nomMsduSz;
5729 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5730 pAddTsReqParams->tspec.maxMsduSz;
5731 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5732 pAddTsReqParams->tspec.minSvcInterval;
5733 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5734 pAddTsReqParams->tspec.maxSvcInterval;
5735 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5736 pAddTsReqParams->tspec.inactInterval;
5737 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5738 pAddTsReqParams->tspec.suspendInterval;
5739 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5740 pAddTsReqParams->tspec.svcStartTime;
5741 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5742 pAddTsReqParams->tspec.minDataRate;
5743 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5744 pAddTsReqParams->tspec.meanDataRate;
5745 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5746 pAddTsReqParams->tspec.peakDataRate;
5747 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5748 pAddTsReqParams->tspec.maxBurstSz;
5749 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5750 pAddTsReqParams->tspec.delayBound;
5751 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5752 pAddTsReqParams->tspec.minPhyRate;
5753 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5754 pAddTsReqParams->tspec.surplusBw;
5755 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5756 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005757 /* TODO: tAddTsParams doesn't have the following fields */
5758#if 0
5759 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5760 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5761 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5762 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5763#endif
5764 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5765
5766 pWdaParams->pWdaContext = pWDA;
5767 /* Store ADD TS pointer, as this will be used for response */
5768 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005769 /* store Params pass it to WDI */
5770 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005771 status = WDI_AddTSReq(wdiAddTSReqParam,
5772 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 if(IS_WDI_STATUS_FAILURE(status))
5774 {
5775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5776 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5778 vos_mem_free(pWdaParams);
5779 pAddTsReqParams->status = eSIR_FAILURE ;
5780 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005782 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005783}
5784
Jeff Johnson295189b2012-06-20 16:38:30 -07005785/*
5786 * FUNCTION: WDA_DelTSReqCallback
5787 * send DEL TS RSP back to PE
5788 */
5789void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5790{
5791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005793 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5795 vos_mem_free(pWdaParams->wdaMsgParam) ;
5796 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 /*
5798 * No respone required for WDA_DEL_TS_REQ so just free the request
5799 * param here
5800 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 return ;
5802}
5803
Jeff Johnson295189b2012-06-20 16:38:30 -07005804/*
5805 * FUNCTION: WDA_ProcessDelTSReq
5806 * Request to WDI to Update the DELTS REQ params.
5807 */
5808VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5809 tDelTsParams *pDelTSReqParams)
5810{
5811 WDI_Status status = WDI_STATUS_SUCCESS ;
5812 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5813 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5814 sizeof(WDI_DelTSReqParamsType)) ;
5815 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005817 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 if(NULL == wdiDelTSReqParam)
5819 {
5820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005821 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005822 VOS_ASSERT(0);
5823 return VOS_STATUS_E_NOMEM;
5824 }
5825 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5826 if(NULL == pWdaParams)
5827 {
5828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005830 VOS_ASSERT(0);
5831 vos_mem_free(wdiDelTSReqParam);
5832 return VOS_STATUS_E_NOMEM;
5833 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005834 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5835 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5836 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5837 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5838 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005839 pWdaParams->pWdaContext = pWDA;
5840 /* Store DEL TS pointer, as this will be used for response */
5841 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 /* store Params pass it to WDI */
5843 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 status = WDI_DelTSReq(wdiDelTSReqParam,
5845 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005846 if(IS_WDI_STATUS_FAILURE(status))
5847 {
5848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5849 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5850 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5851 vos_mem_free(pWdaParams->wdaMsgParam);
5852 vos_mem_free(pWdaParams);
5853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005855}
Jeff Johnson295189b2012-06-20 16:38:30 -07005856/*
5857 * FUNCTION: WDA_UpdateBeaconParamsCallback
5858 * Free the memory. No need to send any response to PE in this case
5859 */
5860void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5861{
5862 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005864 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005865 if(NULL == pWdaParams)
5866 {
5867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005868 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 VOS_ASSERT(0) ;
5870 return ;
5871 }
5872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5873 vos_mem_free(pWdaParams->wdaMsgParam) ;
5874 vos_mem_free(pWdaParams);
5875 /*
5876 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5877 * param here
5878 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005879 return ;
5880}
Jeff Johnson295189b2012-06-20 16:38:30 -07005881/*
5882 * FUNCTION: WDA_ProcessUpdateBeaconParams
5883 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5884 */
5885VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5886 tUpdateBeaconParams *pUpdateBeaconParams)
5887{
5888 WDI_Status status = WDI_STATUS_SUCCESS ;
5889 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5890 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5891 sizeof(WDI_UpdateBeaconParamsType)) ;
5892 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005894 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005895 if(NULL == wdiUpdateBeaconParams)
5896 {
5897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005898 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 VOS_ASSERT(0);
5900 return VOS_STATUS_E_NOMEM;
5901 }
5902 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5903 if(NULL == pWdaParams)
5904 {
5905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005906 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 VOS_ASSERT(0);
5908 vos_mem_free(wdiUpdateBeaconParams);
5909 return VOS_STATUS_E_NOMEM;
5910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5912 pUpdateBeaconParams->bssIdx;
5913 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5914 pUpdateBeaconParams->fShortPreamble;
5915 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5916 pUpdateBeaconParams->fShortSlotTime;
5917 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5918 pUpdateBeaconParams->beaconInterval;
5919 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5920 pUpdateBeaconParams->llaCoexist;
5921 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5922 pUpdateBeaconParams->llbCoexist;
5923 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5924 pUpdateBeaconParams->llgCoexist;
5925 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5926 pUpdateBeaconParams->ht20MhzCoexist;
5927 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5928 pUpdateBeaconParams->llnNonGFCoexist;
5929 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5930 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5931 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5932 pUpdateBeaconParams->fRIFSMode;
5933 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5934 pUpdateBeaconParams->paramChangeBitmap;
5935 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5936
5937 pWdaParams->pWdaContext = pWDA;
5938 /* Store UpdateBeacon Req pointer, as this will be used for response */
5939 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 /* store Params pass it to WDI */
5941 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5943 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5944 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 if(IS_WDI_STATUS_FAILURE(status))
5946 {
5947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5948 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5949 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5950 vos_mem_free(pWdaParams->wdaMsgParam);
5951 vos_mem_free(pWdaParams);
5952 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005953 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005954}
Jeff Johnson295189b2012-06-20 16:38:30 -07005955#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005956/*
5957 * FUNCTION: WDA_TSMStatsReqCallback
5958 * send TSM Stats RSP back to PE
5959 */
5960void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5961{
5962 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5963 tWDA_CbContext *pWDA = NULL;
5964 tTSMStats *pTsmRspParams = NULL;
5965
5966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005967 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 if(NULL == pWdaParams)
5969 {
5970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005971 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005972 VOS_ASSERT(0) ;
5973 return ;
5974 }
5975 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5976 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005977 if( NULL == pTsmRspParams )
5978 {
5979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005980 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005981 VOS_ASSERT( 0 );
5982 return ;
5983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5985 vos_mem_free(pWdaParams);
5986
5987 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5988 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5989 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5990 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5991 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5992 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5993 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5994 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5995 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5996 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005997 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 return ;
5999}
6000
6001
Jeff Johnson295189b2012-06-20 16:38:30 -07006002/*
6003 * FUNCTION: WDA_ProcessTsmStatsReq
6004 * Request to WDI to get the TSM Stats params.
6005 */
6006VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
6007 tTSMStats *pTsmStats)
6008{
6009 WDI_Status status = WDI_STATUS_SUCCESS ;
6010 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
6011 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006013 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6015 sizeof(WDI_TSMStatsReqParamsType));
6016 if(NULL == wdiTSMReqParam)
6017 {
6018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 VOS_ASSERT(0);
6021 return VOS_STATUS_E_NOMEM;
6022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6024 if(NULL == pWdaParams)
6025 {
6026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006027 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 VOS_ASSERT(0);
6029 vos_mem_free(wdiTSMReqParam);
6030 return VOS_STATUS_E_NOMEM;
6031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6033 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6034 pTsmStats->bssId,
6035 sizeof(wpt_macAddr));
6036 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6037
6038 pWdaParams->pWdaContext = pWDA;
6039 /* Store TSM Stats pointer, as this will be used for response */
6040 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006041 /* store Params pass it to WDI */
6042 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 status = WDI_TSMStatsReq(wdiTSMReqParam,
6044 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006045 if(IS_WDI_STATUS_FAILURE(status))
6046 {
6047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6048 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
6049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6050 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08006051 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 return CONVERT_WDI2VOS_STATUS(status) ;
6054}
6055#endif
6056/*
6057 * FUNCTION: WDA_SendBeaconParamsCallback
6058 * No need to send any response to PE in this case
6059 */
6060void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6061{
6062
Jeff Johnson295189b2012-06-20 16:38:30 -07006063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006064 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006065 return ;
6066}
Jeff Johnson295189b2012-06-20 16:38:30 -07006067/*
6068 * FUNCTION: WDA_ProcessSendBeacon
6069 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6070 * start beacon trasmission
6071 */
6072VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6073 tSendbeaconParams *pSendbeaconParams)
6074{
6075 WDI_Status status = WDI_STATUS_SUCCESS ;
6076 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006078 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006079 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6080 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6081 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6082 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006083 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6084 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306085 /* p2pIeOffset should be atleast greater than timIeOffset */
6086 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6087 (pSendbeaconParams->p2pIeOffset <
6088 pSendbeaconParams->timIeOffset))
6089 {
6090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6091 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6092 VOS_ASSERT( 0 );
6093 return WDI_STATUS_E_FAILURE;
6094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006095 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6096 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 /* Copy the beacon template to local buffer */
6098 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6099 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6100 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6101
Jeff Johnson295189b2012-06-20 16:38:30 -07006102 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6103 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006104 if(IS_WDI_STATUS_FAILURE(status))
6105 {
6106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6107 "Failure in SEND BEACON REQ Params WDI API" );
6108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006109 vos_mem_free(pSendbeaconParams);
6110 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006111}
Jeff Johnson295189b2012-06-20 16:38:30 -07006112/*
6113 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6114 * No need to send any response to PE in this case
6115 */
6116void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6117{
Jeff Johnson295189b2012-06-20 16:38:30 -07006118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006119 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 return ;
6121}
6122
Jeff Johnson295189b2012-06-20 16:38:30 -07006123/*
6124 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6125 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6126 * send probe response
6127 */
6128VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6129 tSendProbeRespParams *pSendProbeRspParams)
6130{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006131 WDI_Status status = WDI_STATUS_SUCCESS;
6132 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6133 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006135 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006136
6137 if (!wdiSendProbeRspParam)
6138 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6139
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006141 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006142 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006143 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 /* Copy the Probe Response template to local buffer */
6146 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006147 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006148 pSendProbeRspParams->pProbeRespTemplate,
6149 pSendProbeRspParams->probeRespTemplateLen);
6150 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006151 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006152 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6153 WDI_PROBE_REQ_BITMAP_IE_LEN);
6154
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006155 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006156
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006157 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006158 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 if(IS_WDI_STATUS_FAILURE(status))
6160 {
6161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6162 "Failure in SEND Probe RSP Params WDI API" );
6163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006165 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006166 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006167}
Jeff Johnson295189b2012-06-20 16:38:30 -07006168#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6169/*
6170 * FUNCTION: WDA_SetMaxTxPowerCallBack
6171 * send the response to PE with power value received from WDI
6172 */
6173void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6174 void* pUserData)
6175{
6176 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6177 tWDA_CbContext *pWDA = NULL;
6178 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6179
6180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006181 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 if(NULL == pWdaParams)
6183 {
6184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006185 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006186 VOS_ASSERT(0) ;
6187 return ;
6188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6190 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 if( NULL == pMaxTxPowerParams )
6192 {
6193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006194 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006195 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6197 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 return ;
6199 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006200
Jeff Johnson295189b2012-06-20 16:38:30 -07006201
6202 /*need to free memory for the pointers used in the
6203 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6205 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006206 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006207
Jeff Johnson295189b2012-06-20 16:38:30 -07006208
6209 /* send response to UMAC*/
6210 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6211
6212 return;
6213}
Jeff Johnson295189b2012-06-20 16:38:30 -07006214/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006215 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006216 * Request to WDI to send set Max Tx Power Request
6217 */
6218 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6219 tMaxTxPowerParams *MaxTxPowerParams)
6220{
6221 WDI_Status status = WDI_STATUS_SUCCESS;
6222 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6223 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006224
Jeff Johnson295189b2012-06-20 16:38:30 -07006225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006226 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006227
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6229 sizeof(WDI_SetMaxTxPowerParamsType));
6230 if(NULL == wdiSetMaxTxPowerParams)
6231 {
6232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006233 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006234 VOS_ASSERT(0);
6235 return VOS_STATUS_E_NOMEM;
6236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6238 if(NULL == pWdaParams)
6239 {
6240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006242 vos_mem_free(wdiSetMaxTxPowerParams);
6243 VOS_ASSERT(0);
6244 return VOS_STATUS_E_NOMEM;
6245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006246 /* Copy.Max.Tx.Power Params to WDI structure */
6247 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6248 MaxTxPowerParams->bssId,
6249 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6251 MaxTxPowerParams->selfStaMacAddr,
6252 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6254 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006256 pWdaParams->pWdaContext = pWDA;
6257 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 /* store Params pass it to WDI */
6259 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006260 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6261 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 if(IS_WDI_STATUS_FAILURE(status))
6263 {
6264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6265 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6267 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006268 /* send response to UMAC*/
6269 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 }
6271 return CONVERT_WDI2VOS_STATUS(status);
6272
6273}
Jeff Johnson295189b2012-06-20 16:38:30 -07006274#endif
schang86c22c42013-03-13 18:41:24 -07006275
6276/*
6277 * FUNCTION: WDA_SetTxPowerCallBack
6278 * send the response to PE with power value received from WDI
6279 */
6280void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6281 void* pUserData)
6282{
6283 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6284 tWDA_CbContext *pWDA = NULL;
6285 tSirSetTxPowerReq *pTxPowerParams = NULL;
6286
6287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6288 "<------ %s ", __func__);
6289 if(NULL == pWdaParams)
6290 {
6291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6292 "%s: pWdaParams received NULL", __func__);
6293 VOS_ASSERT(0) ;
6294 return ;
6295 }
6296 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6297 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6298 if(NULL == pTxPowerParams)
6299 {
6300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6301 "%s: pTxPowerParams received NULL " ,__func__);
6302 VOS_ASSERT(0);
6303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6304 vos_mem_free(pWdaParams);
6305 return ;
6306 }
6307
6308 /*need to free memory for the pointers used in the
6309 WDA Process.Set Max Tx Power Req function*/
6310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6311 vos_mem_free(pWdaParams);
6312
6313 /* send response to UMAC*/
6314 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6315 return;
6316}
6317
6318/*
6319 * FUNCTION: WDA_ProcessSetTxPowerReq
6320 * Request to WDI to send set Tx Power Request
6321 */
6322 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6323 tSirSetTxPowerReq *txPowerParams)
6324{
6325 WDI_Status status = WDI_STATUS_SUCCESS;
6326 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6327 tWDA_ReqParams *pWdaParams = NULL;
6328
6329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6330 "------> %s ", __func__);
6331
6332 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6333 sizeof(WDI_SetTxPowerParamsType));
6334 if(NULL == wdiSetTxPowerParams)
6335 {
6336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6337 "%s: VOS MEM Alloc Failure", __func__);
6338 VOS_ASSERT(0);
6339 return VOS_STATUS_E_NOMEM;
6340 }
6341 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6342 if(NULL == pWdaParams)
6343 {
6344 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6345 "%s: VOS MEM Alloc Failure", __func__);
6346 vos_mem_free(wdiSetTxPowerParams);
6347 VOS_ASSERT(0);
6348 return VOS_STATUS_E_NOMEM;
6349 }
6350 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6351 txPowerParams->bssIdx;
6352 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6353 txPowerParams->mwPower;
6354 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6355 pWdaParams->pWdaContext = pWDA;
6356 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6357 /* store Params pass it to WDI */
6358 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6359 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6360 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6361 if(IS_WDI_STATUS_FAILURE(status))
6362 {
6363 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6364 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6366 vos_mem_free(pWdaParams);
6367 /* send response to UMAC*/
6368 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6369 }
6370 return CONVERT_WDI2VOS_STATUS(status);
6371}
6372
Jeff Johnson295189b2012-06-20 16:38:30 -07006373/*
6374 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6375 * Free the memory. No need to send any response to PE in this case
6376 */
6377void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6378{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6380
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006382 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006383
6384 if(NULL == pWdaParams)
6385 {
6386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006387 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006388 VOS_ASSERT(0) ;
6389 return ;
6390 }
6391
6392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6393 vos_mem_free(pWdaParams->wdaMsgParam) ;
6394 vos_mem_free(pWdaParams);
6395
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 /*
6397 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6398 * so just free the request param here
6399 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 return ;
6401}
6402
Jeff Johnson295189b2012-06-20 16:38:30 -07006403/*
6404 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6405 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6406 */
6407VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6408 tP2pPsParams *pP2pPsConfigParams)
6409{
6410 WDI_Status status = WDI_STATUS_SUCCESS ;
6411 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6412 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6413 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006414 tWDA_ReqParams *pWdaParams = NULL;
6415
Jeff Johnson295189b2012-06-20 16:38:30 -07006416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006417 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 if(NULL == wdiSetP2PGONOAReqParam)
6419 {
6420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 VOS_ASSERT(0);
6423 return VOS_STATUS_E_NOMEM;
6424 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006425
6426 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6427 if(NULL == pWdaParams)
6428 {
6429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006430 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006431 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006432 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006433 VOS_ASSERT(0);
6434 return VOS_STATUS_E_NOMEM;
6435 }
6436
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6438 pP2pPsConfigParams->opp_ps;
6439 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6440 pP2pPsConfigParams->ctWindow;
6441 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6442 pP2pPsConfigParams->count;
6443 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6444 pP2pPsConfigParams->duration;
6445 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6446 pP2pPsConfigParams->interval;
6447 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6448 pP2pPsConfigParams->single_noa_duration;
6449 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6450 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006451
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6453 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006454 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6455
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006457 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6458 pWdaParams->pWdaContext = pWDA;
6459
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006461 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6462
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 if(IS_WDI_STATUS_FAILURE(status))
6464 {
6465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6466 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6468 vos_mem_free(pWdaParams->wdaMsgParam);
6469 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006470 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 return CONVERT_WDI2VOS_STATUS(status);
6472
Jeff Johnson295189b2012-06-20 16:38:30 -07006473}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306474
6475#ifdef FEATURE_WLAN_TDLS
6476/*
6477 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6478 * Free the memory. No need to send any response to PE in this case
6479 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306480void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6481 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306482{
6483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6484 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306485 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306486
6487
6488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6489 "<------ %s " ,__func__);
6490 if(NULL == pWdaParams)
6491 {
6492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6493 "%s: pWdaParams received NULL", __func__);
6494 VOS_ASSERT(0) ;
6495 return ;
6496 }
6497 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6498
6499 if(NULL == pWdaParams)
6500 {
6501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6502 "%s: pWdaParams received NULL", __func__);
6503 VOS_ASSERT(0) ;
6504 return ;
6505 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306506 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6507 if( NULL == pTdlsLinkEstablishParams )
6508 {
6509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6510 "%s: pTdlsLinkEstablishParams "
6511 "received NULL " ,__func__);
6512 VOS_ASSERT(0);
6513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6514 vos_mem_free(pWdaParams);
6515 return ;
6516 }
6517 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6518 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306520 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306521 /* send response to UMAC*/
6522 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6523
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306524 return ;
6525}
6526
6527VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6528 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6529{
6530 WDI_Status status = WDI_STATUS_SUCCESS ;
6531 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6532 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6533 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6534 tWDA_ReqParams *pWdaParams = NULL;
6535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6536 "------> %s " ,__func__);
6537 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6538 {
6539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6540 "%s: VOS MEM Alloc Failure", __func__);
6541 VOS_ASSERT(0);
6542 return VOS_STATUS_E_NOMEM;
6543 }
6544 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6545 if(NULL == pWdaParams)
6546 {
6547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6548 "%s: VOS MEM Alloc Failure", __func__);
6549 vos_mem_free(pTdlsLinkEstablishParams);
6550 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6551 VOS_ASSERT(0);
6552 return VOS_STATUS_E_NOMEM;
6553 }
6554 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306555 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306556 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306557 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306558 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306559 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306560 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306561 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306562 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306563 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306564
6565 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6566 /* Store msg pointer from PE, as this will be used for response */
6567 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6568 /* store Params pass it to WDI */
6569 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6570 pWdaParams->pWdaContext = pWDA;
6571
6572 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6573 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6574 WDA_SetTDLSLinkEstablishReqParamsCallback,
6575 pWdaParams);
6576 if(IS_WDI_STATUS_FAILURE(status))
6577 {
6578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6579 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6580 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6581 vos_mem_free(pWdaParams->wdaMsgParam);
6582 vos_mem_free(pWdaParams);
6583 }
6584 return CONVERT_WDI2VOS_STATUS(status);
6585}
6586#endif
6587
6588
Jeff Johnson295189b2012-06-20 16:38:30 -07006589#ifdef WLAN_FEATURE_VOWIFI_11R
6590/*
6591 * FUNCTION: WDA_AggrAddTSReqCallback
6592 * send ADD AGGREGATED TS RSP back to PE
6593 */
6594void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6595{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006596 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6597 tWDA_CbContext *pWDA;
6598 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006599 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006601 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006602 if(NULL == pWdaParams)
6603 {
6604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006605 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006606 VOS_ASSERT(0) ;
6607 return ;
6608 }
6609
6610 pWDA = pWdaParams->pWdaContext;
6611 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006612
6613 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6614 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006615 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006617 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006618
6619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6620 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 return ;
6622}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006623/*
6624 * FUNCTION: WDA_ProcessAddTSReq
6625 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6626 */
6627VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6628 tAggrAddTsParams *pAggrAddTsReqParams)
6629{
6630 WDI_Status status = WDI_STATUS_SUCCESS ;
6631 int i;
6632 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006633 tWDA_ReqParams *pWdaParams = NULL;
6634
6635
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006637 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006638 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6639 sizeof(WDI_AggrAddTSReqParamsType)) ;
6640 if(NULL == wdiAggrAddTSReqParam)
6641 {
6642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006643 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006644 VOS_ASSERT(0);
6645 return VOS_STATUS_E_NOMEM;
6646 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006647
6648
6649 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6650 if(NULL == pWdaParams)
6651 {
6652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006653 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006654 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006655 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006656 VOS_ASSERT(0);
6657 return VOS_STATUS_E_NOMEM;
6658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6660 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6661 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6663 {
6664 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6665 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6666 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006667 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6668 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6669 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6670 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6671 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6672 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6673 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6674 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6675 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6676 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6677 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6678 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6679 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6680 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6681 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6682 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006683 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6684 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006685 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6686 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6687 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6688 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6689 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6690 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6691 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6692 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6693 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6694 pAggrAddTsReqParams->tspec[i].inactInterval;
6695 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6696 pAggrAddTsReqParams->tspec[i].suspendInterval;
6697 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6698 pAggrAddTsReqParams->tspec[i].svcStartTime;
6699 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6700 pAggrAddTsReqParams->tspec[i].minDataRate;
6701 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6702 pAggrAddTsReqParams->tspec[i].meanDataRate;
6703 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6704 pAggrAddTsReqParams->tspec[i].peakDataRate;
6705 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6706 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6707 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6708 pAggrAddTsReqParams->tspec[i].delayBound;
6709 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6710 pAggrAddTsReqParams->tspec[i].minPhyRate;
6711 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6712 pAggrAddTsReqParams->tspec[i].surplusBw;
6713 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6714 pAggrAddTsReqParams->tspec[i].mediumTime;
6715 }
6716
6717 /* TODO: tAggrAddTsParams doesn't have the following fields */
6718#if 0
6719 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6720 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6721 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6722 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6723#endif
6724 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6725
6726 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006727 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006728 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006729 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6730
6731 pWdaParams->pWdaContext = pWDA;
6732
Jeff Johnson295189b2012-06-20 16:38:30 -07006733 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006734 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6735
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 if(IS_WDI_STATUS_FAILURE(status))
6737 {
6738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6739 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6741 vos_mem_free(pWdaParams);
6742
6743 /* send the failure response back to PE*/
6744 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6745 {
6746 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6747 }
6748
6749 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6750 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 return CONVERT_WDI2VOS_STATUS(status) ;
6753}
6754#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006755/*
6756 * FUNCTION: WDA_EnterImpsReqCallback
6757 * send Enter IMPS RSP back to PE
6758 */
6759void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6760{
6761 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006763 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006764 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006765 return ;
6766}
Jeff Johnson295189b2012-06-20 16:38:30 -07006767/*
6768 * FUNCTION: WDA_ProcessEnterImpsReq
6769 * Request to WDI to Enter IMPS power state.
6770 */
6771VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6772{
6773 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006775 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 if(IS_WDI_STATUS_FAILURE(status))
6778 {
6779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6780 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006781 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006783 return CONVERT_WDI2VOS_STATUS(status) ;
6784}
Jeff Johnson295189b2012-06-20 16:38:30 -07006785/*
6786 * FUNCTION: WDA_ExitImpsReqCallback
6787 * send Exit IMPS RSP back to PE
6788 */
6789void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6790{
6791 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006793 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006794 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006795 return ;
6796}
Jeff Johnson295189b2012-06-20 16:38:30 -07006797/*
6798 * FUNCTION: WDA_ProcessExitImpsReq
6799 * Request to WDI to Exit IMPS power state.
6800 */
6801VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6802{
6803 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006805 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 if(IS_WDI_STATUS_FAILURE(status))
6808 {
6809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6810 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006811 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006813 return CONVERT_WDI2VOS_STATUS(status) ;
6814}
Jeff Johnson295189b2012-06-20 16:38:30 -07006815/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006816 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006817 * send Enter BMPS RSP back to PE
6818 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006819void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006820{
6821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6822 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006823 tEnterBmpsParams *pEnterBmpsRspParams;
6824
Jeff Johnson295189b2012-06-20 16:38:30 -07006825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006826 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 if(NULL == pWdaParams)
6828 {
6829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006830 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 VOS_ASSERT(0) ;
6832 return ;
6833 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006834
6835 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6836 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6837
6838 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006839 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006840
6841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006843 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6844
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 return ;
6846}
Jeff Johnson295189b2012-06-20 16:38:30 -07006847/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006848 * FUNCTION: WDA_EnterBmpsReqCallback
6849 * Free memory and send Enter BMPS RSP back to PE.
6850 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
6851 */
6852void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6853{
6854 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6855 tWDA_CbContext *pWDA;
6856 tEnterBmpsParams *pEnterBmpsRspParams;
6857
6858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6859 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6860
6861 if(NULL == pWdaParams)
6862 {
6863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6864 "%s: pWdaParams received NULL", __func__);
6865 VOS_ASSERT(0);
6866 return;
6867 }
6868
6869 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6870 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6871 pEnterBmpsRspParams->status = wdiStatus;
6872
6873 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6874 {
6875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6876 vos_mem_free(pWdaParams);
6877 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
6878 }
6879
6880 return;
6881}
6882/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 * FUNCTION: WDA_ProcessEnterBmpsReq
6884 * Request to WDI to Enter BMPS power state.
6885 */
6886VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6887 tEnterBmpsParams *pEnterBmpsReqParams)
6888{
6889 WDI_Status status = WDI_STATUS_SUCCESS;
6890 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6891 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006893 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006894 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6895 {
6896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006897 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 VOS_ASSERT(0);
6899 return VOS_STATUS_E_FAILURE;
6900 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006901 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6902 if (NULL == wdiEnterBmpsReqParams)
6903 {
6904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006905 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006907 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6908 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006909 return VOS_STATUS_E_NOMEM;
6910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006911 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6912 if (NULL == pWdaParams)
6913 {
6914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006915 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006916 VOS_ASSERT(0);
6917 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006918 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6919 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006920 return VOS_STATUS_E_NOMEM;
6921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006922 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6923 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6924 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6925 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 // For CCX and 11R Roaming
6927 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6928 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6929 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07006930 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
6931 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006932
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 /* Store param pointer as passed in by caller */
6934 /* store Params pass it to WDI */
6935 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006936 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006939 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006940 if (IS_WDI_STATUS_FAILURE(status))
6941 {
6942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6943 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6944 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006945 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006947 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006949 return CONVERT_WDI2VOS_STATUS(status);
6950}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006951
6952
6953static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6954 WDI_Status wdiStatus,
6955 tExitBmpsParams *pExitBmpsReqParams)
6956{
6957 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6958
6959 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6960}
6961
6962
Jeff Johnson295189b2012-06-20 16:38:30 -07006963/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006964 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 * send Exit BMPS RSP back to PE
6966 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006967void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006968{
6969 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6970 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006971 tExitBmpsParams *pExitBmpsRspParams;
6972
Jeff Johnson295189b2012-06-20 16:38:30 -07006973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006974 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006975 if(NULL == pWdaParams)
6976 {
6977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006978 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 VOS_ASSERT(0) ;
6980 return ;
6981 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006982
6983 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6984 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6985
6986 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006987 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006988
Jeff Johnson295189b2012-06-20 16:38:30 -07006989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6990 vos_mem_free(pWdaParams) ;
6991
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006992 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006993 return ;
6994}
Jeff Johnson295189b2012-06-20 16:38:30 -07006995/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006996 * FUNCTION: WDA_ExitBmpsReqCallback
6997 * Free memory and send Exit BMPS RSP back to PE.
6998 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
6999 */
7000void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7001{
7002 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7003 tWDA_CbContext *pWDA;
7004 tExitBmpsParams *pExitBmpsRspParams;
7005
7006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7007 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7008
7009 if(NULL == pWdaParams)
7010 {
7011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7012 "%s: pWdaParams received NULL", __func__);
7013 VOS_ASSERT(0);
7014 return;
7015 }
7016
7017 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7018 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7019 pExitBmpsRspParams->status = wdiStatus;
7020
7021 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7022 {
7023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7024 vos_mem_free(pWdaParams);
7025 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7026 }
7027
7028 return;
7029}
7030/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 * FUNCTION: WDA_ProcessExitBmpsReq
7032 * Request to WDI to Exit BMPS power state.
7033 */
7034VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7035 tExitBmpsParams *pExitBmpsReqParams)
7036{
7037 WDI_Status status = WDI_STATUS_SUCCESS ;
7038 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7039 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7040 sizeof(WDI_ExitBmpsReqParamsType)) ;
7041 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007043 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 if(NULL == wdiExitBmpsReqParams)
7045 {
7046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007047 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007048 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007049 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 return VOS_STATUS_E_NOMEM;
7051 }
7052 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7053 if(NULL == pWdaParams)
7054 {
7055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007056 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 VOS_ASSERT(0);
7058 vos_mem_free(wdiExitBmpsReqParams);
7059 return VOS_STATUS_E_NOMEM;
7060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007062
7063 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7064
Yue Ma7f44bbe2013-04-12 11:47:39 -07007065 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7066 wdiExitBmpsReqParams->pUserData = pWdaParams;
7067
Jeff Johnson295189b2012-06-20 16:38:30 -07007068 /* Store param pointer as passed in by caller */
7069 /* store Params pass it to WDI */
7070 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7071 pWdaParams->pWdaContext = pWDA;
7072 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007073 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007074 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 if(IS_WDI_STATUS_FAILURE(status))
7076 {
7077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7078 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7080 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007081 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 return CONVERT_WDI2VOS_STATUS(status) ;
7084}
Jeff Johnson295189b2012-06-20 16:38:30 -07007085/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007086 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 * send Enter UAPSD RSP back to PE
7088 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007089void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007090{
7091 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7092 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007093 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007095 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 if(NULL == pWdaParams)
7097 {
7098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007099 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007100 VOS_ASSERT(0) ;
7101 return ;
7102 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007103
7104 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7105 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7106
7107 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007108 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007109
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7111 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007112 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007113 return ;
7114}
Jeff Johnson295189b2012-06-20 16:38:30 -07007115/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007116 * FUNCTION: WDA_EnterUapsdReqCallback
7117 * Free memory and send Enter UAPSD RSP back to PE.
7118 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7119 */
7120void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7121{
7122 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7123 tWDA_CbContext *pWDA;
7124 tUapsdParams *pEnterUapsdRsqParams;
7125
7126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7127 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7128
7129 if(NULL == pWdaParams)
7130 {
7131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7132 "%s: pWdaParams received NULL", __func__);
7133 VOS_ASSERT(0);
7134 return;
7135 }
7136
7137 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7138 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7139 pEnterUapsdRsqParams->status = wdiStatus;
7140
7141 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7142 {
7143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7144 vos_mem_free(pWdaParams);
7145 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7146 }
7147
7148 return;
7149}
7150/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 * FUNCTION: WDA_ProcessEnterUapsdReq
7152 * Request to WDI to Enter UAPSD power state.
7153 */
7154VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7155 tUapsdParams *pEnterUapsdReqParams)
7156{
7157 WDI_Status status = WDI_STATUS_SUCCESS ;
7158 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7159 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7160 sizeof(WDI_EnterUapsdReqParamsType)) ;
7161 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007163 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 if(NULL == wdiEnterUapsdReqParams)
7165 {
7166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 VOS_ASSERT(0);
7169 return VOS_STATUS_E_NOMEM;
7170 }
7171 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7172 if(NULL == pWdaParams)
7173 {
7174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 VOS_ASSERT(0);
7177 vos_mem_free(wdiEnterUapsdReqParams);
7178 return VOS_STATUS_E_NOMEM;
7179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7181 pEnterUapsdReqParams->beDeliveryEnabled;
7182 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7183 pEnterUapsdReqParams->beTriggerEnabled;
7184 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7185 pEnterUapsdReqParams->bkDeliveryEnabled;
7186 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7187 pEnterUapsdReqParams->bkTriggerEnabled;
7188 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7189 pEnterUapsdReqParams->viDeliveryEnabled;
7190 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7191 pEnterUapsdReqParams->viTriggerEnabled;
7192 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7193 pEnterUapsdReqParams->voDeliveryEnabled;
7194 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7195 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007196 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007197
Yue Ma7f44bbe2013-04-12 11:47:39 -07007198 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7199 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007200
Jeff Johnson295189b2012-06-20 16:38:30 -07007201 /* Store param pointer as passed in by caller */
7202 /* store Params pass it to WDI */
7203 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7204 pWdaParams->pWdaContext = pWDA;
7205 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007207 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 if(IS_WDI_STATUS_FAILURE(status))
7209 {
7210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7211 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7212 vos_mem_free(pWdaParams->wdaMsgParam) ;
7213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7214 vos_mem_free(pWdaParams) ;
7215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 return CONVERT_WDI2VOS_STATUS(status) ;
7217}
Jeff Johnson295189b2012-06-20 16:38:30 -07007218/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007219 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 * send Exit UAPSD RSP back to PE
7221 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007222void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007223{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007224
7225 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7226 tWDA_CbContext *pWDA;
7227 tExitUapsdParams *pExitUapsdRspParams;
7228
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007230 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007231 if(NULL == pWdaParams)
7232 {
7233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007234 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007235 VOS_ASSERT(0);
7236 return;
7237 }
7238
7239 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7240 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7241
7242 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007243 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007244
7245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7246 vos_mem_free(pWdaParams) ;
7247
7248 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 return ;
7250}
Jeff Johnson295189b2012-06-20 16:38:30 -07007251/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007252 * FUNCTION: WDA_ExitUapsdReqCallback
7253 * Free memory and send Exit UAPSD RSP back to PE.
7254 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7255 */
7256void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7257{
7258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7259 tWDA_CbContext *pWDA;
7260 tExitUapsdParams *pExitUapsdRspParams;
7261
7262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7263 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7264
7265 if(NULL == pWdaParams)
7266 {
7267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7268 "%s: pWdaParams received NULL", __func__);
7269 VOS_ASSERT(0);
7270 return;
7271 }
7272
7273 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7274 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7275 pExitUapsdRspParams->status = wdiStatus;
7276
7277 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7278 {
7279 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7280 vos_mem_free(pWdaParams);
7281 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7282 }
7283
7284 return;
7285}
7286/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 * FUNCTION: WDA_ProcessExitUapsdReq
7288 * Request to WDI to Exit UAPSD power state.
7289 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007290VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7291 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007292{
7293 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007294 tWDA_ReqParams *pWdaParams ;
7295 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7296 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7297 sizeof(WDI_ExitUapsdReqParamsType)) ;
7298
Jeff Johnson295189b2012-06-20 16:38:30 -07007299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007300 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007301
7302 if(NULL == wdiExitUapsdReqParams)
7303 {
7304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007305 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007306 VOS_ASSERT(0);
7307 return VOS_STATUS_E_NOMEM;
7308 }
7309 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7310 if(NULL == pWdaParams)
7311 {
7312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007313 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007314 VOS_ASSERT(0);
7315 vos_mem_free(wdiExitUapsdReqParams);
7316 return VOS_STATUS_E_NOMEM;
7317 }
7318
7319 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007320 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7321 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007322
7323 /* Store param pointer as passed in by caller */
7324 /* store Params pass it to WDI */
7325 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7326 pWdaParams->pWdaContext = pWDA;
7327 pWdaParams->wdaMsgParam = pExitUapsdParams;
7328
Yue Ma7f44bbe2013-04-12 11:47:39 -07007329 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 if(IS_WDI_STATUS_FAILURE(status))
7331 {
7332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7333 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007334 vos_mem_free(pWdaParams->wdaMsgParam) ;
7335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7336 vos_mem_free(pWdaParams) ;
7337
Jeff Johnson295189b2012-06-20 16:38:30 -07007338 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007339 return CONVERT_WDI2VOS_STATUS(status) ;
7340}
7341
Jeff Johnson295189b2012-06-20 16:38:30 -07007342/*
7343 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7344 *
7345 */
7346void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7347{
7348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007350 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007351 if(NULL == pWdaParams)
7352 {
7353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007354 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007355 VOS_ASSERT(0) ;
7356 return ;
7357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007358 if( pWdaParams != NULL )
7359 {
7360 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7361 {
7362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7363 }
7364 if( pWdaParams->wdaMsgParam != NULL )
7365 {
7366 vos_mem_free(pWdaParams->wdaMsgParam) ;
7367 }
7368 vos_mem_free(pWdaParams) ;
7369 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007370 return ;
7371}
Jeff Johnson295189b2012-06-20 16:38:30 -07007372/*
7373 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7374 * Request to WDI to set the power save params at start.
7375 */
7376VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7377 tSirPowerSaveCfg *pPowerSaveCfg)
7378{
7379 WDI_Status status = WDI_STATUS_SUCCESS ;
7380 tHalCfg *tlvStruct = NULL ;
7381 tANI_U8 *tlvStructStart = NULL ;
7382 v_PVOID_t *configParam;
7383 tANI_U32 configParamSize;
7384 tANI_U32 *configDataValue;
7385 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7386 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007388 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007389 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7390 {
7391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007392 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007393 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007394 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 return VOS_STATUS_E_FAILURE;
7396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007397 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7398 if (NULL == wdiPowerSaveCfg)
7399 {
7400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007401 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007403 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 return VOS_STATUS_E_NOMEM;
7405 }
7406 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7407 if(NULL == pWdaParams)
7408 {
7409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007411 VOS_ASSERT(0);
7412 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007413 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007414 return VOS_STATUS_E_NOMEM;
7415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007416 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7417 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007418 if(NULL == configParam)
7419 {
7420 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007421 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007422 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007423 vos_mem_free(pWdaParams);
7424 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007425 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 return VOS_STATUS_E_NOMEM;
7427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007428 vos_mem_set(configParam, configParamSize, 0);
7429 wdiPowerSaveCfg->pConfigBuffer = configParam;
7430 tlvStruct = (tHalCfg *)configParam;
7431 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007432 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7433 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7434 tlvStruct->length = sizeof(tANI_U32);
7435 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7436 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007437 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7438 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007439 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7440 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7441 tlvStruct->length = sizeof(tANI_U32);
7442 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7443 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007444 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7445 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007446 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7447 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7448 tlvStruct->length = sizeof(tANI_U32);
7449 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7450 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7452 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007453 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7454 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7455 tlvStruct->length = sizeof(tANI_U32);
7456 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7457 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7459 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7461 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7462 tlvStruct->length = sizeof(tANI_U32);
7463 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7464 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7466 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7468 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7469 tlvStruct->length = sizeof(tANI_U32);
7470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7471 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7473 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7475 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7476 tlvStruct->length = sizeof(tANI_U32);
7477 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7478 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007479 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7480 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007481 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7482 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7483 tlvStruct->length = sizeof(tANI_U32);
7484 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7485 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7486 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7487 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7489 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7490 tlvStruct->length = sizeof(tANI_U32);
7491 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7492 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7493 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7494 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007495 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7496 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7497 tlvStruct->length = sizeof(tANI_U32);
7498 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7499 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007500 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7501 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7503 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7504 tlvStruct->length = sizeof(tANI_U32);
7505 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7506 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7508 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007511 /* store Params pass it to WDI */
7512 pWdaParams->wdaMsgParam = configParam;
7513 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7514 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7516 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 if(IS_WDI_STATUS_FAILURE(status))
7518 {
7519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7520 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7521 vos_mem_free(pWdaParams->wdaMsgParam);
7522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7523 vos_mem_free(pWdaParams);
7524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 return CONVERT_WDI2VOS_STATUS(status);
7527}
Jeff Johnson295189b2012-06-20 16:38:30 -07007528/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007529 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 *
7531 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007532void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007533{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007534 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7535
Jeff Johnson295189b2012-06-20 16:38:30 -07007536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007537 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007538
7539 if(NULL == pWdaParams)
7540 {
7541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7542 "%s: pWdaParams received NULL", __func__);
7543 VOS_ASSERT(0);
7544 return ;
7545 }
7546
7547 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007548 vos_mem_free(pWdaParams);
7549
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 return ;
7551}
Jeff Johnson295189b2012-06-20 16:38:30 -07007552/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007553 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7554 * Free memory.
7555 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7556 */
7557void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7558{
7559 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7560
7561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7562 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7563
7564 if(NULL == pWdaParams)
7565 {
7566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7567 "%s: pWdaParams received NULL", __func__);
7568 VOS_ASSERT(0);
7569 return;
7570 }
7571
7572 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7573 {
7574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7575 vos_mem_free(pWdaParams);
7576 }
7577
7578 return;
7579}
7580/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007581 * FUNCTION: WDA_SetUapsdAcParamsReq
7582 * Request to WDI to set the UAPSD params for an ac (sta mode).
7583 */
7584VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7585 tUapsdInfo *pUapsdInfo)
7586{
7587 WDI_Status status = WDI_STATUS_SUCCESS;
7588 tWDA_CbContext *pWDA = NULL ;
7589 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7590 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7591 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7592 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007594 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007595 if(NULL == wdiUapsdParams)
7596 {
7597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007599 VOS_ASSERT(0);
7600 return VOS_STATUS_E_NOMEM;
7601 }
7602 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7603 if(NULL == pWdaParams)
7604 {
7605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007606 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 VOS_ASSERT(0);
7608 vos_mem_free(wdiUapsdParams);
7609 return VOS_STATUS_E_NOMEM;
7610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007611 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7612 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7613 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7614 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7615 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7616 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007617 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7618 wdiUapsdParams->pUserData = pWdaParams;
7619
Jeff Johnson295189b2012-06-20 16:38:30 -07007620 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007621 pWdaParams->pWdaContext = pWDA;
7622 /* Store param pointer as passed in by caller */
7623 pWdaParams->wdaMsgParam = pUapsdInfo;
7624 /* store Params pass it to WDI */
7625 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007627 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007628 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007629 if(IS_WDI_STATUS_FAILURE(status))
7630 {
7631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7632 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7634 vos_mem_free(pWdaParams);
7635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007636 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7637 return VOS_STATUS_SUCCESS;
7638 else
7639 return VOS_STATUS_E_FAILURE;
7640
Jeff Johnson295189b2012-06-20 16:38:30 -07007641}
7642/*
7643 * FUNCTION: WDA_ClearUapsdAcParamsReq
7644 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7645 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7646 * and again enter the UPASD with the modified params. Hence the disable
7647 * function was kept empty.
7648 *
7649 */
7650VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7651{
7652 /* do nothing */
7653 return VOS_STATUS_SUCCESS;
7654}
Jeff Johnson295189b2012-06-20 16:38:30 -07007655/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007656 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 *
7658 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007659void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007660{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007661 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7662
Jeff Johnson295189b2012-06-20 16:38:30 -07007663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007664 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007665
7666 if(NULL == pWdaParams)
7667 {
7668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007669 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007670 VOS_ASSERT(0) ;
7671 return ;
7672 }
7673
7674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7675 vos_mem_free(pWdaParams->wdaMsgParam);
7676 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007677
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 //print a msg, nothing else to do
7679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007680 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007681 return ;
7682}
Jeff Johnson295189b2012-06-20 16:38:30 -07007683/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007684 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7685 * Free memory.
7686 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7687 */
7688void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7689{
7690 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7691
7692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7693 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7694
7695 if(NULL == pWdaParams)
7696 {
7697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7698 "%s: pWdaParams received NULL", __func__);
7699 VOS_ASSERT(0);
7700 return;
7701 }
7702
7703 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7704 {
7705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7706 vos_mem_free(pWdaParams->wdaMsgParam);
7707 vos_mem_free(pWdaParams);
7708 }
7709
7710 return;
7711}
7712/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 * FUNCTION: WDA_UpdateUapsdParamsReq
7714 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7715 */
7716VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7717 tUpdateUapsdParams* pUpdateUapsdInfo)
7718{
7719 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007720 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7722 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7723 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007724 tWDA_ReqParams *pWdaParams = NULL;
7725
Jeff Johnson295189b2012-06-20 16:38:30 -07007726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007727 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 if(NULL == wdiUpdateUapsdParams)
7729 {
7730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007731 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007732 VOS_ASSERT(0);
7733 return VOS_STATUS_E_NOMEM;
7734 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7736 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7737 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007738 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7739 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007740
7741 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7742 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 {
7744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007746 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007747 vos_mem_free(pUpdateUapsdInfo);
7748 vos_mem_free(wdiUpdateUapsdParams);
7749 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007751 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007752 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007753 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007754 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7755 pWdaParams->pWdaContext = pWDA;
7756
Jeff Johnson43971f52012-07-17 12:26:56 -07007757 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007758 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007759 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007760
Jeff Johnson43971f52012-07-17 12:26:56 -07007761 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007762 {
7763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7764 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007765 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7767 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007768 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007769 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007770 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007771}
Jeff Johnson295189b2012-06-20 16:38:30 -07007772/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007773 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 *
7775 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007776void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007777{
7778 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007780 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007781 if(WDI_STATUS_SUCCESS != wdiStatus)
7782 {
7783 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007784 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 if(NULL == pWdaParams)
7787 {
7788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007789 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007790 VOS_ASSERT(0) ;
7791 return ;
7792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7794 vos_mem_free(pWdaParams->wdaMsgParam);
7795 vos_mem_free(pWdaParams);
7796 return ;
7797}
Jeff Johnson295189b2012-06-20 16:38:30 -07007798/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007799 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7800 * Free memory.
7801 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7802 */
7803void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7804{
7805 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7806
7807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7808 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7809
7810 if(NULL == pWdaParams)
7811 {
7812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7813 "%s: pWdaParams received NULL", __func__);
7814 VOS_ASSERT(0);
7815 return;
7816 }
7817
7818 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7819 {
7820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7821 vos_mem_free(pWdaParams->wdaMsgParam);
7822 vos_mem_free(pWdaParams);
7823 }
7824
7825 return;
7826}
7827/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007828 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7829 *
7830 */
7831VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7832 tSirWlanSetRxpFilters *pWlanSuspendParam)
7833{
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007835 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007836 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7837 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7838 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7839 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007841 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 if(NULL == wdiRxpFilterParams)
7843 {
7844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007845 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 VOS_ASSERT(0);
7847 vos_mem_free(pWlanSuspendParam);
7848 return VOS_STATUS_E_NOMEM;
7849 }
7850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7851 if(NULL == pWdaParams)
7852 {
7853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 VOS_ASSERT(0);
7856 vos_mem_free(wdiRxpFilterParams);
7857 vos_mem_free(pWlanSuspendParam);
7858 return VOS_STATUS_E_NOMEM;
7859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7861 pWlanSuspendParam->setMcstBcstFilter;
7862 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7863 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7864
Yue Ma7f44bbe2013-04-12 11:47:39 -07007865 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
7866 wdiRxpFilterParams->pUserData = pWdaParams;
7867
Jeff Johnson295189b2012-06-20 16:38:30 -07007868 pWdaParams->pWdaContext = pWDA;
7869 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7870 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007871 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007872 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007874 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 {
7876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7877 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007878 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7880 vos_mem_free(pWdaParams->wdaMsgParam);
7881 vos_mem_free(pWdaParams);
7882 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007883 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007884}
Jeff Johnson295189b2012-06-20 16:38:30 -07007885/*
7886 * FUNCTION: WDA_WdiIndicationCallback
7887 *
7888 */
7889void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7890 void* pUserData)
7891{
7892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007893 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007894}
Jeff Johnson295189b2012-06-20 16:38:30 -07007895/*
7896 * FUNCTION: WDA_ProcessWlanSuspendInd
7897 *
7898 */
7899VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7900 tSirWlanSuspendParam *pWlanSuspendParam)
7901{
7902 WDI_Status wdiStatus;
7903 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007905 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7907 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7908 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7909 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7912 if(WDI_STATUS_PENDING == wdiStatus)
7913 {
7914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007915 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 }
7917 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7918 {
7919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007920 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007922 vos_mem_free(pWlanSuspendParam);
7923 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7924}
7925
Chet Lanctot186b5732013-03-18 10:26:30 -07007926#ifdef WLAN_FEATURE_11W
7927/*
7928 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7929 *
7930 */
7931VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7932 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7933{
7934 WDI_Status wdiStatus;
7935 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7937 "------> %s ", __func__);
7938
7939 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7940 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7941 sizeof(tSirMacAddr));
7942
7943 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7944 wdiExclUnencryptParams.pUserData = pWDA;
7945
7946 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7947 if(WDI_STATUS_PENDING == wdiStatus)
7948 {
7949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7950 "Pending received for %s:%d ", __func__, __LINE__ );
7951 }
7952 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7953 {
7954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7955 "Failure in %s:%d ", __func__, __LINE__ );
7956 }
7957 vos_mem_free(pExclUnencryptParam);
7958 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7959}
7960#endif
7961
Jeff Johnson295189b2012-06-20 16:38:30 -07007962/*
7963 * FUNCTION: WDA_ProcessWlanResumeCallback
7964 *
7965 */
7966void WDA_ProcessWlanResumeCallback(
7967 WDI_SuspendResumeRspParamsType *resumeRspParams,
7968 void* pUserData)
7969{
7970 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007972 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 if(NULL == pWdaParams)
7974 {
7975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007976 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007977 VOS_ASSERT(0) ;
7978 return ;
7979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007980 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7981 {
7982 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007983 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7986 vos_mem_free(pWdaParams->wdaMsgParam);
7987 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 return ;
7989}
Jeff Johnson295189b2012-06-20 16:38:30 -07007990/*
7991 * FUNCTION: WDA_ProcessWlanResumeReq
7992 *
7993 */
7994VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7995 tSirWlanResumeParam *pWlanResumeParam)
7996{
7997 WDI_Status wdiStatus;
7998 WDI_ResumeParamsType *wdiResumeParams =
7999 (WDI_ResumeParamsType *)vos_mem_malloc(
8000 sizeof(WDI_ResumeParamsType) ) ;
8001 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008003 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008004 if(NULL == wdiResumeParams)
8005 {
8006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 VOS_ASSERT(0);
8009 return VOS_STATUS_E_NOMEM;
8010 }
8011 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8012 if(NULL == pWdaParams)
8013 {
8014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008015 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008016 VOS_ASSERT(0);
8017 vos_mem_free(wdiResumeParams);
8018 return VOS_STATUS_E_NOMEM;
8019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008020 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8021 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 wdiResumeParams->wdiReqStatusCB = NULL;
8024 pWdaParams->wdaMsgParam = pWlanResumeParam;
8025 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8026 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8028 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8029 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8031 {
8032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8033 "Failure in Host Resume REQ WDI API, free all the memory " );
8034 VOS_ASSERT(0);
8035 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8036 vos_mem_free(pWdaParams->wdaMsgParam);
8037 vos_mem_free(pWdaParams);
8038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8040}
8041
Jeff Johnson295189b2012-06-20 16:38:30 -07008042/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008043 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008044 *
8045 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008046void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008047{
8048 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008050 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008051 if(NULL == pWdaParams)
8052 {
8053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008054 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008055 VOS_ASSERT(0) ;
8056 return ;
8057 }
8058
8059 vos_mem_free(pWdaParams->wdaMsgParam) ;
8060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8061 vos_mem_free(pWdaParams) ;
8062 /*
8063 * No respone required for SetBeaconFilter req so just free the request
8064 * param here
8065 */
8066
Jeff Johnson295189b2012-06-20 16:38:30 -07008067 return ;
8068}
Jeff Johnson295189b2012-06-20 16:38:30 -07008069/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008070 * FUNCTION: WDA_SetBeaconFilterReqCallback
8071 * Free memory.
8072 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8073 */
8074void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8075{
8076 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8077
8078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8079 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8080
8081 if(NULL == pWdaParams)
8082 {
8083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8084 "%s: pWdaParams received NULL", __func__);
8085 VOS_ASSERT(0);
8086 return;
8087 }
8088
8089 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8090 {
8091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8092 vos_mem_free(pWdaParams->wdaMsgParam);
8093 vos_mem_free(pWdaParams);
8094 }
8095
8096 return;
8097}
8098/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 * FUNCTION: WDA_SetBeaconFilterReq
8100 * Request to WDI to send the beacon filtering related information.
8101 */
8102VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8103 tBeaconFilterMsg* pBeaconFilterInfo)
8104{
8105 WDI_Status status = WDI_STATUS_SUCCESS;
8106 tANI_U8 *dstPtr, *srcPtr;
8107 tANI_U8 filterLength;
8108 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8109 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8110 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8111 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008113 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 if(NULL == wdiBeaconFilterInfo)
8115 {
8116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 VOS_ASSERT(0);
8119 return VOS_STATUS_E_NOMEM;
8120 }
8121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8122 if(NULL == pWdaParams)
8123 {
8124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 VOS_ASSERT(0);
8127 vos_mem_free(wdiBeaconFilterInfo);
8128 return VOS_STATUS_E_NOMEM;
8129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008130 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8131 pBeaconFilterInfo->beaconInterval;
8132 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8133 pBeaconFilterInfo->capabilityInfo;
8134 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8135 pBeaconFilterInfo->capabilityMask;
8136 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008137
8138 //Fill the BssIdx
8139 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8140
Jeff Johnson295189b2012-06-20 16:38:30 -07008141 //Fill structure with info contained in the beaconFilterTable
8142 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8143 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8144 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8145 if(WDI_BEACON_FILTER_LEN < filterLength)
8146 {
8147 filterLength = WDI_BEACON_FILTER_LEN;
8148 }
8149 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008150 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8151 wdiBeaconFilterInfo->pUserData = pWdaParams;
8152
Jeff Johnson295189b2012-06-20 16:38:30 -07008153 /* Store param pointer as passed in by caller */
8154 /* store Params pass it to WDI */
8155 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8156 pWdaParams->pWdaContext = pWDA;
8157 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8158
Jeff Johnson295189b2012-06-20 16:38:30 -07008159 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008160 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008161 if(IS_WDI_STATUS_FAILURE(status))
8162 {
8163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8164 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8165 vos_mem_free(pWdaParams->wdaMsgParam) ;
8166 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8167 vos_mem_free(pWdaParams) ;
8168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008169 return CONVERT_WDI2VOS_STATUS(status) ;
8170}
Jeff Johnson295189b2012-06-20 16:38:30 -07008171/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008172 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008173 *
8174 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008175void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008176{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008177 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8178
Jeff Johnson295189b2012-06-20 16:38:30 -07008179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008180 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008181
8182 if(NULL == pWdaParams)
8183 {
8184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008185 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008186 VOS_ASSERT(0) ;
8187 return ;
8188 }
8189
8190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8191 vos_mem_free(pWdaParams->wdaMsgParam);
8192 vos_mem_free(pWdaParams);
8193
Jeff Johnson295189b2012-06-20 16:38:30 -07008194 //print a msg, nothing else to do
8195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008196 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008197 return ;
8198}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008199/*
8200 * FUNCTION: WDA_RemBeaconFilterReqCallback
8201 * Free memory.
8202 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8203 */
8204void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8205{
8206 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8207
8208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8209 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8210
8211 if(NULL == pWdaParams)
8212 {
8213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8214 "%s: pWdaParams received NULL", __func__);
8215 VOS_ASSERT(0);
8216 return;
8217 }
8218
8219 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8220 {
8221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8222 vos_mem_free(pWdaParams->wdaMsgParam);
8223 vos_mem_free(pWdaParams);
8224 }
8225
8226 return;
8227}
Jeff Johnson295189b2012-06-20 16:38:30 -07008228 // TODO: PE does not have this feature for now implemented,
8229 // but the support for removing beacon filter exists between
8230 // HAL and FW. This function can be called whenever PE defines
8231 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008232/*
8233 * FUNCTION: WDA_RemBeaconFilterReq
8234 * Request to WDI to send the removal of beacon filtering related information.
8235 */
8236VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8237 tRemBeaconFilterMsg* pBeaconFilterInfo)
8238{
8239 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008240 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8242 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8243 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008244 tWDA_ReqParams *pWdaParams ;
8245
Jeff Johnson295189b2012-06-20 16:38:30 -07008246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008247 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008248 if(NULL == wdiBeaconFilterInfo)
8249 {
8250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008251 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008252 VOS_ASSERT(0);
8253 return VOS_STATUS_E_NOMEM;
8254 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008255 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8256 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008257 {
8258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008259 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008260 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008261 vos_mem_free(wdiBeaconFilterInfo);
8262 vos_mem_free(pBeaconFilterInfo);
8263 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008264 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008265
8266 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8267 pBeaconFilterInfo->ucIeCount;
8268 //Fill structure with info contained in the ucRemIeId
8269 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8270 pBeaconFilterInfo->ucRemIeId,
8271 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8272 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8273 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008274
8275 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008276 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008277 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008278 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8279
8280 pWdaParams->pWdaContext = pWDA;
8281
Jeff Johnson43971f52012-07-17 12:26:56 -07008282 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008283 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008284 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008285 {
8286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8287 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008288 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8290 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008291 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008293 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008294}
Jeff Johnson295189b2012-06-20 16:38:30 -07008295/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008296 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008297 *
8298 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008299void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008300{
8301 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008303 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 if(NULL == pWdaParams)
8305 {
8306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 VOS_ASSERT(0) ;
8309 return ;
8310 }
8311
8312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8313 vos_mem_free(pWdaParams) ;
8314
Jeff Johnson295189b2012-06-20 16:38:30 -07008315 return ;
8316}
Jeff Johnson295189b2012-06-20 16:38:30 -07008317/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008318 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8319 * Free memory.
8320 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8321 */
8322void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8323{
8324 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8325
8326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8327 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8328
8329 if(NULL == pWdaParams)
8330 {
8331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8332 "%s: pWdaParams received NULL", __func__);
8333 VOS_ASSERT(0);
8334 return;
8335 }
8336
8337 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8338 {
8339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8340 vos_mem_free(pWdaParams);
8341 }
8342
8343 return;
8344}
8345/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 * FUNCTION: WDA_SetRSSIThresholdsReq
8347 * Request to WDI to set the RSSI thresholds (sta mode).
8348 */
8349VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8350{
8351 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008352 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 tWDA_CbContext *pWDA = NULL ;
8354 v_PVOID_t pVosContext = NULL;
8355 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8356 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8357 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8358 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008360 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 if(NULL == wdiRSSIThresholdsInfo)
8362 {
8363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 VOS_ASSERT(0);
8366 return VOS_STATUS_E_NOMEM;
8367 }
8368 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8369 if(NULL == pWdaParams)
8370 {
8371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008372 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 VOS_ASSERT(0);
8374 vos_mem_free(wdiRSSIThresholdsInfo);
8375 return VOS_STATUS_E_NOMEM;
8376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8379 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8380 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8382 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8383 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008384 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8385 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8386 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008387 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8388 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008389 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8390 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8391
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 /* Store param pointer as passed in by caller */
8393 /* store Params pass it to WDI */
8394 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8395 pWdaParams->pWdaContext = pWDA;
8396 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008397 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008398 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008399 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008400 {
8401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8402 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008403 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8405 vos_mem_free(pWdaParams) ;
8406 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008407 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008408
8409}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008410/*
Yue Madb90ac12013-04-04 13:39:13 -07008411 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 *
8413 */
Yue Madb90ac12013-04-04 13:39:13 -07008414void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008415{
8416 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8417
8418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008419 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 if(NULL == pWdaParams)
8421 {
8422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008423 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008424 VOS_ASSERT(0) ;
8425 return ;
8426 }
8427
8428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8429 vos_mem_free(pWdaParams->wdaMsgParam);
8430 vos_mem_free(pWdaParams) ;
8431
8432 //print a msg, nothing else to do
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008434 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 return ;
8436}
Jeff Johnson295189b2012-06-20 16:38:30 -07008437/*
Yue Madb90ac12013-04-04 13:39:13 -07008438 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008439 * Free memory.
8440 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008441 */
8442void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8443{
8444 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8445
8446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8447 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8448
8449 if(NULL == pWdaParams)
8450 {
8451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8452 "%s: Invalid pWdaParams pointer", __func__);
8453 VOS_ASSERT(0);
8454 return;
8455 }
8456
8457 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8458 {
8459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8460 vos_mem_free(pWdaParams->wdaMsgParam);
8461 vos_mem_free(pWdaParams);
8462 }
8463
8464 return;
8465}
8466/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008467 * FUNCTION: WDA_ProcessHostOffloadReq
8468 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8469 * to broadcast traffic (sta mode).
8470 */
8471VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8472 tSirHostOffloadReq *pHostOffloadParams)
8473{
8474 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008475 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008476 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8477 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8478 sizeof(WDI_HostOffloadReqParamsType)) ;
8479 tWDA_ReqParams *pWdaParams ;
8480
8481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008482 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008483
8484 if(NULL == wdiHostOffloadInfo)
8485 {
8486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008487 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008488 VOS_ASSERT(0);
8489 return VOS_STATUS_E_NOMEM;
8490 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8492 if(NULL == pWdaParams)
8493 {
8494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008496 VOS_ASSERT(0);
8497 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008498 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 return VOS_STATUS_E_NOMEM;
8500 }
8501
8502 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8503 pHostOffloadParams->offloadType;
8504 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8505 pHostOffloadParams->enableOrDisable;
8506
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008507 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8508 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8509
Jeff Johnson295189b2012-06-20 16:38:30 -07008510 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8511 {
8512 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8513 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8514 pHostOffloadParams->params.hostIpv4Addr,
8515 4);
8516 break;
8517 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8518 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8519 pHostOffloadParams->params.hostIpv6Addr,
8520 16);
8521 break;
8522 case SIR_IPV6_NS_OFFLOAD:
8523 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8524 pHostOffloadParams->params.hostIpv6Addr,
8525 16);
8526
8527#ifdef WLAN_NS_OFFLOAD
8528 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8529 {
8530 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8531 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8532 16);
8533 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8534 }
8535 else
8536 {
8537 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8538 }
8539
8540 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8541 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8542 16);
8543 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8544 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8545 6);
8546
8547 //Only two are supported so let's go through them without a loop
8548 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8549 {
8550 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8551 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8552 16);
8553 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8554 }
8555 else
8556 {
8557 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8558 }
8559
8560 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8561 {
8562 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8563 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8564 16);
8565 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8566 }
8567 else
8568 {
8569 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8570 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308571 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8572 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008573 break;
8574#endif //WLAN_NS_OFFLOAD
8575 default:
8576 {
8577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8578 "No Handling for Offload Type %x in WDA "
8579 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8580 //WDA_VOS_ASSERT(0) ;
8581 }
8582 }
Yue Madb90ac12013-04-04 13:39:13 -07008583 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8584 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008585
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008587 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 /* store Params pass it to WDI */
8589 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8590 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008591
Jeff Johnson295189b2012-06-20 16:38:30 -07008592
Jeff Johnson43971f52012-07-17 12:26:56 -07008593 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008594 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008595
Jeff Johnson43971f52012-07-17 12:26:56 -07008596 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 {
8598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8599 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008600 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8602 vos_mem_free(pWdaParams->wdaMsgParam);
8603 vos_mem_free(pWdaParams) ;
8604 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008605 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008606
8607}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008608/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008609 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008610 *
8611 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008612void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008613{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8615
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008617 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008618
8619 if(NULL == pWdaParams)
8620 {
8621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008622 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008623 VOS_ASSERT(0) ;
8624 return ;
8625 }
8626
8627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8628 vos_mem_free(pWdaParams->wdaMsgParam);
8629 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008630
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 //print a msg, nothing else to do
8632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008633 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008634 return ;
8635}
Jeff Johnson295189b2012-06-20 16:38:30 -07008636/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008637 * FUNCTION: WDA_KeepAliveReqCallback
8638 * Free memory.
8639 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8640 */
8641void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8642{
8643 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8644
8645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8646 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8647
8648 if(NULL == pWdaParams)
8649 {
8650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8651 "%s: pWdaParams received NULL", __func__);
8652 VOS_ASSERT(0);
8653 return;
8654 }
8655
8656 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8657 {
8658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8659 vos_mem_free(pWdaParams->wdaMsgParam);
8660 vos_mem_free(pWdaParams);
8661 }
8662
8663 return;
8664}
8665/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008666 * FUNCTION: WDA_ProcessKeepAliveReq
8667 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8668 * wakeup due to broadcast traffic (sta mode).
8669 */
8670VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8671 tSirKeepAliveReq *pKeepAliveParams)
8672{
8673 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008674 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008675 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8676 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8677 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008678 tWDA_ReqParams *pWdaParams;
8679
Jeff Johnson295189b2012-06-20 16:38:30 -07008680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008681 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008682 if(NULL == wdiKeepAliveInfo)
8683 {
8684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008685 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008686 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008687 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008688 return VOS_STATUS_E_NOMEM;
8689 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008690
8691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8692 if(NULL == pWdaParams)
8693 {
8694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008695 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008696 VOS_ASSERT(0);
8697 vos_mem_free(wdiKeepAliveInfo);
8698 vos_mem_free(pKeepAliveParams);
8699 return VOS_STATUS_E_NOMEM;
8700 }
8701
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8703 pKeepAliveParams->packetType;
8704 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8705 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008706
8707 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8708 pKeepAliveParams->bssId,
8709 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008710
8711 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8712 {
8713 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8714 pKeepAliveParams->hostIpv4Addr,
8715 SIR_IPV4_ADDR_LEN);
8716 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8717 pKeepAliveParams->destIpv4Addr,
8718 SIR_IPV4_ADDR_LEN);
8719 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8720 pKeepAliveParams->destMacAddr,
8721 SIR_MAC_ADDR_LEN);
8722 }
8723 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8724 {
8725 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8726 SIR_IPV4_ADDR_LEN,
8727 0);
8728 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8729 SIR_IPV4_ADDR_LEN,
8730 0);
8731 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8732 SIR_MAC_ADDR_LEN,
8733 0);
8734 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008735 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8736 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008737
Jeff Johnson295189b2012-06-20 16:38:30 -07008738 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008739 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008741 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8742 pWdaParams->pWdaContext = pWDA;
8743
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8745 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8746 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8747 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8748 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8750 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8751 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8752 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8753 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8755 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8756 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8757 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8758 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8759 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8760 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8761 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8763 "TimePeriod %d PacketType %d",
8764 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8765 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008766 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008767 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008768
Jeff Johnson43971f52012-07-17 12:26:56 -07008769 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008770 {
8771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8772 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008773 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8775 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008776 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008778 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008779
8780}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008781/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008782 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 *
8784 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008785void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008786 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8787 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008788{
8789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008791 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 if(NULL == pWdaParams)
8793 {
8794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008795 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 VOS_ASSERT(0) ;
8797 return ;
8798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8800 vos_mem_free(pWdaParams->wdaMsgParam);
8801 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008802 return ;
8803}
Jeff Johnson295189b2012-06-20 16:38:30 -07008804/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008805 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8806 * Free memory.
8807 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8808 */
8809void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8810{
8811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8812
8813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8814 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8815
8816 if(NULL == pWdaParams)
8817 {
8818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8819 "%s: pWdaParams received NULL", __func__);
8820 VOS_ASSERT(0);
8821 return;
8822 }
8823
8824 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8825 {
8826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8827 vos_mem_free(pWdaParams->wdaMsgParam);
8828 vos_mem_free(pWdaParams);
8829 }
8830
8831 return;
8832}
8833
8834/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008835 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8836 * Request to WDI to add WOWL Bcast pattern
8837 */
8838VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8839 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8840{
8841 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008842 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8844 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8845 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8846 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008848 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008849 if(NULL == wdiWowlAddBcPtrnInfo)
8850 {
8851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008852 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008853 VOS_ASSERT(0);
8854 return VOS_STATUS_E_NOMEM;
8855 }
8856 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8857 if(NULL == pWdaParams)
8858 {
8859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008860 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008861 VOS_ASSERT(0);
8862 vos_mem_free(wdiWowlAddBcPtrnInfo);
8863 return VOS_STATUS_E_NOMEM;
8864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008865 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8866 pWowlAddBcPtrnParams->ucPatternId;
8867 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8868 pWowlAddBcPtrnParams->ucPatternByteOffset;
8869 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8870 pWowlAddBcPtrnParams->ucPatternMaskSize;
8871 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8872 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008873 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8874 {
8875 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8876 pWowlAddBcPtrnParams->ucPattern,
8877 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8878 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8879 pWowlAddBcPtrnParams->ucPatternMask,
8880 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8881 }
8882 else
8883 {
8884 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8885 pWowlAddBcPtrnParams->ucPattern,
8886 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8887 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8888 pWowlAddBcPtrnParams->ucPatternMask,
8889 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8890
8891 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8892 pWowlAddBcPtrnParams->ucPatternExt,
8893 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8894 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8895 pWowlAddBcPtrnParams->ucPatternMaskExt,
8896 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8897 }
8898
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008899 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8900 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8901
Yue Ma7f44bbe2013-04-12 11:47:39 -07008902 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
8903 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008904 /* Store param pointer as passed in by caller */
8905 /* store Params pass it to WDI */
8906 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8907 pWdaParams->pWdaContext = pWDA;
8908 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008909 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008910 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008911 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008912 {
8913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8914 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008915 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008916 vos_mem_free(pWdaParams->wdaMsgParam) ;
8917 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8918 vos_mem_free(pWdaParams) ;
8919 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008920 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008921
8922}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008923/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008924 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 *
8926 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008927void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008928 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8929 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008930{
8931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008933 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008934 if(NULL == pWdaParams)
8935 {
8936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008937 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008938 VOS_ASSERT(0) ;
8939 return ;
8940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8942 vos_mem_free(pWdaParams->wdaMsgParam);
8943 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008944 return ;
8945}
Jeff Johnson295189b2012-06-20 16:38:30 -07008946/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008947 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8948 * Free memory.
8949 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
8950 */
8951void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8952{
8953 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8954
8955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8956 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8957
8958 if(NULL == pWdaParams)
8959 {
8960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8961 "%s: pWdaParams received NULL", __func__);
8962 VOS_ASSERT(0);
8963 return;
8964 }
8965
8966 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8967 {
8968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8969 vos_mem_free(pWdaParams->wdaMsgParam);
8970 vos_mem_free(pWdaParams);
8971 }
8972
8973 return;
8974}
8975/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008976 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8977 * Request to WDI to delete WOWL Bcast pattern
8978 */
8979VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8980 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8981{
8982 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008983 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008984 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8985 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8986 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8987 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008989 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 if(NULL == wdiWowlDelBcPtrnInfo)
8991 {
8992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 VOS_ASSERT(0);
8995 return VOS_STATUS_E_NOMEM;
8996 }
8997 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8998 if(NULL == pWdaParams)
8999 {
9000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009001 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009002 VOS_ASSERT(0);
9003 vos_mem_free(wdiWowlDelBcPtrnInfo);
9004 return VOS_STATUS_E_NOMEM;
9005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9007 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009008
9009 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9010 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9011
Yue Ma7f44bbe2013-04-12 11:47:39 -07009012 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9013 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009014 /* Store param pointer as passed in by caller */
9015 /* store Params pass it to WDI */
9016 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9017 pWdaParams->pWdaContext = pWDA;
9018 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009019 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009020 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009021 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009022 {
9023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9024 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009025 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009026 vos_mem_free(pWdaParams->wdaMsgParam) ;
9027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9028 vos_mem_free(pWdaParams) ;
9029 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009030 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009031
9032}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009033/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009034 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009035 *
9036 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009037void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009038{
9039 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9040 tWDA_CbContext *pWDA;
9041 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009043 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009044 if(NULL == pWdaParams)
9045 {
9046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009047 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 VOS_ASSERT(0) ;
9049 return ;
9050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009051 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9052 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9053
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009054 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9055
Jeff Johnson295189b2012-06-20 16:38:30 -07009056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9057 vos_mem_free(pWdaParams) ;
9058
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009059 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009060 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009061 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009062 return ;
9063}
Jeff Johnson295189b2012-06-20 16:38:30 -07009064/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009065 * FUNCTION: WDA_WowlEnterReqCallback
9066 * Free memory and send WOWL Enter RSP back to PE.
9067 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9068 */
9069void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9070{
9071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9072 tWDA_CbContext *pWDA;
9073 tSirHalWowlEnterParams *pWowlEnterParams;
9074
9075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9076 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9077
9078 if(NULL == pWdaParams)
9079 {
9080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9081 "%s: pWdaParams received NULL", __func__);
9082 VOS_ASSERT(0);
9083 return;
9084 }
9085
9086 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9087 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9088 pWowlEnterParams->status = wdiStatus;
9089
9090 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9091 {
9092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9093 vos_mem_free(pWdaParams);
9094 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9095 }
9096
9097 return;
9098}
9099/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009100 * FUNCTION: WDA_ProcessWowlEnterReq
9101 * Request to WDI to enter WOWL
9102 */
9103VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9104 tSirHalWowlEnterParams *pWowlEnterParams)
9105{
9106 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009107 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009108 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9109 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9110 sizeof(WDI_WowlEnterReqParamsType)) ;
9111 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009113 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 if(NULL == wdiWowlEnterInfo)
9115 {
9116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 VOS_ASSERT(0);
9119 return VOS_STATUS_E_NOMEM;
9120 }
9121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9122 if(NULL == pWdaParams)
9123 {
9124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 VOS_ASSERT(0);
9127 vos_mem_free(wdiWowlEnterInfo);
9128 return VOS_STATUS_E_NOMEM;
9129 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009130
9131 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9132
Jeff Johnson295189b2012-06-20 16:38:30 -07009133 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9134 pWowlEnterParams->magicPtrn,
9135 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009136 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9137 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009138 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9139 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009140 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9141 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009142 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9143 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009144 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9145 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9147 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009148 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9149 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9151 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009152#ifdef WLAN_WAKEUP_EVENTS
9153 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9154 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9155
9156 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9157 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9158
9159 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9160 pWowlEnterParams->ucWowNetScanOffloadMatch;
9161
9162 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9163 pWowlEnterParams->ucWowGTKRekeyError;
9164
9165 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9166 pWowlEnterParams->ucWoWBSSConnLoss;
9167#endif // WLAN_WAKEUP_EVENTS
9168
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009169 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9170 pWowlEnterParams->bssIdx;
9171
Yue Ma7f44bbe2013-04-12 11:47:39 -07009172 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9173 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 /* Store param pointer as passed in by caller */
9175 /* store Params pass it to WDI */
9176 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9177 pWdaParams->pWdaContext = pWDA;
9178 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009179 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009180 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009181 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009182 {
9183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9184 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009185 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009186 vos_mem_free(pWdaParams->wdaMsgParam) ;
9187 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9188 vos_mem_free(pWdaParams) ;
9189 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009190 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009191
9192}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009193/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009194 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009195 *
9196 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009197void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009198{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9200 tWDA_CbContext *pWDA;
9201 tSirHalWowlExitParams *pWowlExitParams;
9202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009203 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009204 if(NULL == pWdaParams)
9205 {
9206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009207 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009208 VOS_ASSERT(0) ;
9209 return ;
9210 }
9211 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9212 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9213
9214 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009215 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009216
9217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9218 vos_mem_free(pWdaParams) ;
9219
Jeff Johnson295189b2012-06-20 16:38:30 -07009220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009221 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009222 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009223 return ;
9224}
Jeff Johnson295189b2012-06-20 16:38:30 -07009225/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009226 * FUNCTION: WDA_WowlExitReqCallback
9227 * Free memory and send WOWL Exit RSP back to PE.
9228 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9229 */
9230void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9231{
9232 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9233 tWDA_CbContext *pWDA;
9234 tSirHalWowlExitParams *pWowlExitParams;
9235
9236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9237 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9238
9239 if(NULL == pWdaParams)
9240 {
9241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9242 "%s: pWdaParams received NULL", __func__);
9243 VOS_ASSERT(0);
9244 return;
9245 }
9246
9247 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9248 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9249 pWowlExitParams->status = wdiStatus;
9250
9251 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9252 {
9253 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9254 vos_mem_free(pWdaParams);
9255 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9256 }
9257
9258 return;
9259}
9260/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009261 * FUNCTION: WDA_ProcessWowlExitReq
9262 * Request to WDI to add WOWL Bcast pattern
9263 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009264VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9265 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009266{
9267 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009268 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009269 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9270 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9271 sizeof(WDI_WowlExitReqParamsType)) ;
9272 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009274 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009275 if(NULL == wdiWowlExitInfo)
9276 {
9277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009278 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009279 VOS_ASSERT(0);
9280 return VOS_STATUS_E_NOMEM;
9281 }
9282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9283 if(NULL == pWdaParams)
9284 {
9285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009286 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009287 VOS_ASSERT(0);
9288 vos_mem_free(wdiWowlExitInfo);
9289 return VOS_STATUS_E_NOMEM;
9290 }
9291
9292 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9293 pWowlExitParams->bssIdx;
9294
Yue Ma7f44bbe2013-04-12 11:47:39 -07009295 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9296 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009297
9298 /* Store param pointer as passed in by caller */
9299 /* store Params pass it to WDI */
9300 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9301 pWdaParams->pWdaContext = pWDA;
9302 pWdaParams->wdaMsgParam = pWowlExitParams;
9303
9304 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009305 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009306
Jeff Johnson43971f52012-07-17 12:26:56 -07009307 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009308 {
9309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9310 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009311 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9313 vos_mem_free(pWdaParams->wdaMsgParam);
9314 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009316 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009317}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009318/*
9319 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9320 * Request to WDI to determine whether a given station is capable of
9321 * using HW-based frame translation
9322 */
9323v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9324 tANI_U8 staIdx)
9325{
9326 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9327}
Jeff Johnson295189b2012-06-20 16:38:30 -07009328/*
9329 * FUNCTION: WDA_NvDownloadReqCallback
9330 * send NV Download RSP back to PE
9331 */
9332void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9333 void* pUserData)
9334{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009335
9336 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9337 tWDA_CbContext *pWDA;
9338
Jeff Johnson295189b2012-06-20 16:38:30 -07009339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009340 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009341
9342 if(NULL == pWdaParams)
9343 {
9344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009345 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009346 VOS_ASSERT(0) ;
9347 return ;
9348 }
9349
9350 pWDA = pWdaParams->pWdaContext;
9351
Jeff Johnson295189b2012-06-20 16:38:30 -07009352 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9354 vos_mem_free(pWdaParams);
9355
Jeff Johnson295189b2012-06-20 16:38:30 -07009356 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009357 return ;
9358}
Jeff Johnson295189b2012-06-20 16:38:30 -07009359/*
9360 * FUNCTION: WDA_ProcessNvDownloadReq
9361 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9362 */
9363VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9364{
9365 /* Initialize the local Variables*/
9366 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9367 v_VOID_t *pNvBuffer=NULL;
9368 v_SIZE_t bufferSize = 0;
9369 WDI_Status status = WDI_STATUS_E_FAILURE;
9370 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009371 tWDA_ReqParams *pWdaParams ;
9372
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009374 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009375 if(NULL == pWDA)
9376 {
9377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009378 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009379 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 return VOS_STATUS_E_FAILURE;
9381 }
9382
9383 /* Get the NV structure base address and size from VOS */
9384 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9386 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009387 if(NULL == wdiNvDownloadReqParam)
9388 {
9389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 VOS_ASSERT(0);
9392 return VOS_STATUS_E_NOMEM;
9393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009394 /* Copy Params to wdiNvDownloadReqParam*/
9395 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9396 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009397
9398 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9399 if(NULL == pWdaParams)
9400 {
9401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009402 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009403 VOS_ASSERT(0);
9404 vos_mem_free(wdiNvDownloadReqParam);
9405 return VOS_STATUS_E_NOMEM;
9406 }
9407
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009409 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9410 pWdaParams->wdaMsgParam = NULL;
9411 pWdaParams->pWdaContext = pWDA;
9412
9413
Jeff Johnson295189b2012-06-20 16:38:30 -07009414 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009415
Jeff Johnson295189b2012-06-20 16:38:30 -07009416 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009417 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9418
Jeff Johnson295189b2012-06-20 16:38:30 -07009419 if(IS_WDI_STATUS_FAILURE(status))
9420 {
9421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9422 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009423 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9424 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009425 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009427}
9428/*
9429 * FUNCTION: WDA_FlushAcReqCallback
9430 * send Flush AC RSP back to TL
9431 */
9432void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9433{
9434 vos_msg_t wdaMsg = {0} ;
9435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9436 tFlushACReq *pFlushACReqParams;
9437 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009439 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 if(NULL == pWdaParams)
9441 {
9442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009443 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 VOS_ASSERT(0) ;
9445 return ;
9446 }
9447
9448 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9449 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9450 if(NULL == pFlushACRspParams)
9451 {
9452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009453 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009455 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009456 return ;
9457 }
9458 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9459 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9460 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9461 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9462 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009463 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009464 vos_mem_free(pWdaParams->wdaMsgParam) ;
9465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9466 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009467 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9468 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9469 // POST message to TL
9470 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9471
Jeff Johnson295189b2012-06-20 16:38:30 -07009472 return ;
9473}
Jeff Johnson295189b2012-06-20 16:38:30 -07009474/*
9475 * FUNCTION: WDA_ProcessFlushAcReq
9476 * Request to WDI to Update the DELBA REQ params.
9477 */
9478VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9479 tFlushACReq *pFlushAcReqParams)
9480{
9481 WDI_Status status = WDI_STATUS_SUCCESS ;
9482 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9483 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9484 sizeof(WDI_FlushAcReqParamsType)) ;
9485 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009486 if(NULL == wdiFlushAcReqParam)
9487 {
9488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009489 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 VOS_ASSERT(0);
9491 return VOS_STATUS_E_NOMEM;
9492 }
9493 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9494 if(NULL == pWdaParams)
9495 {
9496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009498 VOS_ASSERT(0);
9499 vos_mem_free(wdiFlushAcReqParam);
9500 return VOS_STATUS_E_NOMEM;
9501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009503 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009504 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9505 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9506 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9507 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009508 /* Store Flush AC pointer, as this will be used for response */
9509 /* store Params pass it to WDI */
9510 pWdaParams->pWdaContext = pWDA;
9511 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9512 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009513 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9514 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 if(IS_WDI_STATUS_FAILURE(status))
9516 {
9517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9518 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9519 vos_mem_free(pWdaParams->wdaMsgParam) ;
9520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9521 vos_mem_free(pWdaParams) ;
9522 //TODO: respond to TL with failure
9523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009524 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009525}
Jeff Johnson295189b2012-06-20 16:38:30 -07009526/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009527 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 *
9529 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009530void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009531{
9532 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9533 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009534 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009535
9536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009537 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009538 if(NULL == pWdaParams)
9539 {
9540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009541 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009542 VOS_ASSERT(0) ;
9543 return ;
9544 }
9545 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9546 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9547 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9548 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9549 {
9550 pWDA->wdaAmpSessionOn = VOS_FALSE;
9551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009552 vos_mem_free(pWdaParams->wdaMsgParam) ;
9553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9554 vos_mem_free(pWdaParams) ;
9555 /*
9556 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9557 * param here
9558 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 return ;
9560}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009561/*
9562 * FUNCTION: WDA_BtAmpEventReqCallback
9563 * Free memory.
9564 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9565 */
9566void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9567{
9568 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9569 tWDA_CbContext *pWDA;
9570 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009571
Yue Ma7f44bbe2013-04-12 11:47:39 -07009572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9573 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9574
9575 if(NULL == pWdaParams)
9576 {
9577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9578 "%s: pWdaParams received NULL", __func__);
9579 VOS_ASSERT(0);
9580 return;
9581 }
9582
9583 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9584 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9585
9586 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9587 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9588 {
9589 pWDA->wdaAmpSessionOn = VOS_FALSE;
9590 }
9591
9592 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9593 {
9594 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9595 vos_mem_free(pWdaParams->wdaMsgParam);
9596 vos_mem_free(pWdaParams);
9597 }
9598
9599 return;
9600}
Jeff Johnson295189b2012-06-20 16:38:30 -07009601/*
9602 * FUNCTION: WDA_ProcessBtAmpEventReq
9603 * Request to WDI to Update with BT AMP events.
9604 */
9605VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9606 tSmeBtAmpEvent *pBtAmpEventParams)
9607{
9608 WDI_Status status = WDI_STATUS_SUCCESS ;
9609 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9610 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9611 sizeof(WDI_BtAmpEventParamsType)) ;
9612 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009614 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009615 if(NULL == wdiBtAmpEventParam)
9616 {
9617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 VOS_ASSERT(0);
9620 return VOS_STATUS_E_NOMEM;
9621 }
9622 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9623 if(NULL == pWdaParams)
9624 {
9625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009626 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009627 VOS_ASSERT(0);
9628 vos_mem_free(wdiBtAmpEventParam);
9629 return VOS_STATUS_E_NOMEM;
9630 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009631 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9632 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009633 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9634 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009635 /* Store BT AMP event pointer, as this will be used for response */
9636 /* store Params pass it to WDI */
9637 pWdaParams->pWdaContext = pWDA;
9638 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9639 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009640 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009641 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009642 if(IS_WDI_STATUS_FAILURE(status))
9643 {
9644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9645 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9646 vos_mem_free(pWdaParams->wdaMsgParam) ;
9647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9648 vos_mem_free(pWdaParams) ;
9649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9651 {
9652 pWDA->wdaAmpSessionOn = VOS_TRUE;
9653 }
9654 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009655}
9656
Jeff Johnson295189b2012-06-20 16:38:30 -07009657/*
9658 * FUNCTION: WDA_FTMCommandReqCallback
9659 * Handle FTM CMD response came from HAL
9660 * Route responce to HDD FTM
9661 */
9662void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9663 void *usrData)
9664{
9665 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009666 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9667 {
9668 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309669 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009670 return;
9671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009672 /* Release Current FTM Command Request */
9673 vos_mem_free(pWDA->wdaFTMCmdReq);
9674 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009675 /* Post FTM Responce to HDD FTM */
9676 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 return;
9678}
Jeff Johnson295189b2012-06-20 16:38:30 -07009679/*
9680 * FUNCTION: WDA_ProcessFTMCommand
9681 * Send FTM command to WDI
9682 */
9683VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9684 tPttMsgbuffer *pPTTFtmCmd)
9685{
9686 WDI_Status status = WDI_STATUS_SUCCESS;
9687 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009688 ftmCMDReq = (WDI_FTMCommandReqType *)
9689 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9690 if(NULL == ftmCMDReq)
9691 {
9692 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9693 "WDA FTM Command buffer alloc fail");
9694 return VOS_STATUS_E_NOMEM;
9695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9697 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009698 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009699 /* Send command to WDI */
9700 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 return status;
9702}
Jeff Johnsone7245742012-09-05 17:12:55 -07009703#ifdef FEATURE_OEM_DATA_SUPPORT
9704/*
9705 * FUNCTION: WDA_StartOemDataReqCallback
9706 *
9707 */
9708void WDA_StartOemDataReqCallback(
9709 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9710 void* pUserData)
9711{
9712 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009713 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9714 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009715 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009716
Jeff Johnsone7245742012-09-05 17:12:55 -07009717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009718 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009719
9720 if(NULL == pWdaParams)
9721 {
9722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009723 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009724 VOS_ASSERT(0) ;
9725 return ;
9726 }
9727 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9728
Jeff Johnsone7245742012-09-05 17:12:55 -07009729 if(NULL == pWDA)
9730 {
9731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009732 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009733 VOS_ASSERT(0);
9734 return ;
9735 }
9736
9737 /*
9738 * Allocate memory for response params sent to PE
9739 */
9740 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9741
9742 // Check if memory is allocated for OemdataMeasRsp Params.
9743 if(NULL == pOemDataRspParams)
9744 {
9745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9746 "OEM DATA WDA callback alloc fail");
9747 VOS_ASSERT(0) ;
9748 return;
9749 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009750
Jeff Johnsone7245742012-09-05 17:12:55 -07009751 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9753 vos_mem_free(pWdaParams->wdaMsgParam);
9754 vos_mem_free(pWdaParams) ;
9755
Jeff Johnsone7245742012-09-05 17:12:55 -07009756 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009757 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009758 * Also, here success always means that we have atleast one BSSID.
9759 */
9760 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9761
9762 //enable Tx
9763 status = WDA_ResumeDataTx(pWDA);
9764 if(status != VOS_STATUS_SUCCESS)
9765 {
9766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9767 }
9768 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9769 return ;
9770}
9771/*
9772 * FUNCTION: WDA_ProcessStartOemDataReq
9773 * Send Start Oem Data Req to WDI
9774 */
9775VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9776 tStartOemDataReq *pOemDataReqParams)
9777{
9778 WDI_Status status = WDI_STATUS_SUCCESS;
9779 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009780 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009781
9782 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9783
9784 if(NULL == wdiOemDataReqParams)
9785 {
9786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009787 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009788 VOS_ASSERT(0);
9789 return VOS_STATUS_E_NOMEM;
9790 }
9791
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009792 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9793 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9794 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9795 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009796
9797 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9798
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009799 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9800 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009801 {
9802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009803 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009804 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009805 vos_mem_free(pOemDataReqParams);
9806 VOS_ASSERT(0);
9807 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009808 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009809
Bernald44a1ae2013-01-09 08:30:39 -08009810 pWdaParams->pWdaContext = (void*)pWDA;
9811 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9812 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009813
9814 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9815 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009816
9817 if(IS_WDI_STATUS_FAILURE(status))
9818 {
9819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9820 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9822 vos_mem_free(pWdaParams->wdaMsgParam);
9823 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009824 }
9825 return CONVERT_WDI2VOS_STATUS(status) ;
9826}
9827#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009828/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009829 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009830 *
9831 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009832void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009833{
9834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009836 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009837 if(NULL == pWdaParams)
9838 {
9839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009840 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009841 VOS_ASSERT(0) ;
9842 return ;
9843 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009844
9845 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9846 vos_mem_free(pWdaParams->wdaMsgParam);
9847 vos_mem_free(pWdaParams);
9848
9849 return ;
9850}
9851/*
9852 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9853 * Free memory.
9854 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
9855 */
9856void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
9857{
9858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9859
9860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9861 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9862
9863 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 {
Yue Ma7f44bbe2013-04-12 11:47:39 -07009865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9866 "%s: pWdaParams received NULL", __func__);
9867 VOS_ASSERT(0);
9868 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009869 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009870
9871 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009872 {
9873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009874 vos_mem_free(pWdaParams->wdaMsgParam);
9875 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009876 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009877
9878 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009879}
Jeff Johnson295189b2012-06-20 16:38:30 -07009880#ifdef WLAN_FEATURE_GTK_OFFLOAD
9881/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009882 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 *
9884 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009885void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009886 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009887{
9888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9889
9890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009891 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009892
9893 VOS_ASSERT(NULL != pWdaParams);
9894
9895 vos_mem_free(pWdaParams->wdaMsgParam) ;
9896 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9897 vos_mem_free(pWdaParams) ;
9898
9899 //print a msg, nothing else to do
9900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009901 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009902
9903 return ;
9904}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009905/*
9906 * FUNCTION: WDA_GTKOffloadReqCallback
9907 * Free memory.
9908 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
9909 */
9910void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9911{
9912 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009913
Yue Ma7f44bbe2013-04-12 11:47:39 -07009914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9915 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9916
9917 if(NULL == pWdaParams)
9918 {
9919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9920 "%s: pWdaParams received NULL", __func__);
9921 VOS_ASSERT(0);
9922 return;
9923 }
9924
9925 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9926 {
9927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9928 vos_mem_free(pWdaParams->wdaMsgParam);
9929 vos_mem_free(pWdaParams);
9930 }
9931
9932 return;
9933}
Jeff Johnson295189b2012-06-20 16:38:30 -07009934/*
9935 * FUNCTION: WDA_ProcessGTKOffloadReq
9936 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9937 * to broadcast traffic (sta mode).
9938 */
9939VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9940 tpSirGtkOffloadParams pGtkOffloadParams)
9941{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309942 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009943 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9944 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9945 sizeof(WDI_GtkOffloadReqMsg)) ;
9946 tWDA_ReqParams *pWdaParams ;
9947
9948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009949 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009950
9951 if(NULL == wdiGtkOffloadReqMsg)
9952 {
9953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009954 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009955 VOS_ASSERT(0);
9956 return VOS_STATUS_E_NOMEM;
9957 }
9958
9959 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9960 if(NULL == pWdaParams)
9961 {
9962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009963 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009964 VOS_ASSERT(0);
9965 vos_mem_free(wdiGtkOffloadReqMsg);
9966 return VOS_STATUS_E_NOMEM;
9967 }
9968
9969 //
9970 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9971 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009972
9973 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309974 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009975
Jeff Johnson295189b2012-06-20 16:38:30 -07009976 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9977 // Copy KCK
9978 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9979 // Copy KEK
9980 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9981 // Copy KeyReplayCounter
9982 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9983 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9984
Yue Ma7f44bbe2013-04-12 11:47:39 -07009985 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
9986 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009987
Jeff Johnson295189b2012-06-20 16:38:30 -07009988
9989 /* Store Params pass it to WDI */
9990 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
9991 pWdaParams->pWdaContext = pWDA;
9992 /* Store param pointer as passed in by caller */
9993 pWdaParams->wdaMsgParam = pGtkOffloadParams;
9994
Yue Ma7f44bbe2013-04-12 11:47:39 -07009995 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009996
9997 if(IS_WDI_STATUS_FAILURE(status))
9998 {
9999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10000 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10002 vos_mem_free(pWdaParams->wdaMsgParam);
10003 vos_mem_free(pWdaParams);
10004 }
10005
10006 return CONVERT_WDI2VOS_STATUS(status) ;
10007}
10008
10009/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010010 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010011 *
10012 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010013void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010014 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010015{
10016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10017 tWDA_CbContext *pWDA;
10018 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010019 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 vos_msg_t vosMsg;
10021
10022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010023 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010024
10025 VOS_ASSERT(NULL != pWdaParams);
10026
10027 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10028 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10029
10030 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10031 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10032
10033 /* Message Header */
10034 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010035 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010036
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010037 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10038 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10039 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10040 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10041 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010042
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010043 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10044 pwdiGtkOffloadGetInfoRsparams->bssId,
10045 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 /* VOS message wrapper */
10047 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10048 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10049 vosMsg.bodyval = 0;
10050
10051 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10052 {
10053 /* free the mem and return */
10054 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10055 }
10056
10057 vos_mem_free(pWdaParams->wdaMsgParam) ;
10058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10059 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010060
10061 return;
10062}
10063/*
10064 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10065 * Free memory and send RSP back to SME.
10066 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10067 */
10068void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10069{
10070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10071 vos_msg_t vosMsg;
10072
10073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10074 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10075
10076 if(NULL == pWdaParams)
10077 {
10078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10079 "%s: pWdaParams received NULL", __func__);
10080 VOS_ASSERT(0);
10081 return;
10082 }
10083
10084 /* VOS message wrapper */
10085 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10086 vosMsg.bodyptr = NULL;
10087 vosMsg.bodyval = 0;
10088
10089 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10090 {
10091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10092 vos_mem_free(pWdaParams->wdaMsgParam);
10093 vos_mem_free(pWdaParams);
10094 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10095 }
10096
10097 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010098}
10099#endif
10100
10101/*
10102 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10103 * Request to WDI to set Tx Per Tracking configurations
10104 */
10105VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10106{
10107 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010108 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010109 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10110 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10111 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10112 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010114 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010115 if(NULL == pwdiSetTxPerTrackingReqParams)
10116 {
10117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 vos_mem_free(pTxPerTrackingParams);
10120 VOS_ASSERT(0);
10121 return VOS_STATUS_E_NOMEM;
10122 }
10123 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10124 if(NULL == pWdaParams)
10125 {
10126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010128 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10129 vos_mem_free(pTxPerTrackingParams);
10130 VOS_ASSERT(0);
10131 return VOS_STATUS_E_NOMEM;
10132 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010133 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10134 pTxPerTrackingParams->ucTxPerTrackingEnable;
10135 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10136 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10137 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10138 pTxPerTrackingParams->ucTxPerTrackingRatio;
10139 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10140 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010141 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10142 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 /* Store param pointer as passed in by caller */
10144 /* store Params pass it to WDI
10145 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10146 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10147 pWdaParams->pWdaContext = pWDA;
10148 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010149 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010150 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010151 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 {
10153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10154 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010155 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 vos_mem_free(pWdaParams->wdaMsgParam) ;
10157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10158 vos_mem_free(pWdaParams) ;
10159 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010160 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010161
10162}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010163/*
10164 * FUNCTION: WDA_HALDumpCmdCallback
10165 * Send the VOS complete .
10166 */
10167void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10168 void* pUserData)
10169{
10170 tANI_U8 *buffer = NULL;
10171 tWDA_CbContext *pWDA = NULL;
10172 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010173 if(NULL == pWdaParams)
10174 {
10175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010176 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010177 VOS_ASSERT(0) ;
10178 return ;
10179 }
10180
10181 pWDA = pWdaParams->pWdaContext;
10182 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010183 if(wdiRspParams->usBufferLen > 0)
10184 {
10185 /*Copy the Resp data to UMAC supplied buffer*/
10186 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010188 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10189 vos_mem_free(pWdaParams);
10190
10191 /* Indicate VOSS about the start complete */
10192 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010193 return ;
10194}
10195
Jeff Johnson295189b2012-06-20 16:38:30 -070010196/*
10197 * FUNCTION: WDA_ProcessHALDumpCmdReq
10198 * Send Dump command to WDI
10199 */
10200VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10201 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10202 tANI_U32 arg4, tANI_U8 *pBuffer)
10203{
10204 WDI_Status status = WDI_STATUS_SUCCESS;
10205 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10206 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10207 tWDA_ReqParams *pWdaParams ;
10208 pVosContextType pVosContext = NULL;
10209 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010210 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10211 (void *)pMac);
10212
10213 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10214 if(NULL == pWdaParams)
10215 {
10216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010218 return VOS_STATUS_E_NOMEM;
10219 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010220 /* Allocate memory WDI request structure*/
10221 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10222 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10223 if(NULL == wdiHALDumpCmdReqParam)
10224 {
10225 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10226 "WDA HAL DUMP Command buffer alloc fail");
10227 vos_mem_free(pWdaParams);
10228 return WDI_STATUS_E_FAILURE;
10229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010230 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010231 /* Extract the arguments */
10232 wdiHalDumpCmdInfo->command = cmd;
10233 wdiHalDumpCmdInfo->argument1 = arg1;
10234 wdiHalDumpCmdInfo->argument2 = arg2;
10235 wdiHalDumpCmdInfo->argument3 = arg3;
10236 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010237 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010238 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10239
10240 /* Response message will be passed through the buffer */
10241 pWdaParams->wdaMsgParam = (void *)pBuffer;
10242
10243 /* store Params pass it to WDI */
10244 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 /* Send command to WDI */
10246 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010247 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010248 if ( vStatus != VOS_STATUS_SUCCESS )
10249 {
10250 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10251 {
10252 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010253 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 }
10255 else
10256 {
10257 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010258 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010259 }
10260 VOS_ASSERT(0);
10261 }
10262 return status;
10263}
Jeff Johnson295189b2012-06-20 16:38:30 -070010264#ifdef WLAN_FEATURE_GTK_OFFLOAD
10265/*
10266 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10267 * Request to WDI to get GTK Offload Information
10268 */
10269VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10270 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10271{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010272 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010273 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10274 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10275 tWDA_ReqParams *pWdaParams ;
10276
10277 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10278 {
10279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 VOS_ASSERT(0);
10282 return VOS_STATUS_E_NOMEM;
10283 }
10284
10285 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10286 if(NULL == pWdaParams)
10287 {
10288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010289 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010290 VOS_ASSERT(0);
10291 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10292 return VOS_STATUS_E_NOMEM;
10293 }
10294
Yue Ma7f44bbe2013-04-12 11:47:39 -070010295 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10296 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010297
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 /* Store Params pass it to WDI */
10299 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10300 pWdaParams->pWdaContext = pWDA;
10301 /* Store param pointer as passed in by caller */
10302 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10303
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010304 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010305 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010306
Yue Ma7f44bbe2013-04-12 11:47:39 -070010307 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010308
10309 if(IS_WDI_STATUS_FAILURE(status))
10310 {
10311 /* failure returned by WDI API */
10312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10313 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10315 vos_mem_free(pWdaParams) ;
10316 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10317 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10318 }
10319
10320 return CONVERT_WDI2VOS_STATUS(status) ;
10321}
10322#endif // WLAN_FEATURE_GTK_OFFLOAD
10323
10324/*
10325 * -------------------------------------------------------------------------
10326 * DATA interface with WDI for Mgmt Frames
10327 * -------------------------------------------------------------------------
10328 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010329/*
10330 * FUNCTION: WDA_TxComplete
10331 * Callback function for the WDA_TxPacket
10332 */
10333VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10334 VOS_STATUS status )
10335{
10336
10337 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10338 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010339 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010340
10341 if(NULL == wdaContext)
10342 {
10343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10344 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010345 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010346 VOS_ASSERT(0);
10347 return VOS_STATUS_E_FAILURE;
10348 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010349
10350 /*Check if frame was timed out or not*/
10351 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10352 (v_PVOID_t)&uUserData);
10353
10354 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10355 {
10356 /*Discard frame - no further processing is needed*/
10357 vos_pkt_return_packet(pData);
10358 return VOS_STATUS_SUCCESS;
10359 }
10360
Jeff Johnson295189b2012-06-20 16:38:30 -070010361 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10362 if( NULL!=wdaContext->pTxCbFunc)
10363 {
10364 /*check if packet is freed already*/
10365 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10366 {
10367 wdaContext->pTxCbFunc(pMac, pData);
10368 }
10369 else
10370 {
10371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010372 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010373 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010374 //Return from here since we reaching here because the packet already timeout
10375 return status;
10376 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010377 }
10378
10379 /*
10380 * Trigger the event to bring the HAL TL Tx complete function to come
10381 * out of wait
10382 * Let the coe above to complete the packet first. When this event is set,
10383 * the thread waiting for the event may run and set Vospacket_freed causing the original
10384 * packet not being freed.
10385 */
10386 status = vos_event_set(&wdaContext->txFrameEvent);
10387 if(!VOS_IS_STATUS_SUCCESS(status))
10388 {
10389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10390 "NEW VOS Event Set failed - status = %d \n", status);
10391 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010392 return status;
10393}
Jeff Johnson295189b2012-06-20 16:38:30 -070010394/*
10395 * FUNCTION: WDA_TxPacket
10396 * Forward TX management frame to WDI
10397 */
10398VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10399 void *pFrmBuf,
10400 tANI_U16 frmLen,
10401 eFrameType frmType,
10402 eFrameTxDir txDir,
10403 tANI_U8 tid,
10404 pWDATxRxCompFunc pCompFunc,
10405 void *pData,
10406 pWDAAckFnTxComp pAckTxComp,
10407 tANI_U8 txFlag)
10408{
10409 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10410 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10411 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10412 tANI_U8 eventIdx = 0;
10413 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10414 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010415 if((NULL == pWDA)||(NULL == pFrmBuf))
10416 {
10417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010418 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010419 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010420 VOS_ASSERT(0);
10421 return VOS_STATUS_E_FAILURE;
10422 }
10423
10424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010425 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010426 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10427 if(NULL == pMac)
10428 {
10429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010430 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010431 VOS_ASSERT(0);
10432 return VOS_STATUS_E_FAILURE;
10433 }
10434
10435
10436
10437 /* store the call back function in WDA context */
10438 pWDA->pTxCbFunc = pCompFunc;
10439 /* store the call back for the function of ackTxComplete */
10440 if( pAckTxComp )
10441 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010442 if( NULL != pWDA->pAckTxCbFunc )
10443 {
10444 /* Already TxComp is active no need to active again */
10445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10446 "There is already one request pending for tx complete\n");
10447 pWDA->pAckTxCbFunc( pMac, 0);
10448 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010449
Jeff Johnsone7245742012-09-05 17:12:55 -070010450 if( VOS_STATUS_SUCCESS !=
10451 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10452 {
10453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10454 "Tx Complete timeout Timer Stop Failed ");
10455 }
10456 else
10457 {
10458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010459 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010460 }
10461 }
10462
10463 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
10464 pWDA->pAckTxCbFunc = pAckTxComp;
10465 if( VOS_STATUS_SUCCESS !=
10466 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
10467 {
10468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10469 "Tx Complete Timer Start Failed ");
10470 pWDA->pAckTxCbFunc = NULL;
10471 return eHAL_STATUS_FAILURE;
10472 }
10473 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010474 /* Reset the event to be not signalled */
10475 status = vos_event_reset(&pWDA->txFrameEvent);
10476 if(!VOS_IS_STATUS_SUCCESS(status))
10477 {
10478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10479 "VOS Event reset failed - status = %d\n",status);
10480 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
10481 if( pAckTxComp )
10482 {
10483 pWDA->pAckTxCbFunc = NULL;
10484 if( VOS_STATUS_SUCCESS !=
10485 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10486 {
10487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10488 "Tx Complete timeout Timer Stop Failed ");
10489 }
10490 }
10491 return VOS_STATUS_E_FAILURE;
10492 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010493
10494 /* If Peer Sta mask is set don't overwrite to self sta */
10495 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070010496 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010497 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070010498 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010499 else
10500 {
Ganesh K08bce952012-12-13 15:04:41 -080010501 /* Get system role, use the self station if in unknown role or STA role */
10502 systemRole = wdaGetGlobalSystemRole(pMac);
10503 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
10504 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080010505#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080010506 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010507#endif
Ganesh K08bce952012-12-13 15:04:41 -080010508 ))
10509 {
10510 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
10511 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080010512 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010513
Jeff Johnsone7245742012-09-05 17:12:55 -070010514 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
10515 disassoc frame reaches the HW, HAL has already deleted the peer station */
10516 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070010517 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080010518 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070010519 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010520 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010521 /*Send Probe request frames on self sta idx*/
10522 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070010523 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010524 /* Since we donot want probe responses to be retried, send probe responses
10525 through the NO_ACK queues */
10526 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
10527 {
10528 //probe response is sent out using self station and no retries options.
10529 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
10530 }
10531 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
10532 {
10533 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
10534 }
10535 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010536 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
10537
10538 /*Set frame tag to 0
10539 We will use the WDA user data in order to tag a frame as expired*/
10540 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10541 (v_PVOID_t)0);
10542
10543
10544 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
10545 frmLen, ucTypeSubType, tid,
10546 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
10547 {
10548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10549 "Sending Mgmt Frame failed - status = %d\n", status);
10550 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
10551 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
10552 if( pAckTxComp )
10553 {
10554 pWDA->pAckTxCbFunc = NULL;
10555 if( VOS_STATUS_SUCCESS !=
10556 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10557 {
10558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10559 "Tx Complete timeout Timer Stop Failed ");
10560 }
10561 }
10562 return VOS_STATUS_E_FAILURE;
10563 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010564 /*
10565 * Wait for the event to be set by the TL, to get the response of TX
10566 * complete, this event should be set by the Callback function called by TL
10567 */
10568 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
10569 &eventIdx);
10570 if(!VOS_IS_STATUS_SUCCESS(status))
10571 {
10572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10573 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010574 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010575 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
10576 after the packet gets completed(packet freed once)*/
10577
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010578 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070010579 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010580
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010581 /*Tag Frame as timed out for later deletion*/
10582 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10583 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
10584
Jeff Johnson295189b2012-06-20 16:38:30 -070010585 /* check whether the packet was freed already,so need not free again when
10586 * TL calls the WDA_Txcomplete routine
10587 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010588 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
10589 /*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 -070010590 {
10591 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010592 } */
10593
Jeff Johnson295189b2012-06-20 16:38:30 -070010594 if( pAckTxComp )
10595 {
10596 pWDA->pAckTxCbFunc = NULL;
10597 if( VOS_STATUS_SUCCESS !=
10598 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10599 {
10600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10601 "Tx Complete timeout Timer Stop Failed ");
10602 }
10603 }
10604 status = VOS_STATUS_E_FAILURE;
10605 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010606 return status;
10607}
Jeff Johnson295189b2012-06-20 16:38:30 -070010608/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053010609 * FUNCTION: WDA_ProcessDHCPStartInd
10610 * Forward DHCP Start to WDI
10611 */
10612static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
10613 tAniDHCPInd *dhcpStartInd)
10614{
10615 WDI_Status status;
10616 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10617 if (NULL == wdiDHCPInd)
10618 {
10619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10620 "%s: VOS MEM Alloc Failure", __func__);
10621 VOS_ASSERT(0);
10622 vos_mem_free(dhcpStartInd);
10623 return VOS_STATUS_E_NOMEM;
10624 }
10625
10626 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
10627 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
10628 sizeof(tSirMacAddr));
10629
10630 status = WDI_dhcpStartInd(wdiDHCPInd);
10631
10632 if (IS_WDI_STATUS_FAILURE(status))
10633 {
10634 vos_mem_free(wdiDHCPInd);
10635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10636 "DHCP Start Indication failed");
10637 }
10638 vos_mem_free(dhcpStartInd);
10639 return CONVERT_WDI2VOS_STATUS(status) ;
10640}
10641
10642 /*
10643 * FUNCTION: WDA_ProcessDHCPStopInd
10644 * Forward DHCP Stop to WDI
10645 */
10646 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
10647 tAniDHCPInd *dhcpStopInd)
10648 {
10649 WDI_Status status;
10650 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10651 if (NULL == wdiDHCPInd)
10652 {
10653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10654 "%s: VOS MEM Alloc Failure", __func__);
10655 VOS_ASSERT(0);
10656 vos_mem_free(dhcpStopInd);
10657 return VOS_STATUS_E_NOMEM;
10658 }
10659 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
10660 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
10661 status = WDI_dhcpStopInd(wdiDHCPInd);
10662 if (IS_WDI_STATUS_FAILURE(status))
10663 {
10664 vos_mem_free(wdiDHCPInd);
10665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10666 "DHCP Start Indication failed");
10667 }
10668 vos_mem_free(dhcpStopInd);
10669 return CONVERT_WDI2VOS_STATUS(status) ;
10670 }
10671
10672/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010673 * FUNCTION: WDA_McProcessMsg
10674 * Trigger DAL-AL to start CFG download
10675 */
10676VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10677{
10678 VOS_STATUS status = VOS_STATUS_SUCCESS;
10679 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010680 if(NULL == pMsg)
10681 {
10682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010683 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010684 VOS_ASSERT(0);
10685 return VOS_STATUS_E_FAILURE;
10686 }
10687
10688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010689 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010690
10691 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10692 if(NULL == pWDA )
10693 {
10694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010695 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010696 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010697 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010698 return VOS_STATUS_E_FAILURE;
10699 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010700 /* Process all the WDA messages.. */
10701 switch( pMsg->type )
10702 {
10703 case WNI_CFG_DNLD_REQ:
10704 {
10705 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010706 /* call WDA complete event if config download success */
10707 if( VOS_IS_STATUS_SUCCESS(status) )
10708 {
10709 vos_WDAComplete_cback(pVosContext);
10710 }
10711 else
10712 {
10713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10714 "WDA Config Download failure" );
10715 }
10716 break ;
10717 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010718 /*
10719 * Init SCAN request from PE, convert it into DAL format
10720 * and send it to DAL
10721 */
10722 case WDA_INIT_SCAN_REQ:
10723 {
10724 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10725 break ;
10726 }
10727 /* start SCAN request from PE */
10728 case WDA_START_SCAN_REQ:
10729 {
10730 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10731 break ;
10732 }
10733 /* end SCAN request from PE */
10734 case WDA_END_SCAN_REQ:
10735 {
10736 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10737 break ;
10738 }
10739 /* end SCAN request from PE */
10740 case WDA_FINISH_SCAN_REQ:
10741 {
10742 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10743 break ;
10744 }
10745 /* join request from PE */
10746 case WDA_CHNL_SWITCH_REQ:
10747 {
10748 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10749 {
10750 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10751 }
10752 else
10753 {
10754 WDA_ProcessChannelSwitchReq(pWDA,
10755 (tSwitchChannelParams*)pMsg->bodyptr) ;
10756 }
10757 break ;
10758 }
10759 /* ADD BSS request from PE */
10760 case WDA_ADD_BSS_REQ:
10761 {
10762 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10763 break ;
10764 }
10765 case WDA_ADD_STA_REQ:
10766 {
10767 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10768 break ;
10769 }
10770 case WDA_DELETE_BSS_REQ:
10771 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10773 break ;
10774 }
10775 case WDA_DELETE_STA_REQ:
10776 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010777 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10778 break ;
10779 }
10780 case WDA_CONFIG_PARAM_UPDATE_REQ:
10781 {
10782 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10783 break ;
10784 }
10785 case WDA_SET_BSSKEY_REQ:
10786 {
10787 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10788 break ;
10789 }
10790 case WDA_SET_STAKEY_REQ:
10791 {
10792 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10793 break ;
10794 }
10795 case WDA_SET_STA_BCASTKEY_REQ:
10796 {
10797 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10798 break ;
10799 }
10800 case WDA_REMOVE_BSSKEY_REQ:
10801 {
10802 WDA_ProcessRemoveBssKeyReq(pWDA,
10803 (tRemoveBssKeyParams *)pMsg->bodyptr);
10804 break ;
10805 }
10806 case WDA_REMOVE_STAKEY_REQ:
10807 {
10808 WDA_ProcessRemoveStaKeyReq(pWDA,
10809 (tRemoveStaKeyParams *)pMsg->bodyptr);
10810 break ;
10811 }
10812 case WDA_REMOVE_STA_BCASTKEY_REQ:
10813 {
10814 /* TODO: currently UMAC is not sending this request, Add the code for
10815 handling this request when UMAC supports */
10816 break;
10817 }
10818#ifdef FEATURE_WLAN_CCX
10819 case WDA_TSM_STATS_REQ:
10820 {
10821 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10822 break;
10823 }
10824#endif
10825 case WDA_UPDATE_EDCA_PROFILE_IND:
10826 {
10827 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10828 break;
10829 }
10830 case WDA_ADD_TS_REQ:
10831 {
10832 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10833 break;
10834 }
10835 case WDA_DEL_TS_REQ:
10836 {
10837 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
10838 break;
10839 }
10840 case WDA_ADDBA_REQ:
10841 {
10842 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
10843 break;
10844 }
10845 case WDA_DELBA_IND:
10846 {
10847 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
10848 break;
10849 }
10850 case WDA_SET_LINK_STATE:
10851 {
10852 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
10853 break;
10854 }
10855 case WDA_GET_STATISTICS_REQ:
10856 {
10857 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
10858 break;
10859 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080010860#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
10861 case WDA_GET_ROAM_RSSI_REQ:
10862 {
10863 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
10864 break;
10865 }
10866#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010867 case WDA_PWR_SAVE_CFG:
10868 {
10869 if(pWDA->wdaState == WDA_READY_STATE)
10870 {
10871 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
10872 }
10873 else
10874 {
10875 if(NULL != pMsg->bodyptr)
10876 {
10877 vos_mem_free(pMsg->bodyptr);
10878 }
10879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10880 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
10881 }
10882 break;
10883 }
10884 case WDA_ENTER_IMPS_REQ:
10885 {
10886 if(pWDA->wdaState == WDA_READY_STATE)
10887 {
10888 WDA_ProcessEnterImpsReq(pWDA);
10889 }
10890 else
10891 {
10892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10893 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10894 }
10895 break;
10896 }
10897 case WDA_EXIT_IMPS_REQ:
10898 {
10899 if(pWDA->wdaState == WDA_READY_STATE)
10900 {
10901 WDA_ProcessExitImpsReq(pWDA);
10902 }
10903 else
10904 {
10905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10906 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10907 }
10908 break;
10909 }
10910 case WDA_ENTER_BMPS_REQ:
10911 {
10912 if(pWDA->wdaState == WDA_READY_STATE)
10913 {
10914 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
10915 }
10916 else
10917 {
10918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10919 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10920 }
10921 break;
10922 }
10923 case WDA_EXIT_BMPS_REQ:
10924 {
10925 if(pWDA->wdaState == WDA_READY_STATE)
10926 {
10927 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
10928 }
10929 else
10930 {
10931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10932 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10933 }
10934 break;
10935 }
10936 case WDA_ENTER_UAPSD_REQ:
10937 {
10938 if(pWDA->wdaState == WDA_READY_STATE)
10939 {
10940 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
10941 }
10942 else
10943 {
10944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10945 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10946 }
10947 break;
10948 }
10949 case WDA_EXIT_UAPSD_REQ:
10950 {
10951 if(pWDA->wdaState == WDA_READY_STATE)
10952 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010953 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010954 }
10955 else
10956 {
10957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10958 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10959 }
10960 break;
10961 }
10962 case WDA_UPDATE_UAPSD_IND:
10963 {
10964 if(pWDA->wdaState == WDA_READY_STATE)
10965 {
10966 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
10967 }
10968 else
10969 {
10970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10971 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
10972 }
10973 break;
10974 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010975 case WDA_REGISTER_PE_CALLBACK :
10976 {
10977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10978 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10979 /*TODO: store the PE callback */
10980 /* Do Nothing? MSG Body should be freed at here */
10981 if(NULL != pMsg->bodyptr)
10982 {
10983 vos_mem_free(pMsg->bodyptr);
10984 }
10985 break;
10986 }
10987 case WDA_SYS_READY_IND :
10988 {
10989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10990 "Handling msg type WDA_SYS_READY_IND " );
10991 pWDA->wdaState = WDA_READY_STATE;
10992 if(NULL != pMsg->bodyptr)
10993 {
10994 vos_mem_free(pMsg->bodyptr);
10995 }
10996 break;
10997 }
10998 case WDA_BEACON_FILTER_IND :
10999 {
11000 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11001 break;
11002 }
11003 case WDA_BTC_SET_CFG:
11004 {
11005 /*TODO: handle this while dealing with BTC */
11006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11007 "Handling msg type WDA_BTC_SET_CFG " );
11008 /* Do Nothing? MSG Body should be freed at here */
11009 if(NULL != pMsg->bodyptr)
11010 {
11011 vos_mem_free(pMsg->bodyptr);
11012 }
11013 break;
11014 }
11015 case WDA_SIGNAL_BT_EVENT:
11016 {
11017 /*TODO: handle this while dealing with BTC */
11018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11019 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11020 /* Do Nothing? MSG Body should be freed at here */
11021 if(NULL != pMsg->bodyptr)
11022 {
11023 vos_mem_free(pMsg->bodyptr);
11024 }
11025 break;
11026 }
11027 case WDA_CFG_RXP_FILTER_REQ:
11028 {
11029 WDA_ProcessConfigureRxpFilterReq(pWDA,
11030 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11031 break;
11032 }
11033 case WDA_SET_HOST_OFFLOAD:
11034 {
11035 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11036 break;
11037 }
11038 case WDA_SET_KEEP_ALIVE:
11039 {
11040 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11041 break;
11042 }
11043#ifdef WLAN_NS_OFFLOAD
11044 case WDA_SET_NS_OFFLOAD:
11045 {
11046 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11047 break;
11048 }
11049#endif //WLAN_NS_OFFLOAD
11050 case WDA_ADD_STA_SELF_REQ:
11051 {
11052 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11053 break;
11054 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 case WDA_DEL_STA_SELF_REQ:
11056 {
11057 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11058 break;
11059 }
11060 case WDA_WOWL_ADD_BCAST_PTRN:
11061 {
11062 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11063 break;
11064 }
11065 case WDA_WOWL_DEL_BCAST_PTRN:
11066 {
11067 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11068 break;
11069 }
11070 case WDA_WOWL_ENTER_REQ:
11071 {
11072 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11073 break;
11074 }
11075 case WDA_WOWL_EXIT_REQ:
11076 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011077 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011078 break;
11079 }
11080 case WDA_TL_FLUSH_AC_REQ:
11081 {
11082 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11083 break;
11084 }
11085 case WDA_SIGNAL_BTAMP_EVENT:
11086 {
11087 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11088 break;
11089 }
11090#ifdef WDA_UT
11091 case WDA_WDI_EVENT_MSG:
11092 {
11093 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11094 break ;
11095 }
11096#endif
11097 case WDA_UPDATE_BEACON_IND:
11098 {
11099 WDA_ProcessUpdateBeaconParams(pWDA,
11100 (tUpdateBeaconParams *)pMsg->bodyptr);
11101 break;
11102 }
11103 case WDA_SEND_BEACON_REQ:
11104 {
11105 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11106 break;
11107 }
11108 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11109 {
11110 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11111 (tSendProbeRespParams *)pMsg->bodyptr);
11112 break;
11113 }
11114#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11115 case WDA_SET_MAX_TX_POWER_REQ:
11116 {
11117 WDA_ProcessSetMaxTxPowerReq(pWDA,
11118 (tMaxTxPowerParams *)pMsg->bodyptr);
11119 break;
11120 }
11121#endif
schang86c22c42013-03-13 18:41:24 -070011122 case WDA_SET_TX_POWER_REQ:
11123 {
11124 WDA_ProcessSetTxPowerReq(pWDA,
11125 (tSirSetTxPowerReq *)pMsg->bodyptr);
11126 break;
11127 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 case WDA_SET_P2P_GO_NOA_REQ:
11129 {
11130 WDA_ProcessSetP2PGONOAReq(pWDA,
11131 (tP2pPsParams *)pMsg->bodyptr);
11132 break;
11133 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011134 /* timer related messages */
11135 case WDA_TIMER_BA_ACTIVITY_REQ:
11136 {
11137 WDA_BaCheckActivity(pWDA) ;
11138 break ;
11139 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011140
11141 /* timer related messages */
11142 case WDA_TIMER_TRAFFIC_STATS_IND:
11143 {
11144 WDA_TimerTrafficStatsInd(pWDA);
11145 break;
11146 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011147#ifdef WLAN_FEATURE_VOWIFI_11R
11148 case WDA_AGGR_QOS_REQ:
11149 {
11150 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11151 break;
11152 }
11153#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011154 case WDA_FTM_CMD_REQ:
11155 {
11156 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11157 break ;
11158 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011159#ifdef FEATURE_OEM_DATA_SUPPORT
11160 case WDA_START_OEM_DATA_REQ:
11161 {
11162 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11163 break;
11164 }
11165#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011166 /* Tx Complete Time out Indication */
11167 case WDA_TX_COMPLETE_TIMEOUT_IND:
11168 {
11169 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11170 break;
11171 }
11172 case WDA_WLAN_SUSPEND_IND:
11173 {
11174 WDA_ProcessWlanSuspendInd(pWDA,
11175 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11176 break;
11177 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011178 case WDA_WLAN_RESUME_REQ:
11179 {
11180 WDA_ProcessWlanResumeReq(pWDA,
11181 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11182 break;
11183 }
11184
11185 case WDA_UPDATE_CF_IND:
11186 {
11187 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11188 pMsg->bodyptr = NULL;
11189 break;
11190 }
11191#ifdef FEATURE_WLAN_SCAN_PNO
11192 case WDA_SET_PNO_REQ:
11193 {
11194 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11195 break;
11196 }
11197 case WDA_UPDATE_SCAN_PARAMS_REQ:
11198 {
11199 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11200 break;
11201 }
11202 case WDA_SET_RSSI_FILTER_REQ:
11203 {
11204 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11205 break;
11206 }
11207#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011208#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011209 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011210 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011211 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011212 break;
11213 }
11214#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011215 case WDA_SET_TX_PER_TRACKING_REQ:
11216 {
11217 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11218 break;
11219 }
11220
11221#ifdef WLAN_FEATURE_PACKET_FILTERING
11222 case WDA_8023_MULTICAST_LIST_REQ:
11223 {
11224 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11225 break;
11226 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011227 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11228 {
11229 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11230 break;
11231 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11233 {
11234 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11235 break;
11236 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011237 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11238 {
11239 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11240 break;
11241 }
11242#endif // WLAN_FEATURE_PACKET_FILTERING
11243
11244
11245 case WDA_TRANSMISSION_CONTROL_IND:
11246 {
11247 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11248 break;
11249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011250 case WDA_SET_POWER_PARAMS_REQ:
11251 {
11252 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11253 break;
11254 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011255#ifdef WLAN_FEATURE_GTK_OFFLOAD
11256 case WDA_GTK_OFFLOAD_REQ:
11257 {
11258 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11259 break;
11260 }
11261
11262 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11263 {
11264 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11265 break;
11266 }
11267#endif //WLAN_FEATURE_GTK_OFFLOAD
11268
11269 case WDA_SET_TM_LEVEL_REQ:
11270 {
11271 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11272 break;
11273 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011274#ifdef WLAN_FEATURE_11AC
11275 case WDA_UPDATE_OP_MODE:
11276 {
11277 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11278 {
11279 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11280 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11281 else
11282 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11283 " VHT OpMode Feature is Not Supported \n");
11284 }
11285 else
11286 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11287 " 11AC Feature is Not Supported \n");
11288 break;
11289 }
11290#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011291#ifdef WLAN_FEATURE_11W
11292 case WDA_EXCLUDE_UNENCRYPTED_IND:
11293 {
11294 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11295 break;
11296 }
11297#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011298#ifdef FEATURE_WLAN_TDLS
11299 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11300 {
11301 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11302 break;
11303 }
11304#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011305 case WDA_DHCP_START_IND:
11306 {
11307 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11308 break;
11309 }
11310 case WDA_DHCP_STOP_IND:
11311 {
11312 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11313 break;
11314 }
Leo Chang9056f462013-08-01 19:21:11 -070011315#ifdef FEATURE_WLAN_LPHB
11316 case WDA_LPHB_CONF_REQ:
11317 {
11318 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
11319 break;
11320 }
11321#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011322 default:
11323 {
11324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11325 "No Handling for msg type %x in WDA "
11326 ,pMsg->type);
11327 /* Do Nothing? MSG Body should be freed at here */
11328 if(NULL != pMsg->bodyptr)
11329 {
11330 vos_mem_free(pMsg->bodyptr);
11331 }
11332 //WDA_VOS_ASSERT(0) ;
11333 }
11334 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 return status ;
11336}
11337
Jeff Johnson295189b2012-06-20 16:38:30 -070011338/*
11339 * FUNCTION: WDA_LowLevelIndCallback
11340 * IND API callback from WDI, send Ind to PE
11341 */
11342void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11343 void* pUserData )
11344{
11345 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11346#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11347 tSirRSSINotification rssiNotification;
11348#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011349 if(NULL == pWDA)
11350 {
11351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011352 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011353 VOS_ASSERT(0);
11354 return ;
11355 }
11356
11357 switch(wdiLowLevelInd->wdiIndicationType)
11358 {
11359 case WDI_RSSI_NOTIFICATION_IND:
11360 {
11361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11362 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011363#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11364 rssiNotification.bReserved =
11365 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11366 rssiNotification.bRssiThres1NegCross =
11367 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11368 rssiNotification.bRssiThres1PosCross =
11369 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11370 rssiNotification.bRssiThres2NegCross =
11371 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11372 rssiNotification.bRssiThres2PosCross =
11373 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11374 rssiNotification.bRssiThres3NegCross =
11375 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11376 rssiNotification.bRssiThres3PosCross =
11377 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011378 rssiNotification.avgRssi = (v_S7_t)
11379 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011380 WLANTL_BMPSRSSIRegionChangedNotification(
11381 pWDA->pVosContext,
11382 &rssiNotification);
11383#endif
11384 break ;
11385 }
11386 case WDI_MISSED_BEACON_IND:
11387 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011388 tpSirSmeMissedBeaconInd pMissBeacInd =
11389 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11391 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011392 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011393 if(NULL == pMissBeacInd)
11394 {
11395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11396 "%s: VOS MEM Alloc Failure", __func__);
11397 break;
11398 }
11399 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11400 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11401 pMissBeacInd->bssIdx =
11402 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11403 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 break ;
11405 }
11406 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11407 {
11408 /* TODO: Decode Ind and send Ind to PE */
11409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11410 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11411 break ;
11412 }
11413
11414 case WDI_MIC_FAILURE_IND:
11415 {
11416 tpSirSmeMicFailureInd pMicInd =
11417 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11418
11419 if(NULL == pMicInd)
11420 {
11421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011422 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011423 break;
11424 }
11425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11426 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011427 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11428 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11429 vos_mem_copy(pMicInd->bssId,
11430 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11431 sizeof(tSirMacAddr));
11432 vos_mem_copy(pMicInd->info.srcMacAddr,
11433 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11434 sizeof(tSirMacAddr));
11435 vos_mem_copy(pMicInd->info.taMacAddr,
11436 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11437 sizeof(tSirMacAddr));
11438 vos_mem_copy(pMicInd->info.dstMacAddr,
11439 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11440 sizeof(tSirMacAddr));
11441 vos_mem_copy(pMicInd->info.rxMacAddr,
11442 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11443 sizeof(tSirMacAddr));
11444 pMicInd->info.multicast =
11445 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11446 pMicInd->info.keyId=
11447 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11448 pMicInd->info.IV1=
11449 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11450 vos_mem_copy(pMicInd->info.TSC,
11451 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011452 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11453 (void *)pMicInd , 0) ;
11454 break ;
11455 }
11456 case WDI_FATAL_ERROR_IND:
11457 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011458 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011459 /* TODO: Decode Ind and send Ind to PE */
11460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11461 "Received WDI_FATAL_ERROR_IND from WDI ");
11462 break ;
11463 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011464 case WDI_DEL_STA_IND:
11465 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011466 tpDeleteStaContext pDelSTACtx =
11467 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11468
11469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11470 "Received WDI_DEL_STA_IND from WDI ");
11471 if(NULL == pDelSTACtx)
11472 {
11473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011475 break;
11476 }
11477 vos_mem_copy(pDelSTACtx->addr2,
11478 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11479 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011480 vos_mem_copy(pDelSTACtx->bssId,
11481 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11482 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011483 pDelSTACtx->assocId =
11484 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11485 pDelSTACtx->reasonCode =
11486 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11487 pDelSTACtx->staId =
11488 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011489 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11490 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 break ;
11492 }
11493 case WDI_COEX_IND:
11494 {
11495 tANI_U32 index;
11496 vos_msg_t vosMsg;
11497 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11498 if(NULL == pSmeCoexInd)
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011501 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 break;
11503 }
11504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11505 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011506 /* Message Header */
11507 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11508 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011509 /* Info from WDI Indication */
11510 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11511 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11512 {
11513 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11514 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 /* VOS message wrapper */
11516 vosMsg.type = eWNI_SME_COEX_IND;
11517 vosMsg.bodyptr = (void *)pSmeCoexInd;
11518 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011519 /* Send message to SME */
11520 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11521 {
11522 /* free the mem and return */
11523 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11524 }
11525 else
11526 {
11527 /* DEBUG */
11528 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11529 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11530 pSmeCoexInd->coexIndType,
11531 pSmeCoexInd->coexIndData[0],
11532 pSmeCoexInd->coexIndData[1],
11533 pSmeCoexInd->coexIndData[2],
11534 pSmeCoexInd->coexIndData[3]);
11535 }
11536 break;
11537 }
11538 case WDI_TX_COMPLETE_IND:
11539 {
11540 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11541 /* Calling TxCompleteAck Indication from wda context*/
11542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11543 "Complete Indication received from HAL");
11544 if( pWDA->pAckTxCbFunc )
11545 {
11546 if( VOS_STATUS_SUCCESS !=
11547 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11548 {
11549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11550 "Tx Complete timeout Timer Stop Failed ");
11551 }
11552 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11553 pWDA->pAckTxCbFunc = NULL;
11554 }
11555 else
11556 {
11557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11558 "Tx Complete Indication is received after timeout ");
11559 }
11560 break;
11561 }
Viral Modid86bde22012-12-10 13:09:21 -080011562 case WDI_P2P_NOA_START_IND :
11563 {
11564 tSirP2PNoaStart *pP2pNoaStart =
11565 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11566
11567 if (NULL == pP2pNoaStart)
11568 {
11569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11570 "Memory allocation failure, "
11571 "WDI_P2P_NOA_START_IND not forwarded");
11572 break;
11573 }
11574 pP2pNoaStart->status =
11575 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11576 pP2pNoaStart->bssIdx =
11577 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11578 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11579 (void *)pP2pNoaStart , 0) ;
11580 break;
11581 }
11582
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011583#ifdef FEATURE_WLAN_TDLS
11584 case WDI_TDLS_IND :
11585 {
11586 tSirTdlsInd *pTdlsInd =
11587 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
11588
11589 if (NULL == pTdlsInd)
11590 {
11591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11592 "Memory allocation failure, "
11593 "WDI_TDLS_IND not forwarded");
11594 break;
11595 }
11596 pTdlsInd->status =
11597 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
11598 pTdlsInd->assocId =
11599 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
11600 pTdlsInd->staIdx =
11601 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
11602 pTdlsInd->reasonCode =
11603 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
11604 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
11605 (void *)pTdlsInd , 0) ;
11606 break;
11607 }
11608#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011609 case WDI_P2P_NOA_ATTR_IND :
11610 {
11611 tSirP2PNoaAttr *pP2pNoaAttr =
11612 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11614 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 if (NULL == pP2pNoaAttr)
11616 {
11617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11618 "Memory allocation failure, "
11619 "WDI_P2P_NOA_ATTR_IND not forwarded");
11620 break;
11621 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 pP2pNoaAttr->index =
11623 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11624 pP2pNoaAttr->oppPsFlag =
11625 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11626 pP2pNoaAttr->ctWin =
11627 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11628
11629 pP2pNoaAttr->uNoa1IntervalCnt =
11630 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11631 pP2pNoaAttr->uNoa1Duration =
11632 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11633 pP2pNoaAttr->uNoa1Interval =
11634 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11635 pP2pNoaAttr->uNoa1StartTime =
11636 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011637 pP2pNoaAttr->uNoa2IntervalCnt =
11638 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11639 pP2pNoaAttr->uNoa2Duration =
11640 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11641 pP2pNoaAttr->uNoa2Interval =
11642 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11643 pP2pNoaAttr->uNoa2StartTime =
11644 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11646 (void *)pP2pNoaAttr , 0) ;
11647 break;
11648 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011649#ifdef FEATURE_WLAN_SCAN_PNO
11650 case WDI_PREF_NETWORK_FOUND_IND:
11651 {
11652 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011653 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11654 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11655 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11656 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11657
Jeff Johnson295189b2012-06-20 16:38:30 -070011658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11659 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011660 if (NULL == pPrefNetworkFoundInd)
11661 {
11662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11663 "Memory allocation failure, "
11664 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11665 break;
11666 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 /* Message Header */
11668 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011669 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011670
11671 /* Info from WDI Indication */
11672 pPrefNetworkFoundInd->ssId.length =
11673 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011674 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11676 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11677 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011678 if (NULL !=
11679 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11680 {
11681 pPrefNetworkFoundInd->frameLength =
11682 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11683 vos_mem_copy( pPrefNetworkFoundInd->data,
11684 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11685 pPrefNetworkFoundInd->frameLength);
11686 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11687 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11688 }
11689 else
11690 {
11691 pPrefNetworkFoundInd->frameLength = 0;
11692 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011693 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011694 /* VOS message wrapper */
11695 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11696 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11697 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011698 /* Send message to SME */
11699 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11700 {
11701 /* free the mem and return */
11702 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11703 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011704 break;
11705 }
11706#endif // FEATURE_WLAN_SCAN_PNO
11707
11708#ifdef WLAN_WAKEUP_EVENTS
11709 case WDI_WAKE_REASON_IND:
11710 {
11711 vos_msg_t vosMsg;
11712 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11713 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11714 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11715
11716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11717 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11718 wdiLowLevelInd->wdiIndicationType,
11719 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11720 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11721 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11722
11723 if (NULL == pWakeReasonInd)
11724 {
11725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11726 "Memory allocation failure, "
11727 "WDI_WAKE_REASON_IND not forwarded");
11728 break;
11729 }
11730
11731 vos_mem_zero(pWakeReasonInd, allocSize);
11732
11733 /* Message Header */
11734 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11735 pWakeReasonInd->mesgLen = allocSize;
11736
11737 /* Info from WDI Indication */
11738 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11739 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11740 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11741 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11742 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11743 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11744 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11745 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11746
11747 /* VOS message wrapper */
11748 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11749 vosMsg.bodyptr = (void *) pWakeReasonInd;
11750 vosMsg.bodyval = 0;
11751
11752 /* Send message to SME */
11753 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11754 {
11755 /* free the mem and return */
11756 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11757 }
11758
11759 break;
11760 }
11761#endif // WLAN_WAKEUP_EVENTS
11762
11763 case WDI_TX_PER_HIT_IND:
11764 {
11765 vos_msg_t vosMsg;
11766 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11767 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11768 /* VOS message wrapper */
11769 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11770 vosMsg.bodyptr = NULL;
11771 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011772 /* Send message to SME */
11773 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11774 {
11775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11776 }
11777 break;
11778 }
11779
Leo Chang9056f462013-08-01 19:21:11 -070011780#ifdef FEATURE_WLAN_LPHB
11781 case WDI_LPHB_WAIT_TIMEOUT_IND:
11782 {
11783 vos_msg_t vosMsg;
11784 tSirLPHBTimeoutInd *lphbTimeoutInd;
11785
11786 lphbTimeoutInd =
11787 (tSirLPHBTimeoutInd *)vos_mem_malloc(sizeof(tSirLPHBTimeoutInd));
11788 if (NULL == lphbTimeoutInd)
11789 {
11790 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11791 "%s: LPHB IND buffer alloc Fail", __func__);
11792 return ;
11793 }
11794
11795 lphbTimeoutInd->sessionIdx =
11796 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
11797 lphbTimeoutInd->protocolType =
11798 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
11799 lphbTimeoutInd->eventReason =
11800 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
11801
11802 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11803 "Get WDI_LPHB_WAIT_TIMEOUT_IND bssIdx %d",
11804 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
11805
11806 vosMsg.type = eWNI_SME_LPHB_WAIT_TIMEOUT_IND;
11807 vosMsg.bodyptr = lphbTimeoutInd;
11808 vosMsg.bodyval = 0;
11809 /* Send message to SME */
11810 if (VOS_STATUS_SUCCESS !=
11811 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11812 {
11813 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11814 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
11815 vos_mem_free(lphbTimeoutInd);
11816 }
11817 break;
11818 }
11819#endif /* FEATURE_WLAN_LPHB */
11820
Jeff Johnson295189b2012-06-20 16:38:30 -070011821 default:
11822 {
11823 /* TODO error */
11824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11825 "Received UNKNOWN Indication from WDI ");
11826 }
11827 }
11828 return ;
11829}
11830
Jeff Johnson295189b2012-06-20 16:38:30 -070011831/*
11832 * BA related processing in WDA.
11833 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011834void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
11835 void* pUserData)
11836{
11837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11838 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011839 if(NULL == pWdaParams)
11840 {
11841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011842 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011843 VOS_ASSERT(0) ;
11844 return ;
11845 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011846 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070011847 vos_mem_free(pWdaParams->wdaMsgParam) ;
11848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11849 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011851 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011852 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
11853 {
11854 tANI_U8 i = 0 ;
11855 tBaActivityInd *baActivityInd = NULL ;
11856 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
11857 tANI_U8 allocSize = sizeof(tBaActivityInd)
11858 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
11859 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
11860 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011861 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011862 if(NULL == baActivityInd)
11863 {
11864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011865 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011866 VOS_ASSERT(0) ;
11867 return;
11868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011869 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
11870 sizeof(tSirMacAddr)) ;
11871 baActivityInd->baCandidateCnt = baCandidateCount ;
11872
11873 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
11874 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
11875
11876 for(i = 0 ; i < baCandidateCount ; i++)
11877 {
11878 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
11880 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011881 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
11882 {
11883 baCandidate->baInfo[tid].fBaEnable =
11884 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
11885 baCandidate->baInfo[tid].startingSeqNum =
11886 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
11887 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011888 wdiBaCandidate++ ;
11889 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011890 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011891 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
11892 }
11893 else
11894 {
11895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11896 "BA Trigger RSP with Failure received ");
11897 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011898 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011899}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011900
11901
11902/*
11903 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
11904 * during MCC
11905 */
11906void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
11907{
11908 wpt_uint32 enabled;
11909 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
11910 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
11911 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
11912
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011913 if (NULL == pMac )
11914 {
11915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11916 "%s: Invoked with invalid MAC context ", __func__ );
11917 VOS_ASSERT(0);
11918 return;
11919 }
11920
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011921 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11922 != eSIR_SUCCESS)
11923 {
11924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11925 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11926 return;
11927 }
11928
11929 if(!enabled)
11930 {
11931 return;
11932 }
11933
11934 if(NULL == pWDA)
11935 {
11936 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11937 "%s:WDA context is NULL", __func__);
11938 VOS_ASSERT(0);
11939 return;
11940 }
11941
11942 if(activate)
11943 {
11944 if( VOS_STATUS_SUCCESS !=
11945 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11946 {
11947 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11948 "Traffic Stats Timer Start Failed ");
11949 return;
11950 }
11951 WDI_DS_ActivateTrafficStats();
11952 }
11953 else
11954 {
11955 WDI_DS_DeactivateTrafficStats();
11956 WDI_DS_ClearTrafficStats();
11957
11958 if( VOS_STATUS_SUCCESS !=
11959 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11960 {
11961 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11962 "Traffic Stats Timer Stop Failed ");
11963 return;
11964 }
11965 }
11966}
11967
11968/*
11969 * Traffic Stats Timer handler
11970 */
11971void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
11972{
11973 WDI_Status wdiStatus;
11974 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
11975 WDI_TrafficStatsIndType trafficStatsIndParams;
11976 wpt_uint32 length, enabled;
11977 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11978
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011979 if (NULL == pMac )
11980 {
11981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11982 "%s: Invoked with invalid MAC context ", __func__ );
11983 VOS_ASSERT(0);
11984 return;
11985 }
11986
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011987 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11988 != eSIR_SUCCESS)
11989 {
11990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11991 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11992 return;
11993 }
11994
11995 if(!enabled)
11996 {
11997 WDI_DS_DeactivateTrafficStats();
11998 return;
11999 }
12000
12001 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12002
12003 if(pWdiTrafficStats != NULL)
12004 {
12005 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12006 trafficStatsIndParams.length = length;
12007 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012008 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012009 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12010 trafficStatsIndParams.pUserData = pWDA;
12011
12012 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12013
12014 if(WDI_STATUS_PENDING == wdiStatus)
12015 {
12016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12017 "Pending received for %s:%d ",__func__,__LINE__ );
12018 }
12019 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12020 {
12021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12022 "Failure in %s:%d ",__func__,__LINE__ );
12023 }
12024
12025 WDI_DS_ClearTrafficStats();
12026 }
12027 else
12028 {
12029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12030 "pWdiTrafficStats is Null");
12031 }
12032
12033 if( VOS_STATUS_SUCCESS !=
12034 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12035 {
12036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12037 "Traffic Stats Timer Start Failed ");
12038 return;
12039 }
12040}
12041
Jeff Johnson295189b2012-06-20 16:38:30 -070012042/*
12043 * BA Activity check timer handler
12044 */
12045void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
12046{
12047 tANI_U8 curSta = 0 ;
12048 tANI_U8 tid = 0 ;
12049 tANI_U8 size = 0 ;
12050 tANI_U8 baCandidateCount = 0 ;
12051 tANI_U8 newBaCandidate = 0 ;
12052 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
12053
12054 if(NULL == pWDA)
12055 {
12056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012057 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012058 VOS_ASSERT(0);
12059 return ;
12060 }
12061 if(WDA_MAX_STA < pWDA->wdaMaxSta)
12062 {
12063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12064 "Inconsistent STA entries in WDA");
12065 VOS_ASSERT(0) ;
12066 }
12067 /* walk through all STA entries and find out TX packet count */
12068 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
12069 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080012070#ifdef WLAN_SOFTAP_VSTA_FEATURE
12071 // We can only do BA on "hard" STAs.
12072 if (!(IS_HWSTA_IDX(curSta)))
12073 {
12074 continue;
12075 }
12076#endif //WLAN_SOFTAP_VSTA_FEATURE
12077 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
12078 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012079 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012080 tANI_U32 txPktCount = 0 ;
12081 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012082 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012083 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
12084 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070012085 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
12086 curSta, tid, &txPktCount)))
12087 {
12088#if 0
12089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12090 "************* %d:%d, %d ",curSta, txPktCount,
12091 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
12092#endif
12093 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012094 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070012095 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
12096 curSta, tid)))
12097 {
12098 /* get prepare for sending message to HAL */
12099 //baCandidate[baCandidateCount].staIdx = curSta ;
12100 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
12101 newBaCandidate = WDA_ENABLE_BA ;
12102 }
12103 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
12104 }
12105 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012106 /* fill the entry for all the sta with given TID's */
12107 if(WDA_ENABLE_BA == newBaCandidate)
12108 {
12109 /* move to next BA candidate */
12110 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
12111 size += sizeof(WDI_TriggerBAReqCandidateType) ;
12112 baCandidateCount++ ;
12113 newBaCandidate = WDA_DISABLE_BA ;
12114 }
12115 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012116 /* prepare and send message to hal */
12117 if( 0 < baCandidateCount)
12118 {
12119 WDI_Status status = WDI_STATUS_SUCCESS ;
12120 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
12121 tWDA_ReqParams *pWdaParams =
12122 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012123 if(NULL == pWdaParams)
12124 {
12125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012127 VOS_ASSERT(0) ;
12128 return;
12129 }
12130 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
12131 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
12132 if(NULL == wdiTriggerBaReq)
12133 {
12134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012136 VOS_ASSERT(0) ;
12137 vos_mem_free(pWdaParams);
12138 return;
12139 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012140 do
12141 {
12142 WDI_TriggerBAReqinfoType *triggerBaInfo =
12143 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
12144 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
12145 /* TEMP_FIX: Need to see if WDI need check for assoc session for
12146 * for each request */
12147 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
12148 triggerBaInfo->ucBASessionID = 0;
12149 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
12150 } while(0) ;
12151 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
12152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012153 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012154 pWdaParams->pWdaContext = pWDA;
12155 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
12156 pWdaParams->wdaMsgParam = NULL;
12157 status = WDI_TriggerBAReq(wdiTriggerBaReq,
12158 WDA_TriggerBaReqCallback, pWdaParams) ;
12159 if(IS_WDI_STATUS_FAILURE(status))
12160 {
12161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12162 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
12163 vos_mem_free(pWdaParams->wdaMsgParam) ;
12164 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12165 vos_mem_free(pWdaParams) ;
12166 }
12167 }
12168 else
12169 {
12170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12171 "There is no TID for initiating BA");
12172 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012173 if( VOS_STATUS_SUCCESS !=
12174 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12175 {
12176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12177 "BA Activity Timer Stop Failed ");
12178 return ;
12179 }
12180 if( VOS_STATUS_SUCCESS !=
12181 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12182 {
12183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12184 "BA Activity Timer Start Failed ");
12185 return;
12186 }
12187 return ;
12188}
Jeff Johnson295189b2012-06-20 16:38:30 -070012189/*
12190 * WDA common routine to create timer used by WDA.
12191 */
12192static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12193{
Jeff Johnson295189b2012-06-20 16:38:30 -070012194 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12195 tANI_U32 val = 0 ;
12196 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12197
12198 if(NULL == pMac)
12199 {
12200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012201 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012202 VOS_ASSERT(0);
12203 return VOS_STATUS_E_FAILURE;
12204 }
12205 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12206 != eSIR_SUCCESS)
12207 {
12208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12209 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12210 return VOS_STATUS_E_FAILURE;
12211 }
12212 val = SYS_MS_TO_TICKS(val) ;
12213
12214 /* BA activity check timer */
12215 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12216 "BA Activity Check timer", WDA_TimerHandler,
12217 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12218 if(status != TX_SUCCESS)
12219 {
12220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12221 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012222 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012224 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012225 /* Tx Complete Timeout timer */
12226 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12227 "Tx Complete Check timer", WDA_TimerHandler,
12228 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012229 if(status != TX_SUCCESS)
12230 {
12231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12232 "Unable to create Tx Complete Timeout timer");
12233 /* Destroy timer of BA activity check timer */
12234 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12235 if(status != TX_SUCCESS)
12236 {
12237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12238 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012239 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012240 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012241 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012242 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012243
12244 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12245
12246 /* Traffic Stats timer */
12247 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12248 "Traffic Stats timer", WDA_TimerHandler,
12249 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12250 if(status != TX_SUCCESS)
12251 {
12252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12253 "Unable to create traffic stats timer");
12254 /* Destroy timer of BA activity check timer */
12255 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12256 if(status != TX_SUCCESS)
12257 {
12258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12259 "Unable to Destroy BA activity timer");
12260 }
12261 /* Destroy timer of tx complete timer */
12262 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12263 if(status != TX_SUCCESS)
12264 {
12265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12266 "Unable to Tx complete timer");
12267 }
12268 return VOS_STATUS_E_FAILURE ;
12269 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012270 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012271}
Jeff Johnson295189b2012-06-20 16:38:30 -070012272/*
12273 * WDA common routine to destroy timer used by WDA.
12274 */
12275static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12276{
12277 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012278 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12279 if(status != TX_SUCCESS)
12280 {
12281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12282 "Unable to Destroy Tx Complete Timeout timer");
12283 return eSIR_FAILURE ;
12284 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012285 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12286 if(status != TX_SUCCESS)
12287 {
12288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12289 "Unable to Destroy BA activity timer");
12290 return eSIR_FAILURE ;
12291 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012292 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12293 if(status != TX_SUCCESS)
12294 {
12295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12296 "Unable to Destroy traffic stats timer");
12297 return eSIR_FAILURE ;
12298 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012299 return eSIR_SUCCESS ;
12300}
Jeff Johnson295189b2012-06-20 16:38:30 -070012301/*
12302 * WDA timer handler.
12303 */
12304void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12305{
12306 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12307 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012308 /*
12309 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12310 */
12311 wdaMsg.type = timerInfo ;
12312 wdaMsg.bodyptr = NULL;
12313 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 /* post the message.. */
12315 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
12316 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
12317 {
12318 vosStatus = VOS_STATUS_E_BADMSG;
12319 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012320}
Jeff Johnson295189b2012-06-20 16:38:30 -070012321/*
12322 * WDA Tx Complete timeout Indication.
12323 */
12324void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
12325{
12326 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012327 if( pWDA->pAckTxCbFunc )
12328 {
12329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12330 "TxComplete timer expired\n");
12331 pWDA->pAckTxCbFunc( pMac, 0);
12332 pWDA->pAckTxCbFunc = NULL;
12333 }
12334 else
12335 {
12336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12337 "There is no request pending for TxComplete and wait timer expired\n");
12338 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012339}
Jeff Johnson295189b2012-06-20 16:38:30 -070012340/*
12341 * WDA Set REG Domain to VOS NV
12342 */
12343eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
12344{
12345 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
12346 {
12347 return eHAL_STATUS_INVALID_PARAMETER;
12348 }
12349 return eHAL_STATUS_SUCCESS;
12350}
Jeff Johnson295189b2012-06-20 16:38:30 -070012351
Jeff Johnson295189b2012-06-20 16:38:30 -070012352#ifdef FEATURE_WLAN_SCAN_PNO
12353/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012354 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012355 *
12356 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012357void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012358{
12359 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012361 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012362 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012363 {
12364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012365 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012366 VOS_ASSERT(0) ;
12367 return ;
12368 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012369
Yue Ma7f44bbe2013-04-12 11:47:39 -070012370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12371 vos_mem_free(pWdaParams->wdaMsgParam);
12372 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012373
12374 return ;
12375}
Jeff Johnson295189b2012-06-20 16:38:30 -070012376/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012377 * FUNCTION: WDA_PNOScanReqCallback
12378 * Free memory.
12379 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
12380 */
12381void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012382{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012383 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12384
12385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12386 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12387
12388 if(NULL == pWdaParams)
12389 {
12390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12391 "%s: pWdaParams received NULL", __func__);
12392 VOS_ASSERT(0);
12393 return;
12394 }
12395
12396 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12397 {
12398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12399 vos_mem_free(pWdaParams->wdaMsgParam);
12400 vos_mem_free(pWdaParams);
12401 }
12402
12403 return;
12404}
12405/*
12406 * FUNCTION: WDA_UpdateScanParamsRespCallback
12407 *
12408 */
12409void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12410{
12411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012413 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012414 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012415 {
12416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012417 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012418 VOS_ASSERT(0) ;
12419 return ;
12420 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012421
12422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12423 vos_mem_free(pWdaParams->wdaMsgParam);
12424 vos_mem_free(pWdaParams);
12425
Jeff Johnson295189b2012-06-20 16:38:30 -070012426 return ;
12427}
Jeff Johnson295189b2012-06-20 16:38:30 -070012428/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012429 * FUNCTION: WDA_UpdateScanParamsReqCallback
12430 * Free memory.
12431 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12432 */
12433void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12434{
12435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12436
12437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12438 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12439
12440 if(NULL == pWdaParams)
12441 {
12442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12443 "%s: pWdaParams received NULL", __func__);
12444 VOS_ASSERT(0);
12445 return;
12446 }
12447
12448 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12449 {
12450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12451 vos_mem_free(pWdaParams->wdaMsgParam);
12452 vos_mem_free(pWdaParams);
12453 }
12454
12455 return;
12456}
12457/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012458 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12459 * Request to WDI to set Preferred Network List.Offload
12460 */
12461VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12462 tSirPNOScanReq *pPNOScanReqParams)
12463{
Jeff Johnson43971f52012-07-17 12:26:56 -070012464 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012465 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12466 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12467 tWDA_ReqParams *pWdaParams ;
12468 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012470 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012471 if(NULL == pwdiPNOScanReqInfo)
12472 {
12473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012475 VOS_ASSERT(0);
12476 return VOS_STATUS_E_NOMEM;
12477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12479 if(NULL == pWdaParams)
12480 {
12481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012483 VOS_ASSERT(0);
12484 vos_mem_free(pwdiPNOScanReqInfo);
12485 return VOS_STATUS_E_NOMEM;
12486 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012487 //
12488 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12489 //
12490 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12491 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012492 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12493 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12494 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012495 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12496 {
12497 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12498 &pPNOScanReqParams->aNetworks[i],
12499 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012501 /*Scan timer intervals*/
12502 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12503 &pPNOScanReqParams->scanTimers,
12504 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012505 /*Probe template for 2.4GHz band*/
12506 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12507 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12508 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012509 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12510 pPNOScanReqParams->p24GProbeTemplate,
12511 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012512 /*Probe template for 5GHz band*/
12513 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12514 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12515 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012516 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12517 pPNOScanReqParams->p5GProbeTemplate,
12518 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012519 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12520 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012521
Jeff Johnson295189b2012-06-20 16:38:30 -070012522 /* Store Params pass it to WDI */
12523 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12524 pWdaParams->pWdaContext = pWDA;
12525 /* Store param pointer as passed in by caller */
12526 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012527 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012528 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012529 if(IS_WDI_STATUS_FAILURE(status))
12530 {
12531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12532 "Failure in Set PNO REQ WDI API, free all the memory " );
12533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12534 vos_mem_free(pWdaParams->wdaMsgParam);
12535 pWdaParams->wdaWdiApiMsgParam = NULL;
12536 pWdaParams->wdaMsgParam = NULL;
12537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 return CONVERT_WDI2VOS_STATUS(status) ;
12539}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012540
12541#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12542
12543void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12544{
12545 /*Convert the CSR Auth types to WDI Auth types */
12546 switch (csrAuthType)
12547 {
12548 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12549 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12550 break;
12551#ifdef FEATURE_WLAN_CCX
12552 case eCSR_AUTH_TYPE_CCKM_WPA:
12553 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12554 break;
12555#endif
12556 case eCSR_AUTH_TYPE_WPA:
12557 *AuthType = eWDA_AUTH_TYPE_WPA;
12558 break;
12559 case eCSR_AUTH_TYPE_WPA_PSK:
12560 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12561 break;
12562#ifdef FEATURE_WLAN_CCX
12563 case eCSR_AUTH_TYPE_CCKM_RSN:
12564 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12565 break;
12566#endif
12567 case eCSR_AUTH_TYPE_RSN:
12568 *AuthType = eWDA_AUTH_TYPE_RSN;
12569 break;
12570 case eCSR_AUTH_TYPE_RSN_PSK:
12571 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12572 break;
12573#if defined WLAN_FEATURE_VOWIFI_11R
12574 case eCSR_AUTH_TYPE_FT_RSN:
12575 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12576 break;
12577 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12578 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12579 break;
12580#endif
12581#ifdef FEATURE_WLAN_WAPI
12582 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12583 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12584 break;
12585 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12586 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12587 break;
12588#endif /* FEATURE_WLAN_WAPI */
12589 case eCSR_AUTH_TYPE_SHARED_KEY:
12590 case eCSR_AUTH_TYPE_AUTOSWITCH:
12591 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12592 break;
12593#if 0
12594 case eCSR_AUTH_TYPE_SHARED_KEY:
12595 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12596 break;
12597 case eCSR_AUTH_TYPE_AUTOSWITCH:
12598 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12599#endif
12600 default:
12601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12602 "%s: Unknown Auth Type", __func__);
12603 break;
12604 }
12605}
12606void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12607{
12608 switch (csrEncrType)
12609 {
12610 case eCSR_ENCRYPT_TYPE_NONE:
12611 *EncrType = WDI_ED_NONE;
12612 break;
12613 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12614 case eCSR_ENCRYPT_TYPE_WEP40:
12615 *EncrType = WDI_ED_WEP40;
12616 break;
12617 case eCSR_ENCRYPT_TYPE_WEP104:
12618 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12619 *EncrType = WDI_ED_WEP104;
12620 break;
12621 case eCSR_ENCRYPT_TYPE_TKIP:
12622 *EncrType = WDI_ED_TKIP;
12623 break;
12624 case eCSR_ENCRYPT_TYPE_AES:
12625 *EncrType = WDI_ED_CCMP;
12626 break;
12627#ifdef WLAN_FEATURE_11W
12628 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12629 *EncrType = WDI_ED_AES_128_CMAC;
12630 break;
12631#endif
12632#ifdef FEATURE_WLAN_WAPI
12633 case eCSR_ENCRYPT_TYPE_WPI:
12634 *EncrType = WDI_ED_WPI;
12635 break;
12636#endif
12637 case eCSR_ENCRYPT_TYPE_ANY:
12638 *EncrType = WDI_ED_ANY;
12639 break;
12640
12641 default:
12642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12643 "%s: Unknown Encryption Type", __func__);
12644 break;
12645 }
12646}
12647
12648/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012649 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012650 * Request to WDI to set Roam Offload Scan
12651 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012652VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012653 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12654{
12655 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012656 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
12657 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012658 tWDA_ReqParams *pWdaParams ;
12659 v_U8_t csrAuthType;
12660 WDI_RoamNetworkType *pwdiRoamNetworkType;
12661 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12663 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012664 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012665 {
12666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12667 "%s: VOS MEM Alloc Failure", __func__);
12668 VOS_ASSERT(0);
12669 return VOS_STATUS_E_NOMEM;
12670 }
12671 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12672 if (NULL == pWdaParams)
12673 {
12674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12675 "%s: VOS MEM Alloc Failure", __func__);
12676 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012677 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012678 return VOS_STATUS_E_NOMEM;
12679 }
12680
12681 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012682 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012683 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012684 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
12685 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012686 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12687 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12688 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12689 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12690 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12691 sizeof(pwdiRoamNetworkType->currAPbssid));
12692 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12693 csrAuthType);
12694 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12695 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12696 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12697 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12698 pwdiRoamOffloadScanInfo->LookupThreshold =
12699 pRoamOffloadScanReqParams->LookupThreshold ;
12700 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12701 pRoamOffloadScanReqParams->RoamRssiDiff ;
12702 pwdiRoamOffloadScanInfo->Command =
12703 pRoamOffloadScanReqParams->Command ;
12704 pwdiRoamOffloadScanInfo->StartScanReason =
12705 pRoamOffloadScanReqParams->StartScanReason ;
12706 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12707 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12708 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12709 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12710 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12711 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12712 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12713 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12714 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12715 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12716 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12717 pRoamOffloadScanReqParams->IsCCXEnabled ;
12718 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12719 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12720 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12721 pwdiRoamNetworkType->ssId.ucLength =
12722 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12723 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12724 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12725 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12726 pwdiRoamNetworkType->ChannelCount =
12727 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12728 pwdiRoamOffloadScanInfo->ChannelCacheType =
12729 pRoamOffloadScanReqParams->ChannelCacheType;
12730 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12731 pRoamOffloadScanReqParams->ValidChannelList,
12732 pRoamOffloadScanReqParams->ValidChannelCount);
12733 pwdiRoamOffloadScanInfo->ValidChannelCount =
12734 pRoamOffloadScanReqParams->ValidChannelCount;
12735 pwdiRoamOffloadScanInfo->us24GProbeSize =
12736 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12737 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12738 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12739 pRoamOffloadScanReqParams->p24GProbeTemplate,
12740 pwdiRoamOffloadScanInfo->us24GProbeSize);
12741 pwdiRoamOffloadScanInfo->us5GProbeSize =
12742 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12743 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12744 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12745 pRoamOffloadScanReqParams->p5GProbeTemplate,
12746 pwdiRoamOffloadScanInfo->us5GProbeSize);
12747 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12748 pRoamOffloadScanReqParams->MDID.mdiePresent;
12749 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12750 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012751 pwdiRoamOffloadScanInfo->nProbes =
12752 pRoamOffloadScanReqParams->nProbes;
12753 pwdiRoamOffloadScanInfo->HomeAwayTime =
12754 pRoamOffloadScanReqParams->HomeAwayTime;
12755 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012756 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012757 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012758 pWdaParams->pWdaContext = pWDA;
12759 /* Store param pointer as passed in by caller */
12760 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012761 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012762 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12763 if(IS_WDI_STATUS_FAILURE(status))
12764 {
12765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12766 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12768 vos_mem_free(pWdaParams->wdaMsgParam);
12769 pWdaParams->wdaWdiApiMsgParam = NULL;
12770 pWdaParams->wdaMsgParam = NULL;
12771 }
12772 return CONVERT_WDI2VOS_STATUS(status) ;
12773}
12774#endif
12775
Jeff Johnson295189b2012-06-20 16:38:30 -070012776/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012777 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012778 *
12779 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012780void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012781{
12782 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12783
12784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012785 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012786
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012787 if(NULL == pWdaParams)
12788 {
12789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012790 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012791 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012792 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012793 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012794
Jeff Johnson295189b2012-06-20 16:38:30 -070012795 vos_mem_free(pWdaParams->wdaMsgParam) ;
12796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12797 vos_mem_free(pWdaParams) ;
12798
12799 return ;
12800}
12801/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012802 * FUNCTION: WDA_RssiFilterReqCallback
12803 * Free memory.
12804 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
12805 */
12806void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
12807{
12808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12809
12810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12811 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12812
12813 if(NULL == pWdaParams)
12814 {
12815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12816 "%s: pWdaParams received NULL", __func__);
12817 VOS_ASSERT(0);
12818 return;
12819 }
12820
12821 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12822 {
12823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12824 vos_mem_free(pWdaParams->wdaMsgParam);
12825 vos_mem_free(pWdaParams);
12826 }
12827
12828 return;
12829}
12830/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012831 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12832 * Request to WDI to set Preferred Network List.Offload
12833 */
12834VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
12835 tSirSetRSSIFilterReq* pRssiFilterParams)
12836{
Jeff Johnson43971f52012-07-17 12:26:56 -070012837 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012838 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
12839 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
12840 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012843 if(NULL == pwdiSetRssiFilterReqInfo)
12844 {
12845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012847 VOS_ASSERT(0);
12848 return VOS_STATUS_E_NOMEM;
12849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12851 if(NULL == pWdaParams)
12852 {
12853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012855 VOS_ASSERT(0);
12856 vos_mem_free(pwdiSetRssiFilterReqInfo);
12857 return VOS_STATUS_E_NOMEM;
12858 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012859 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012860 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
12861 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012862
Jeff Johnson295189b2012-06-20 16:38:30 -070012863 /* Store Params pass it to WDI */
12864 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
12865 pWdaParams->pWdaContext = pWDA;
12866 /* Store param pointer as passed in by caller */
12867 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012868 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012869 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012870 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012871 if(IS_WDI_STATUS_FAILURE(status))
12872 {
12873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12874 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
12875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12876 vos_mem_free(pWdaParams->wdaMsgParam);
12877 pWdaParams->wdaWdiApiMsgParam = NULL;
12878 pWdaParams->wdaMsgParam = NULL;
12879 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012880 return CONVERT_WDI2VOS_STATUS(status) ;
12881}
12882
Jeff Johnson295189b2012-06-20 16:38:30 -070012883/*
12884 * FUNCTION: WDA_ProcessUpdateScanParams
12885 * Request to WDI to update Scan Parameters
12886 */
12887VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
12888 tSirUpdateScanParams *pUpdateScanParams)
12889{
Jeff Johnson43971f52012-07-17 12:26:56 -070012890 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012891 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
12892 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
12893 sizeof(WDI_UpdateScanParamsInfoType)) ;
12894 tWDA_ReqParams *pWdaParams ;
12895 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012897 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 if(NULL == wdiUpdateScanParamsInfoType)
12899 {
12900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012901 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012902 VOS_ASSERT(0);
12903 return VOS_STATUS_E_NOMEM;
12904 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012905 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12906 if ( NULL == pWdaParams )
12907 {
12908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012910 VOS_ASSERT(0);
12911 vos_mem_free(wdiUpdateScanParamsInfoType);
12912 return VOS_STATUS_E_NOMEM;
12913 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012914 //
12915 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
12916 //
Jeff Johnson295189b2012-06-20 16:38:30 -070012917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12918 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
12919 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
12920 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
12921 "sir struct %d wdi struct %d",
12922 pUpdateScanParams->b11dEnabled,
12923 pUpdateScanParams->b11dResolved,
12924 pUpdateScanParams->ucChannelCount,
12925 pUpdateScanParams->usPassiveMinChTime,
12926 pUpdateScanParams->usPassiveMaxChTime,
12927 pUpdateScanParams->usActiveMinChTime,
12928 pUpdateScanParams->usActiveMaxChTime,
12929 sizeof(tSirUpdateScanParams),
12930 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
12931
Jeff Johnson295189b2012-06-20 16:38:30 -070012932 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
12933 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070012934 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
12935 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070012936 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
12937 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070012938 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
12939 pUpdateScanParams->usActiveMaxChTime;
12940 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
12941 pUpdateScanParams->usActiveMinChTime;
12942 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
12943 pUpdateScanParams->usPassiveMaxChTime;
12944 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
12945 pUpdateScanParams->usPassiveMinChTime;
12946
Jeff Johnson295189b2012-06-20 16:38:30 -070012947 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053012948 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
12949 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070012950
Jeff Johnson295189b2012-06-20 16:38:30 -070012951 for ( i = 0; i <
12952 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
12953 i++)
12954 {
12955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12956 "Update Scan Parameters channel: %d",
12957 pUpdateScanParams->aChannels[i]);
12958
12959 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
12960 pUpdateScanParams->aChannels[i];
12961 }
12962
Yue Ma7f44bbe2013-04-12 11:47:39 -070012963 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
12964 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012965
Jeff Johnson295189b2012-06-20 16:38:30 -070012966 /* Store Params pass it to WDI */
12967 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
12968 pWdaParams->pWdaContext = pWDA;
12969 /* Store param pointer as passed in by caller */
12970 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070012971
Jeff Johnson295189b2012-06-20 16:38:30 -070012972
12973
12974 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012975 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012976 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012977 if(IS_WDI_STATUS_FAILURE(status))
12978 {
12979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12980 "Failure in Update Scan Params EQ WDI API, free all the memory " );
12981 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12982 vos_mem_free(pWdaParams->wdaMsgParam);
12983 vos_mem_free(pWdaParams);
12984 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012985 return CONVERT_WDI2VOS_STATUS(status) ;
12986}
12987#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012988
12989#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12990/*
12991 * FUNCTION: WDA_RoamOffloadScanReqCallback
12992 *
12993 */
12994void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
12995{
12996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012997 vos_msg_t vosMsg;
12998 wpt_uint8 reason = 0;
12999
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013001 "<------ %s " ,__func__);
13002 if (NULL == pWdaParams)
13003 {
13004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13005 "%s: pWdaParams received NULL", __func__);
13006 VOS_ASSERT(0) ;
13007 return ;
13008 }
13009 if ( pWdaParams != NULL )
13010 {
13011 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13012 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013013 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13015 }
13016 if ( pWdaParams->wdaMsgParam != NULL)
13017 {
13018 vos_mem_free(pWdaParams->wdaMsgParam);
13019 }
13020
13021 vos_mem_free(pWdaParams) ;
13022 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013023 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
13024 vosMsg.bodyptr = NULL;
13025 if (WDI_STATUS_SUCCESS != status)
13026 {
13027 reason = 0;
13028 }
13029 vosMsg.bodyval = reason;
13030 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13031 {
13032 /* free the mem and return */
13033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13034 "Failed to post the rsp to UMAC" ,__func__);
13035 }
13036
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013037 return ;
13038}
13039#endif
13040
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013041/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013042 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013043 *
13044 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013045void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013046{
13047 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13048
13049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13050 "<------ %s " ,__func__);
13051
13052 if(NULL == pWdaParams)
13053 {
13054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13055 "%s: pWdaParams received NULL", __func__);
13056 VOS_ASSERT(0);
13057 return;
13058 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013059
13060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13061 vos_mem_free(pWdaParams->wdaMsgParam);
13062 vos_mem_free(pWdaParams);
13063
13064 return;
13065}
13066/*
13067 * FUNCTION: WDA_SetPowerParamsReqCallback
13068 * Free memory.
13069 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
13070 */
13071void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13072{
13073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13074
13075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13076 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13077
13078 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013079 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13081 "%s: pWdaParams received NULL", __func__);
13082 VOS_ASSERT(0);
13083 return;
13084 }
13085
13086 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13087 {
13088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13089 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013090 vos_mem_free(pWdaParams);
13091 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013092
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013093 return;
13094}
13095
Jeff Johnson295189b2012-06-20 16:38:30 -070013096#ifdef WLAN_FEATURE_PACKET_FILTERING
13097/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013098 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013099 *
13100 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013101void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013102 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
13103 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013104{
13105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013107 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013108 if(NULL == pWdaParams)
13109 {
13110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013111 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013112 VOS_ASSERT(0) ;
13113 return ;
13114 }
13115
13116 vos_mem_free(pWdaParams->wdaMsgParam) ;
13117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13118 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013119 //print a msg, nothing else to do
13120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013121 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013122 return ;
13123}
Jeff Johnson295189b2012-06-20 16:38:30 -070013124/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013125 * FUNCTION: WDA_8023MulticastListReqCallback
13126 * Free memory.
13127 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
13128 */
13129void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
13130{
13131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13132
13133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13134 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13135
13136 if(NULL == pWdaParams)
13137 {
13138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13139 "%s: pWdaParams received NULL", __func__);
13140 VOS_ASSERT(0);
13141 return;
13142 }
13143
13144 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13145 {
13146 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13147 vos_mem_free(pWdaParams->wdaMsgParam);
13148 vos_mem_free(pWdaParams);
13149 }
13150
13151 return;
13152}
13153/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013154 * FUNCTION: WDA_Process8023MulticastListReq
13155 * Request to WDI to add 8023 Multicast List
13156 */
13157VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
13158 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
13159{
Jeff Johnson43971f52012-07-17 12:26:56 -070013160 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013161 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
13162 tWDA_ReqParams *pWdaParams ;
13163 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013165 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013166 pwdiFltPktSetMcListReqParamsType =
13167 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
13168 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
13169 ) ;
13170 if(NULL == pwdiFltPktSetMcListReqParamsType)
13171 {
13172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013173 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 return VOS_STATUS_E_NOMEM;
13175 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013176 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13177 if(NULL == pWdaParams)
13178 {
13179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013180 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013181 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
13182 return VOS_STATUS_E_NOMEM;
13183 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013184
Jeff Johnson295189b2012-06-20 16:38:30 -070013185 //
13186 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
13187 //
13188 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070013189 pRcvFltMcAddrList->ulMulticastAddrCnt;
13190
13191 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13192 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13193 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13194 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13195
Jeff Johnson295189b2012-06-20 16:38:30 -070013196 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13197 {
13198 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13199 &(pRcvFltMcAddrList->multicastAddr[i]),
13200 sizeof(tSirMacAddr));
13201 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013202 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13203 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013204
Jeff Johnson295189b2012-06-20 16:38:30 -070013205 /* Store Params pass it to WDI */
13206 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13207 pWdaParams->pWdaContext = pWDA;
13208 /* Store param pointer as passed in by caller */
13209 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 status = WDI_8023MulticastListReq(
13211 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013212 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013213 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013214 if(IS_WDI_STATUS_FAILURE(status))
13215 {
13216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13217 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13219 vos_mem_free(pWdaParams->wdaMsgParam);
13220 vos_mem_free(pWdaParams);
13221 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013222 return CONVERT_WDI2VOS_STATUS(status) ;
13223}
Jeff Johnson295189b2012-06-20 16:38:30 -070013224/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013225 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013226 *
13227 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013228void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013229 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13230 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013231{
13232 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013234 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013235 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013236 if(NULL == pWdaParams)
13237 {
13238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013239 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013240 VOS_ASSERT(0) ;
13241 return ;
13242 }
13243
13244 vos_mem_free(pWdaParams->wdaMsgParam) ;
13245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13246 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013247 //print a msg, nothing else to do
13248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013249 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013250 return ;
13251}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013252
13253/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013254 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13255 * Free memory.
13256 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013257 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013258void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013259 void* pUserData)
13260{
13261 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13262
13263 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13264 "<------ %s, wdiStatus: %d",
13265 __func__, wdiStatus);
13266
13267 if (NULL == pWdaParams)
13268 {
13269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13270 "%s: Invalid pWdaParams pointer", __func__);
13271 VOS_ASSERT(0);
13272 return;
13273 }
13274
13275 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13276 {
13277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13278 vos_mem_free(pWdaParams->wdaMsgParam);
13279 vos_mem_free(pWdaParams);
13280 }
13281
13282 return;
13283}
13284
Jeff Johnson295189b2012-06-20 16:38:30 -070013285/*
13286 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13287 * Request to WDI to set Receive Filters
13288 */
13289VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13290 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13291{
Jeff Johnson43971f52012-07-17 12:26:56 -070013292 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013293 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13294 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13295 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13296 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13297 tWDA_ReqParams *pWdaParams ;
13298 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013300 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013301 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13302 {
13303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013304 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013305 VOS_ASSERT(0);
13306 return VOS_STATUS_E_NOMEM;
13307 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013308 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13309 if(NULL == pWdaParams)
13310 {
13311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013312 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013313 VOS_ASSERT(0);
13314 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
13315 return VOS_STATUS_E_NOMEM;
13316 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013317 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
13318 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
13319 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
13320 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013321 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
13322 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
13323
13324 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
13325 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013326
13327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13328 "FID %d FT %d NParams %d CT %d",
13329 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
13330 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
13331 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
13332 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070013333 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
13334 {
13335 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
13336 &pRcvPktFilterCfg->paramsData[i],
13337 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070013338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13339 "Proto %d Comp Flag %d \n",
13340 pwdiSetRcvPktFilterReqParamsType->
13341 wdiPktFilterCfg.paramsData[i].protocolLayer,
13342 pwdiSetRcvPktFilterReqParamsType->
13343 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070013344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13345 "Data Offset %d Data Len %d\n",
13346 pwdiSetRcvPktFilterReqParamsType->
13347 wdiPktFilterCfg.paramsData[i].dataOffset,
13348 pwdiSetRcvPktFilterReqParamsType->
13349 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070013350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13351 "CData: %d:%d:%d:%d:%d:%d\n",
13352 pwdiSetRcvPktFilterReqParamsType->
13353 wdiPktFilterCfg.paramsData[i].compareData[0],
13354 pwdiSetRcvPktFilterReqParamsType->
13355 wdiPktFilterCfg.paramsData[i].compareData[1],
13356 pwdiSetRcvPktFilterReqParamsType->
13357 wdiPktFilterCfg.paramsData[i].compareData[2],
13358 pwdiSetRcvPktFilterReqParamsType->
13359 wdiPktFilterCfg.paramsData[i].compareData[3],
13360 pwdiSetRcvPktFilterReqParamsType->
13361 wdiPktFilterCfg.paramsData[i].compareData[4],
13362 pwdiSetRcvPktFilterReqParamsType->
13363 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13365 "MData: %d:%d:%d:%d:%d:%d\n",
13366 pwdiSetRcvPktFilterReqParamsType->
13367 wdiPktFilterCfg.paramsData[i].dataMask[0],
13368 pwdiSetRcvPktFilterReqParamsType->
13369 wdiPktFilterCfg.paramsData[i].dataMask[1],
13370 pwdiSetRcvPktFilterReqParamsType->
13371 wdiPktFilterCfg.paramsData[i].dataMask[2],
13372 pwdiSetRcvPktFilterReqParamsType->
13373 wdiPktFilterCfg.paramsData[i].dataMask[3],
13374 pwdiSetRcvPktFilterReqParamsType->
13375 wdiPktFilterCfg.paramsData[i].dataMask[4],
13376 pwdiSetRcvPktFilterReqParamsType->
13377 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013378 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013379 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013380 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013381 /* Store Params pass it to WDI */
13382 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
13383 pWdaParams->pWdaContext = pWDA;
13384 /* Store param pointer as passed in by caller */
13385 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013386 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013387 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013388 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013389 if(IS_WDI_STATUS_FAILURE(status))
13390 {
13391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13392 "Failure in SetFilter(),free all the memory,status %d ",status);
13393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13394 vos_mem_free(pWdaParams->wdaMsgParam);
13395 vos_mem_free(pWdaParams);
13396 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013397 return CONVERT_WDI2VOS_STATUS(status) ;
13398}
Jeff Johnson295189b2012-06-20 16:38:30 -070013399/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013400 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013401 *
13402 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013403void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013404 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13405 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013406{
13407 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13408 tWDA_CbContext *pWDA;
13409 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13410 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13411 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13412 tANI_U8 i;
13413 vos_msg_t vosMsg;
13414
13415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013417 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13418
Jeff Johnsone7245742012-09-05 17:12:55 -070013419 if(NULL == pRcvFltPktMatchCntRsp)
13420 {
13421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013422 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013423 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013424 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013425 return ;
13426 }
13427
Jeff Johnson295189b2012-06-20 16:38:30 -070013428 if(NULL == pWdaParams)
13429 {
13430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013431 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013432 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013433 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013434 return ;
13435 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013436 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13437 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013438 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13439 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13440
13441 /* Message Header */
13442 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13443 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13444
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013445 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013446
13447 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13448 {
13449 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13450 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13451 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013452 /* VOS message wrapper */
13453 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13454 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13455 vosMsg.bodyval = 0;
13456 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13457 {
13458 /* free the mem and return */
13459 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13460 }
13461
13462 vos_mem_free(pWdaParams->wdaMsgParam) ;
13463 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13464 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013465
13466 return;
13467}
13468/*
13469 * FUNCTION: WDA_FilterMatchCountReqCallback
13470 * Free memory and send RSP back to SME.
13471 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13472 */
13473void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13474{
13475 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13476 vos_msg_t vosMsg;
13477
13478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13479 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13480
13481 if(NULL == pWdaParams)
13482 {
13483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13484 "%s: pWdaParams received NULL", __func__);
13485 VOS_ASSERT(0);
13486 return;
13487 }
13488
13489 /* VOS message wrapper */
13490 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13491 vosMsg.bodyptr = NULL;
13492 vosMsg.bodyval = 0;
13493
13494 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13495 {
13496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13497 vos_mem_free(pWdaParams->wdaMsgParam);
13498 vos_mem_free(pWdaParams);
13499 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13500 }
13501
13502 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013503}
Jeff Johnson295189b2012-06-20 16:38:30 -070013504/*
13505 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13506 * Request to WDI to get PC Filter Match Count
13507 */
13508VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13509{
Jeff Johnson43971f52012-07-17 12:26:56 -070013510 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013511 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13512 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13513 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013515 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013516 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13517 {
13518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013520 VOS_ASSERT(0);
13521 return VOS_STATUS_E_NOMEM;
13522 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013523 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13524 if(NULL == pWdaParams)
13525 {
13526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013527 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013528 VOS_ASSERT(0);
13529 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13530 return VOS_STATUS_E_NOMEM;
13531 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013532
Yue Ma7f44bbe2013-04-12 11:47:39 -070013533 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13534 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013535
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013536 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13537 pRcvFltPktMatchRsp->bssId,
13538 sizeof(wpt_macAddr));
13539
Jeff Johnson295189b2012-06-20 16:38:30 -070013540 /* Store Params pass it to WDI */
13541 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13542 pWdaParams->pWdaContext = pWDA;
13543 /* Store param pointer as passed in by caller */
13544 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013545 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013546 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013547 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013548 if(IS_WDI_STATUS_FAILURE(status))
13549 {
13550 /* failure returned by WDI API */
13551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13552 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13554 vos_mem_free(pWdaParams) ;
13555 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13556 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13557 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013558 return CONVERT_WDI2VOS_STATUS(status) ;
13559}
Jeff Johnson295189b2012-06-20 16:38:30 -070013560/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013561 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013562 *
13563 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013564void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013565 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13566 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013567{
13568 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013570 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013571/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13572 if(NULL == pWdaParams)
13573 {
13574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013575 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013576 VOS_ASSERT(0) ;
13577 return ;
13578 }
13579
13580 vos_mem_free(pWdaParams->wdaMsgParam) ;
13581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13582 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013583 //print a msg, nothing else to do
13584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013585 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013586 return ;
13587}
Jeff Johnson295189b2012-06-20 16:38:30 -070013588/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013589 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13590 * Free memory.
13591 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13592 */
13593void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13594{
13595 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13596
13597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13598 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13599
13600 if(NULL == pWdaParams)
13601 {
13602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13603 "%s: Invalid pWdaParams pointer", __func__);
13604 VOS_ASSERT(0);
13605 return;
13606 }
13607
13608 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13609 {
13610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13611 vos_mem_free(pWdaParams->wdaMsgParam);
13612 vos_mem_free(pWdaParams);
13613 }
13614
13615 return;
13616}
13617/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013618 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13619 * Request to WDI to clear Receive Filters
13620 */
13621VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13622 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13623{
Jeff Johnson43971f52012-07-17 12:26:56 -070013624 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013625 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13626 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13627 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013629 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013630 if(NULL == pwdiRcvFltPktClearReqParamsType)
13631 {
13632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013634 VOS_ASSERT(0);
13635 return VOS_STATUS_E_NOMEM;
13636 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013637 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13638 if(NULL == pWdaParams)
13639 {
13640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013641 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013642 VOS_ASSERT(0);
13643 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13644 return VOS_STATUS_E_NOMEM;
13645 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013646 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13647 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013648 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13649 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13650 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13651 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013652
Yue Ma7f44bbe2013-04-12 11:47:39 -070013653 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013654 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013655 /* Store Params pass it to WDI */
13656 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13657 pWdaParams->pWdaContext = pWDA;
13658 /* Store param pointer as passed in by caller */
13659 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013660 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013661 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013662 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013663 if(IS_WDI_STATUS_FAILURE(status))
13664 {
13665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13666 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013668 vos_mem_free(pWdaParams->wdaMsgParam);
13669 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013671 return CONVERT_WDI2VOS_STATUS(status) ;
13672}
13673#endif // WLAN_FEATURE_PACKET_FILTERING
13674
Jeff Johnson295189b2012-06-20 16:38:30 -070013675/*
13676 * FUNCTION: WDA_ProcessSetPowerParamsReq
13677 * Request to WDI to set power params
13678 */
13679VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13680 tSirSetPowerParamsReq *pPowerParams)
13681{
Jeff Johnson43971f52012-07-17 12:26:56 -070013682 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013683 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13684 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013685 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013687 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013688 if(NULL == pwdiSetPowerParamsReqInfo)
13689 {
13690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013691 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013692 VOS_ASSERT(0);
13693 return VOS_STATUS_E_NOMEM;
13694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013695 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13696 if(NULL == pWdaParams)
13697 {
13698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013699 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013700 VOS_ASSERT(0);
13701 vos_mem_free(pwdiSetPowerParamsReqInfo);
13702 return VOS_STATUS_E_NOMEM;
13703 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013704
Jeff Johnson295189b2012-06-20 16:38:30 -070013705
13706 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13707 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013708 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13709 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013710 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13711 pPowerParams->uListenInterval;
13712 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13713 pPowerParams->uBcastMcastFilter;
13714 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13715 pPowerParams->uEnableBET;
13716 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13717 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070013718 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
13719 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013720 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13721 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013722
Jeff Johnson295189b2012-06-20 16:38:30 -070013723 /* Store Params pass it to WDI */
13724 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13725 pWdaParams->pWdaContext = pWDA;
13726 /* Store param pointer as passed in by caller */
13727 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013728 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013729 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013730 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013731 if(IS_WDI_STATUS_FAILURE(status))
13732 {
13733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13734 "Failure in Set power params REQ WDI API, free all the memory " );
13735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13736 vos_mem_free(pWdaParams->wdaMsgParam);
13737 pWdaParams->wdaWdiApiMsgParam = NULL;
13738 pWdaParams->wdaMsgParam = NULL;
13739 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 return CONVERT_WDI2VOS_STATUS(status) ;
13741}
13742
13743/*
13744 * FUNCTION: WDA_SetTmLevelRspCallback
13745 * Set TM Level response
13746 */
13747void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13748{
13749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13750
13751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013752 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013753
13754 if(NULL == pWdaParams)
13755 {
13756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013757 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013758 VOS_ASSERT(0) ;
13759 return ;
13760 }
13761
13762 /* Dose not need to send notification to upper layer
13763 * Just free allocated resources */
13764 if( pWdaParams != NULL )
13765 {
13766 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13767 {
13768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13769 }
13770 vos_mem_free(pWdaParams->wdaMsgParam) ;
13771 vos_mem_free(pWdaParams) ;
13772 }
13773}
13774
13775/*
13776 * FUNCTION: WDA_ProcessSetTmLevelReq
13777 * Set TM Level request
13778 */
13779VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13780 tAniSetTmLevelReq *setTmLevelReq)
13781{
13782 WDI_Status status = WDI_STATUS_SUCCESS ;
13783 tWDA_ReqParams *pWdaParams ;
13784 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13785 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13786 sizeof(WDI_SetTmLevelReqType)) ;
13787 if(NULL == wdiSetTmLevelReq)
13788 {
13789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013790 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013791 VOS_ASSERT(0);
13792 return VOS_STATUS_E_NOMEM;
13793 }
13794
13795 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13796 if(NULL == pWdaParams)
13797 {
13798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013800 VOS_ASSERT(0);
13801 vos_mem_free(wdiSetTmLevelReq);
13802 return VOS_STATUS_E_NOMEM;
13803 }
13804
13805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013806 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013807
13808 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
13809 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
13810
13811 pWdaParams->pWdaContext = pWDA;
13812 pWdaParams->wdaMsgParam = setTmLevelReq;
13813 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
13814
13815 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
13816 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
13817
13818 if(IS_WDI_STATUS_FAILURE(status))
13819 {
13820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080013821 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070013822 vos_mem_free(pWdaParams->wdaMsgParam) ;
13823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13824 vos_mem_free(pWdaParams) ;
13825 }
13826
13827 return CONVERT_WDI2VOS_STATUS(status) ;
13828}
13829
13830VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
13831 tpTxControlParams pTxCtrlParam)
13832{
13833 VOS_STATUS wdaStatus;
13834
13835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013836 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013837 if( pTxCtrlParam == NULL )
13838 {
13839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013840 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013841 return VOS_STATUS_E_FAILURE;
13842 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013843 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
13844 {
13845 wdaStatus = WDA_SuspendDataTx(pWDA);
13846 }
13847 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
13848 {
13849 wdaStatus = WDA_ResumeDataTx(pWDA);
13850 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013851 return wdaStatus;
13852}
13853
13854 /* FUNCTION WDA_featureCapsExchange
13855 * WDA API to invoke capability exchange between host and FW.
13856 */
13857void WDA_featureCapsExchange(v_PVOID_t pVosContext)
13858{
13859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013860 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013861 WDI_featureCapsExchangeReq( NULL, pVosContext);
13862}
13863
Yathish9f22e662012-12-10 14:21:35 -080013864/* FUNCTION WDA_disableCapablityFeature
13865 * WDA API to diable Active mode offload in host.
13866 */
13867void WDA_disableCapablityFeature(tANI_U8 feature_index)
13868{
13869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13870 "%s:enter", __func__ );
13871 WDI_disableCapablityFeature(feature_index);
13872}
13873
Jeff Johnson295189b2012-06-20 16:38:30 -070013874 /* FUNCTION WDA_getHostWlanFeatCaps
13875 * Wrapper for WDI API, that will return if the feature (enum value).passed
13876 * to this API is supported or not in Host
13877 * return value
13878 * 0 - implies feature is NOT Supported
13879 * any non zero value - implies feature is SUPPORTED
13880 */
13881tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
13882{
13883 return WDI_getHostWlanFeatCaps(featEnumValue);
13884}
13885
13886 /* FUNCTION WDA_getFwWlanFeatCaps
13887 * Wrapper for WDI API, that will return if the feature (enum value).passed
13888 * to this API is supported or not in FW
13889 * return value
13890 * 0 - implies feature is NOT Supported
13891 * any non zero value - implies feature is SUPPORTED
13892 */
13893tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
13894{
13895 return WDI_getFwWlanFeatCaps(featEnumValue);
13896}
13897
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053013898
Jeff Johnson295189b2012-06-20 16:38:30 -070013899/*
13900 * FUNCTION: WDA_shutdown
13901 * Shutdown WDA/WDI without handshaking with Riva.
13902 * Synchronous function.
13903 */
13904VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
13905{
13906 WDI_Status wdiStatus;
13907 //tANI_U8 eventIdx = 0;
13908 VOS_STATUS status = VOS_STATUS_SUCCESS;
13909 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013910 if (NULL == pWDA)
13911 {
13912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013913 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013914 VOS_ASSERT(0);
13915 return VOS_STATUS_E_FAILURE;
13916 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013917 /* FTM mode stay START_STATE */
13918 if( (WDA_READY_STATE != pWDA->wdaState) &&
13919 (WDA_INIT_STATE != pWDA->wdaState) &&
13920 (WDA_START_STATE != pWDA->wdaState) )
13921 {
13922 VOS_ASSERT(0);
13923 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013924
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013925 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
13926 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070013927 {
13928 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013929 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013931
Jeff Johnson295189b2012-06-20 16:38:30 -070013932 /* call WDI shutdown */
13933 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070013934 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
13935 {
13936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13937 "error in WDA Stop" );
13938 status = VOS_STATUS_E_FAILURE;
13939 }
13940 /* WDI stop is synchrnous, shutdown is complete when it returns */
13941 pWDA->wdaState = WDA_STOP_STATE;
13942
Jeff Johnson295189b2012-06-20 16:38:30 -070013943 /* shutdown should perform the stop & close actions. */
13944 /* Destroy the event */
13945 status = vos_event_destroy(&pWDA->txFrameEvent);
13946 if(!VOS_IS_STATUS_SUCCESS(status))
13947 {
13948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13949 "VOS Event destroy failed - status = %d\n", status);
13950 status = VOS_STATUS_E_FAILURE;
13951 }
13952 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
13953 if(!VOS_IS_STATUS_SUCCESS(status))
13954 {
13955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13956 "VOS Event destroy failed - status = %d\n", status);
13957 status = VOS_STATUS_E_FAILURE;
13958 }
13959 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
13960 if(!VOS_IS_STATUS_SUCCESS(status))
13961 {
13962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13963 "VOS Event destroy failed - status = %d\n", status);
13964 status = VOS_STATUS_E_FAILURE;
13965 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013966 /* free WDA context */
13967 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
13968 if ( !VOS_IS_STATUS_SUCCESS(status) )
13969 {
13970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13971 "error in WDA close " );
13972 status = VOS_STATUS_E_FAILURE;
13973 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013974 return status;
13975}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013976
Jeff Johnsone7245742012-09-05 17:12:55 -070013977/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013978 * FUNCTION: WDA_setNeedShutdown
13979 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070013980 */
13981
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013982void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070013983{
13984 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013985 if(pWDA == NULL)
13986 {
13987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13988 "Could not get the WDA Context pointer" );
13989 return;
13990 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013991 pWDA->needShutdown = TRUE;
13992}
13993/*
13994 * FUNCTION: WDA_needShutdown
13995 * WDA needs a shutdown
13996 */
13997
13998v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
13999{
14000 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014001 if(pWDA == NULL)
14002 {
14003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14004 "Could not get the WDA Context pointer" );
14005 return 0;
14006 }
14007 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014008}
14009
Mohit Khanna4a70d262012-09-11 16:30:12 -070014010#ifdef WLAN_FEATURE_11AC
14011/*
14012 * FUNCTION: WDA_SetBeaconFilterReqCallback
14013 *
14014 */
14015void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
14016{
14017 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014019 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014020 if(NULL == pWdaParams)
14021 {
14022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014023 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014024 VOS_ASSERT(0) ;
14025 return ;
14026 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014027
Mohit Khanna4a70d262012-09-11 16:30:12 -070014028 vos_mem_free(pWdaParams->wdaMsgParam) ;
14029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14030 vos_mem_free(pWdaParams) ;
14031 /*
14032 * No respone required for SetBeaconFilter req so just free the request
14033 * param here
14034 */
14035
14036 return ;
14037}
14038
14039VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
14040 tUpdateVHTOpMode *pData)
14041{
14042 WDI_Status status = WDI_STATUS_SUCCESS ;
14043 tWDA_ReqParams *pWdaParams ;
14044 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
14045 sizeof(WDI_UpdateVHTOpMode)) ;
14046 if(NULL == wdiTemp)
14047 {
14048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014049 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014050 VOS_ASSERT(0);
14051 return VOS_STATUS_E_NOMEM;
14052 }
14053 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14054 if(NULL == pWdaParams)
14055 {
14056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014057 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014058 VOS_ASSERT(0);
14059 vos_mem_free(wdiTemp);
14060 return VOS_STATUS_E_NOMEM;
14061 }
14062
14063 wdiTemp->opMode = pData->opMode;
14064 wdiTemp->staId = pData->staId;
14065
14066 pWdaParams->pWdaContext = pWDA;
14067 /* Store Req pointer, as this will be used for response */
14068 pWdaParams->wdaMsgParam = (void *)pData;
14069 /* store Params pass it to WDI */
14070 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
14071
14072 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
14073
14074 if(IS_WDI_STATUS_FAILURE(status))
14075 {
14076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14077 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
14078 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14079 vos_mem_free(pWdaParams->wdaMsgParam);
14080 vos_mem_free(pWdaParams);
14081 }
14082 return CONVERT_WDI2VOS_STATUS(status) ;
14083}
14084#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014085
14086/*==========================================================================
14087 FUNCTION WDA_TransportChannelDebug
14088
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070014089 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014090 Display Transport Channel debugging information
14091 User may request to display DXE channel snapshot
14092 Or if host driver detects any abnormal stcuk may display
14093
14094 PARAMETERS
schang6295e542013-03-12 15:31:23 -070014095 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080014096 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014097 enableStallDetect : Enable stall detect feature
14098 This feature will take effect to data performance
14099 Not integrate till fully verification
14100
14101 RETURN VALUE
14102 NONE
14103
14104===========================================================================*/
14105void WDA_TransportChannelDebug
14106(
schang6295e542013-03-12 15:31:23 -070014107 tpAniSirGlobal pMac,
14108 v_BOOL_t displaySnapshot,
14109 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014110)
14111{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070014112 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014113 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014114}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070014115
14116/*==========================================================================
14117 FUNCTION WDA_SetEnableSSR
14118
14119 DESCRIPTION
14120 API to enable/disable SSR on WDI timeout
14121
14122 PARAMETERS
14123 enableSSR : enable/disable SSR
14124
14125 RETURN VALUE
14126 NONE
14127
14128===========================================================================*/
14129void WDA_SetEnableSSR(v_BOOL_t enableSSR)
14130{
14131 WDI_SetEnableSSR(enableSSR);
14132}
Leo Chang9056f462013-08-01 19:21:11 -070014133
14134#ifdef FEATURE_WLAN_LPHB
14135/*
14136 * FUNCTION: WDA_LPHBconfRspCallback
14137 *
14138 */
14139void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
14140{
14141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14142
14143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14144 "<------ %s " ,__func__);
14145 if (NULL == pWdaParams)
14146 {
14147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14148 "%s: pWdaParams received NULL", __func__);
14149 VOS_ASSERT(0) ;
14150 return ;
14151 }
14152
14153 /* Do not need to send notification to upper layer
14154 * Just free allocated resources */
14155 if (pWdaParams != NULL)
14156 {
14157 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14158 {
14159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14160 }
14161 vos_mem_free(pWdaParams->wdaMsgParam) ;
14162 vos_mem_free(pWdaParams) ;
14163 }
14164
14165 return;
14166}
14167
14168/*
14169 * FUNCTION: WDA_ProcessLPHBConfReq
14170 *
14171 */
14172VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
14173 tSirLPHBReq *pData)
14174{
14175 WDI_Status wdiStatus;
14176 tWDA_ReqParams *pWdaParams ;
14177
14178 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14179 "------> %s " , __func__);
14180
14181 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14182 if (NULL == pWdaParams)
14183 {
14184 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14185 "%s: VOS MEM Alloc Failure", __func__);
14186 VOS_ASSERT(0);
14187 vos_mem_free(pData);
14188 return VOS_STATUS_E_NOMEM;
14189 }
14190
14191 pWdaParams->pWdaContext = pWDA;
14192 pWdaParams->wdaMsgParam = (void *)pData;
14193 pWdaParams->wdaWdiApiMsgParam = NULL;
14194
14195 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
14196 if (WDI_STATUS_PENDING == wdiStatus)
14197 {
14198 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14199 "Pending received for %s:%d ", __func__, __LINE__);
14200 }
14201 else if (WDI_STATUS_SUCCESS != wdiStatus)
14202 {
14203 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14204 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
14205 vos_mem_free(pWdaParams->wdaMsgParam);
14206 vos_mem_free(pWdaParams);
14207 }
14208
14209 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14210}
14211#endif /* FEATURE_WLAN_LPHB */
14212